golang / go

The Go programming language
https://go.dev
BSD 3-Clause "New" or "Revised" License
123.91k stars 17.65k forks source link

crypto: boringcrypto cgo pointer failures #55318

Open gopherbot opened 2 years ago

gopherbot commented 2 years ago
#!watchflakes
post <- builder ~ `boringcrypto` && `cgo argument has Go pointer to Go pointer`

Issue created automatically to collect these failures.

Example (log):

--- FAIL: TestVersion (0.00s)
panic: runtime error: cgo argument has Go pointer to Go pointer [recovered]
    panic: runtime error: cgo argument has Go pointer to Go pointer

goroutine 488 [running]:
panic({0x3af200, 0x40002fc4c0})
    /workdir/go/src/runtime/panic.go:987 +0x3e0 fp=0x4000400f60 sp=0x4000400ea0 pc=0x12e190
testing.tRunner.func1.2({0x3af200, 0x40002fc4c0})
    /workdir/go/src/testing/testing.go:1396 +0x1c8 fp=0x4000401010 sp=0x4000400f60 pc=0x1d7308
testing.tRunner.func1()
...
crypto/tls.TestVersion(0x40002a04e0)
    /workdir/go/src/crypto/tls/handshake_server_test.go:390 +0xc4 fp=0x4000401f60 sp=0x4000401c30 pc=0x3317c4
testing.tRunner(0x40002a04e0, 0x436b00)
    /workdir/go/src/testing/testing.go:1446 +0x10c fp=0x4000401fb0 sp=0x4000401f60 pc=0x1d6a3c
testing.(*T).Run.func1()
    /workdir/go/src/testing/testing.go:1493 +0x2c fp=0x4000401fd0 sp=0x4000401fb0 pc=0x1d777c
runtime.goexit()
    /workdir/go/src/runtime/asm_arm64.s:1165 +0x4 fp=0x4000401fd0 sp=0x4000401fd0 pc=0x1617a4
created by testing.(*T).Run
    /workdir/go/src/testing/testing.go:1493 +0x328

watchflakes

gopherbot commented 2 years ago

Found new dashboard test flakes for:

#!watchflakes
post <- pkg == "crypto/tls" && test == "TestVersion"
2022-08-18 21:54 linux-arm64-boringcrypto go@17211c35 crypto/tls.TestVersion (log) --- FAIL: TestVersion (0.00s) panic: runtime error: cgo argument has Go pointer to Go pointer [recovered] panic: runtime error: cgo argument has Go pointer to Go pointer goroutine 488 [running]: panic({0x3af200, 0x40002fc4c0}) /workdir/go/src/runtime/panic.go:987 +0x3e0 fp=0x4000400f60 sp=0x4000400ea0 pc=0x12e190 testing.tRunner.func1.2({0x3af200, 0x40002fc4c0}) /workdir/go/src/testing/testing.go:1396 +0x1c8 fp=0x4000401010 sp=0x4000400f60 pc=0x1d7308 testing.tRunner.func1() ... crypto/tls.TestVersion(0x40002a04e0) /workdir/go/src/crypto/tls/handshake_server_test.go:390 +0xc4 fp=0x4000401f60 sp=0x4000401c30 pc=0x3317c4 testing.tRunner(0x40002a04e0, 0x436b00) /workdir/go/src/testing/testing.go:1446 +0x10c fp=0x4000401fb0 sp=0x4000401f60 pc=0x1d6a3c testing.(*T).Run.func1() /workdir/go/src/testing/testing.go:1493 +0x2c fp=0x4000401fd0 sp=0x4000401fb0 pc=0x1d777c runtime.goexit() /workdir/go/src/runtime/asm_arm64.s:1165 +0x4 fp=0x4000401fd0 sp=0x4000401fd0 pc=0x1617a4 created by testing.(*T).Run /workdir/go/src/testing/testing.go:1493 +0x328

watchflakes

rsc commented 2 years ago

Changed to track boringcrypto pointer failures. I think they're over but I don't remember fixing them.

gopherbot commented 2 years ago

Found new dashboard test flakes for:

#!watchflakes
post <- builder ~ `boringcrypto` && `cgo argument has Go pointer to Go pointer`
2022-08-17 18:37 linux-amd64-boringcrypto crypto@04dced17 go@57d05512 x/crypto/internal/wycheproof.TestHkdf (log) --- FAIL: TestHkdf (0.02s) panic: runtime error: cgo argument has Go pointer to Go pointer [recovered] panic: runtime error: cgo argument has Go pointer to Go pointer goroutine 1732 [running]: testing.tRunner.func1.2({0x740ea0, 0xc00006ecb0}) /workdir/go/src/testing/testing.go:1396 +0x24e testing.tRunner.func1() /workdir/go/src/testing/testing.go:1399 +0x39f panic({0x740ea0, 0xc00006ecb0}) /workdir/go/src/runtime/panic.go:884 +0x212 crypto/internal/boring.(*boringHMAC).Reset.func1(0xc000479c20) /workdir/go/src/crypto/internal/boring/hmac.go:107 +0x57 crypto/internal/boring.(*boringHMAC).Reset(0xc000479c20) /workdir/go/src/crypto/internal/boring/hmac.go:107 +0x94 crypto/internal/boring.NewHMAC(0xc000641b88?, {0xc000024d20, 0x38, 0x0?}) /workdir/go/src/crypto/internal/boring/hmac.go:79 +0x125 crypto/hmac.New(0xc000641cd8, {0xc000024d20, 0x38, 0x70}) /workdir/go/src/crypto/hmac/hmac.go:131 +0x31 golang.org/x/crypto/hkdf.Extract(0xc00044bc20?, {0xc000476a00, 0x20, 0x40}, {0xc000024d20?, 0x20?, 0x30?}) /workdir/gopath/src/golang.org/x/crypto/hkdf/hkdf.go:30 +0x85 golang.org/x/crypto/hkdf.New(0x15?, {0xc000476a00?, 0x20?, 0x82d248?}, {0xc000024d20?, 0xc000057ca0?, 0x5c57f9?}, {0xc00044bc20, 0x14, 0x30}) /workdir/gopath/src/golang.org/x/crypto/hkdf/hkdf.go:91 +0x2b golang.org/x/crypto/internal/wycheproof.TestHkdf(0xc000600820) /workdir/gopath/src/golang.org/x/crypto/internal/wycheproof/hkdf_test.go:95 +0x450 testing.tRunner(0xc000600820, 0x792668) /workdir/go/src/testing/testing.go:1446 +0x10b created by testing.(*T).Run /workdir/go/src/testing/testing.go:1493 +0x35f
2022-08-17 18:37 linux-amd64-boringcrypto crypto@04dced17 go@ebda5a73 x/crypto/internal/wycheproof.TestHkdf (log) --- FAIL: TestHkdf (0.00s) panic: runtime error: cgo argument has Go pointer to Go pointer [recovered] panic: runtime error: cgo argument has Go pointer to Go pointer goroutine 879 [running]: testing.tRunner.func1.2({0x740ea0, 0xc00014f2b0}) /workdir/go/src/testing/testing.go:1396 +0x24e testing.tRunner.func1() /workdir/go/src/testing/testing.go:1399 +0x39f panic({0x740ea0, 0xc00014f2b0}) /workdir/go/src/runtime/panic.go:884 +0x212 crypto/internal/boring.(*boringHMAC).Reset.func1(0xc0001efd40) /workdir/go/src/crypto/internal/boring/hmac.go:107 +0x57 crypto/internal/boring.(*boringHMAC).Reset(0xc0001efd40) /workdir/go/src/crypto/internal/boring/hmac.go:107 +0x94 crypto/internal/boring.NewHMAC(0xc000173b88?, {0xc0003ebb90, 0x41, 0x0?}) /workdir/go/src/crypto/internal/boring/hmac.go:79 +0x125 crypto/hmac.New(0xc000173cd8, {0xc0003ebb90, 0x41, 0x90}) /workdir/go/src/crypto/hmac/hmac.go:131 +0x31 golang.org/x/crypto/hkdf.Extract(0xc0001cd410?, {0xc0001cd3e0, 0x14, 0x30}, {0xc0003ebb90?, 0x20?, 0x30?}) /workdir/gopath/src/golang.org/x/crypto/hkdf/hkdf.go:30 +0x85 golang.org/x/crypto/hkdf.New(0x13?, {0xc0001cd3e0?, 0x20?, 0x82d248?}, {0xc0003ebb90?, 0xc00037b4a0?, 0x5c57f9?}, {0xc0001cd410, 0x14, 0x30}) /workdir/gopath/src/golang.org/x/crypto/hkdf/hkdf.go:91 +0x2b golang.org/x/crypto/internal/wycheproof.TestHkdf(0xc00042a1a0) /workdir/gopath/src/golang.org/x/crypto/internal/wycheproof/hkdf_test.go:95 +0x450 testing.tRunner(0xc00042a1a0, 0x792648) /workdir/go/src/testing/testing.go:1446 +0x10b created by testing.(*T).Run /workdir/go/src/testing/testing.go:1493 +0x35f

watchflakes

DeeptimanQlik commented 10 months ago

Changed to track boringcrypto pointer failures. I think they're over but I don't remember fixing them.

@rsc We are started to seeing the cgo pointer failures with boringcrypto recently. Any plan to fix this issue?

panic: runtime error: cgo argument has Go pointer to unpinned Go pointer

goroutine 1 [running]:
solace.dev/go/messaging/internal/ccsmp.(*SolClientContext).SolClientSessionCreate.func1.1(0x7f76c6d08a68?, 0x30?, 0xc000600400?, 0xc000226de0?)
/go/src/example/vendor/solace.dev/go/messaging/internal/ccsmp/ccsmp_core.go:265 
+0x51solace.dev/go/messaging/internal/ccsmp.(*SolClientContext).SolClientSessionCreate.func1()
/go/src/example/vendor/solace.dev/go/messaging/internal/ccsmp/ccsmp_core.go:265 +0x25

The internal library solace uses a CGO function with //go:cgo_unsafe_args directives. And this is causing the runtime error with boringcrypto.

And this Unpinned pointer runtime error only happens when we try to enable GOEXPERIMENT=boringcrypto in the application.