Skip to content

crypto/x509: Certificate.Verify crash on macOS with Go 1.18 #51759

@bradfitz

Description

@bradfitz

On macOS, on an M1 Mac running macOS 12.3 and Go 1.18, crypto/x509.(*Certificate).Verify crashes:

SIGTRAP: trace trap
PC=0x197f52664 m=13 sigcode=0

goroutine 0 [idle]:
crypto/x509/internal/macos.syscall(0x14000200480?, 0x140002329f0?, 0x1400024ca68?, 0x1001f770c?, 0x1400024ca38?, 0x100341f84?, 0x10091c100?)
	/Users/bradfitz/sdk/go1.18/src/runtime/sys_darwin.go:99 +0x40 fp=0x1400024c9d0 sp=0x1400024c970 pc=0x100228880
crypto/x509/internal/macos.CFRelease(0x140002329f0?)
	/Users/bradfitz/sdk/go1.18/src/crypto/x509/internal/macos/corefoundation.go:152 +0x44 fp=0x1400024ca20 sp=0x1400024c9d0 pc=0x100341bb4
crypto/x509/internal/macos.ReleaseCFArray(0x1400024caa8?)
	/Users/bradfitz/sdk/go1.18/src/crypto/x509/internal/macos/corefoundation.go:204 +0x34 fp=0x1400024ca50 sp=0x1400024ca20 pc=0x100341e24
crypto/x509.(*Certificate).systemVerify.func1()
	/Users/bradfitz/sdk/go1.18/src/crypto/x509/root_darwin.go:14 +0x2c fp=0x1400024ca70 sp=0x1400024ca50 pc=0x10034b58c
runtime.deferreturn()
	/Users/bradfitz/sdk/go1.18/src/runtime/panic.go:436 +0x38 fp=0x1400024cab0 sp=0x1400024ca70 pc=0x1001f7718
crypto/x509.(*Certificate).systemVerify(0x14000474000, 0x1400024ce80)
	/Users/bradfitz/sdk/go1.18/src/crypto/x509/root_darwin.go:35 +0x30c fp=0x1400024cd10 sp=0x1400024cab0 pc=0x10034affc
crypto/x509.(*Certificate).Verify(0x14000474000, {{0x14000036408, 0x14}, 0x140005e4750, 0x0, {0x0, 0x0, 0x0}, {0x0, 0x0, ...}, ...})
	/Users/bradfitz/sdk/go1.18/src/crypto/x509/verify.go:747 +0x478 fp=0x1400024ce70 sp=0x1400024cd10 pc=0x10034efd8
tailscale.com/net/tlsdial.Config.func1({0x304, 0x0, 0x0, 0x1301, {0x0, 0x0}, 0x1, {0x14000036408, 0x14}, {0x140002382e0, ...}, ...})
	/Users/bradfitz/src/tailscale.com/net/tlsdial/tlsdial.go:79 +0x168 fp=0x1400024cfb0 sp=0x1400024ce70 pc=0x1004894c8
crypto/tls.(*Conn).verifyServerCertificate(0x1400017ce00, {0x1400010fec0, 0x4, 0x4})
	/Users/bradfitz/sdk/go1.18/src/crypto/tls/handshake_client.go:893 +0x3cc fp=0x1400024d240 sp=0x1400024cfb0 pc=0x10036763c
crypto/tls.(*clientHandshakeStateTLS13).readServerCertificate(0x1400024d648)
	/Users/bradfitz/sdk/go1.18/src/crypto/tls/handshake_client_tls13.go:457 +0x280 fp=0x1400024d450 sp=0x1400024d240 pc=0x100369d60
crypto/tls.(*clientHandshakeStateTLS13).handshake(0x1400024d648)
	/Users/bradfitz/sdk/go1.18/src/crypto/tls/handshake_client_tls13.go:87 +0x1c0 fp=0x1400024d490 sp=0x1400024d450 pc=0x100368160
crypto/tls.(*Conn).clientHandshake(0x1400017ce00, {0x1009bb0a0, 0x1400036e600})
	/Users/bradfitz/sdk/go1.18/src/crypto/tls/handshake_client.go:219 +0x444 fp=0x1400024d720 sp=0x1400024d490 pc=0x100363cb4
crypto/tls.(*Conn).clientHandshake-fm({0x1009bb0a0?, 0x1400036e600?})
	<autogenerated>:1 +0x40 fp=0x1400024d750 sp=0x1400024d720 pc=0x100386640
crypto/tls.(*Conn).handshakeContext(0x1400017ce00, {0x1009bb0d8, 0x1400003c080})
	/Users/bradfitz/sdk/go1.18/src/crypto/tls/conn.go:1452 +0x3cc fp=0x1400024d830 sp=0x1400024d750 pc=0x10036232c
crypto/tls.(*Conn).HandshakeContext(...)
	/Users/bradfitz/sdk/go1.18/src/crypto/tls/conn.go:1402
crypto/tls.(*Conn).Handshake(...)
	/Users/bradfitz/sdk/go1.18/src/crypto/tls/conn.go:1386
tailscale.com/derp/derphttp.(*Client).connect(0x14000470000, {0x1009bb0a0, 0x140003de340}, {0x10073b067, 0x17})
	/Users/bradfitz/src/tailscale.com/derp/derphttp/derphttp_client.go:374 +0xe78 fp=0x1400024df90 sp=0x1400024d830 pc=0x10048b218
tailscale.com/derp/derphttp.(*Client).Connect(...)
	/Users/bradfitz/src/tailscale.com/derp/derphttp/derphttp_client.go:131
tailscale.com/wgengine/magicsock.(*Conn).derpWriteChanOfAddr.func2()
	/Users/bradfitz/src/tailscale.com/wgengine/magicsock/magicsock.go:1421 +0x44 fp=0x1400024dfd0 sp=0x1400024df90 pc=0x1005d5674
runtime.goexit()
	/Users/bradfitz/sdk/go1.18/src/runtime/asm_arm64.s:1259 +0x4 fp=0x1400024dfd0 sp=0x1400024dfd0 pc=0x10022b9a4
created by tailscale.com/wgengine/magicsock.(*Conn).derpWriteChanOfAddr
	/Users/bradfitz/src/tailscale.com/wgengine/magicsock/magicsock.go:1420 +0xc1c

/cc @rolandshoemaker @FiloSottile @ianlancetaylor @josharian

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.Security

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions