Skip to content

Commit 8e3dedc

Browse files
committed
icicle: protect ProvingKey.deviceInfo with mutex to prevent race condition
Concurrent calls to Prove() could simultaneously initialize pk.deviceInfo, causing double initialization and GPU memory corruption. Add setupMu sync.Mutex to ProvingKey struct and protect the entire setupDevicePointers() function with Lock/Unlock. This ensures atomic check-and-initialize semantics.
1 parent b29297c commit 8e3dedc

File tree

10 files changed

+30
-0
lines changed

10 files changed

+30
-0
lines changed

backend/accelerated/icicle/groth16/bls12-377/icicle.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/accelerated/icicle/groth16/bls12-377/provingkey.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/accelerated/icicle/groth16/bls12-381/icicle.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/accelerated/icicle/groth16/bls12-381/provingkey.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/accelerated/icicle/groth16/bn254/icicle.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/accelerated/icicle/groth16/bn254/provingkey.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/accelerated/icicle/groth16/bw6-761/icicle.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/accelerated/icicle/groth16/bw6-761/provingkey.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/accelerated/icicle/internal/generator/templates/groth16.icicle.go.tmpl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ func init() {
6464
}
6565

6666
func (pk *ProvingKey) setupDevicePointers(device *icicle_runtime.Device) error {
67+
pk.setupMu.Lock()
68+
defer pk.setupMu.Unlock()
69+
6770
if pk.deviceInfo != nil {
6871
return nil
6972
}

backend/accelerated/icicle/internal/generator/templates/groth16.icicle.provingkey.go.tmpl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
//go:build icicle
22

33
import (
4+
"sync"
5+
46
"github.com/consensys/gnark-crypto/ecc/{{ toLower .Curve }}/fr"
57
groth16_{{ .CurvePkg }} "github.com/consensys/gnark/backend/groth16/{{ toLower .Curve }}"
68
icicle_core "github.com/ingonyama-zk/icicle-gnark/v3/wrappers/golang/core"
@@ -25,4 +27,5 @@ type deviceInfo struct {
2527
type ProvingKey struct {
2628
groth16_{{ .CurvePkg }}.ProvingKey
2729
*deviceInfo
30+
setupMu sync.Mutex // Protects concurrent deviceInfo initialization
2831
}

0 commit comments

Comments
 (0)