mirror of
https://github.com/caddyserver/caddy.git
synced 2024-12-23 22:27:38 -05:00
tls: fix TestStandaloneTLSTicketKeyRotation data race
================== WARNING: DATA RACE Write at 0x00c42049d300 by goroutine 26: github.com/mholt/caddy/caddytls.standaloneTLSTicketKeyRotation() /home/tw/golib/src/github.com/mholt/caddy/caddytls/crypto.go:230 +0x698 Previous read at 0x00c42049d300 by goroutine 25: github.com/mholt/caddy/caddytls.TestStandaloneTLSTicketKeyRotation() /home/tw/golib/src/github.com/mholt/caddy/caddytls/crypto_test.go:113 +0x413 testing.tRunner() /home/tw/goroot/src/testing/testing.go:610 +0xc9 Goroutine 26 (running) created at: github.com/mholt/caddy/caddytls.TestStandaloneTLSTicketKeyRotation() /home/tw/golib/src/github.com/mholt/caddy/caddytls/crypto_test.go:101 +0x2a4 testing.tRunner() /home/tw/goroot/src/testing/testing.go:610 +0xc9 Goroutine 25 (running) created at: testing.(*T).Run() /home/tw/goroot/src/testing/testing.go:646 +0x52f testing.RunTests.func1() /home/tw/goroot/src/testing/testing.go:793 +0xb9 testing.tRunner() /home/tw/goroot/src/testing/testing.go:610 +0xc9 testing.RunTests() /home/tw/goroot/src/testing/testing.go:799 +0x4b5 testing.(*M).Run() /home/tw/goroot/src/testing/testing.go:743 +0x12f github.com/mholt/caddy/caddytls.TestMain() /home/tw/golib/src/github.com/mholt/caddy/caddytls/setup_test.go:27 +0x133 main.main() github.com/mholt/caddy/caddytls/_test/_testmain.go:116 +0x1b1 ================== ================== WARNING: DATA RACE Write at 0x00c4204aa6c0 by goroutine 26: github.com/mholt/caddy/caddytls.TestStandaloneTLSTicketKeyRotation.func2() /home/tw/golib/src/github.com/mholt/caddy/caddytls/crypto_test.go:93 +0x56 github.com/mholt/caddy/caddytls.standaloneTLSTicketKeyRotation() /home/tw/golib/src/github.com/mholt/caddy/caddytls/crypto.go:233 +0x638 Previous read at 0x00c4204aa6c0 by goroutine 25: github.com/mholt/caddy/caddytls.TestStandaloneTLSTicketKeyRotation() /home/tw/golib/src/github.com/mholt/caddy/caddytls/crypto_test.go:108 +0x391 testing.tRunner() /home/tw/goroot/src/testing/testing.go:610 +0xc9 Goroutine 26 (running) created at: github.com/mholt/caddy/caddytls.TestStandaloneTLSTicketKeyRotation() /home/tw/golib/src/github.com/mholt/caddy/caddytls/crypto_test.go:101 +0x2a4 testing.tRunner() /home/tw/goroot/src/testing/testing.go:610 +0xc9 Goroutine 25 (running) created at: testing.(*T).Run() /home/tw/goroot/src/testing/testing.go:646 +0x52f testing.RunTests.func1() /home/tw/goroot/src/testing/testing.go:793 +0xb9 testing.tRunner() /home/tw/goroot/src/testing/testing.go:610 +0xc9 testing.RunTests() /home/tw/goroot/src/testing/testing.go:799 +0x4b5 testing.(*M).Run() /home/tw/goroot/src/testing/testing.go:743 +0x12f github.com/mholt/caddy/caddytls.TestMain() /home/tw/golib/src/github.com/mholt/caddy/caddytls/setup_test.go:27 +0x133 main.main() github.com/mholt/caddy/caddytls/_test/_testmain.go:116 +0x1b1 ================== Signed-off-by: Tw <tw19881113@gmail.com>
This commit is contained in:
parent
da5b3cfc50
commit
3d43c5b697
1 changed files with 12 additions and 9 deletions
|
@ -79,19 +79,22 @@ func PrivateKeyBytes(key crypto.PrivateKey) []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStandaloneTLSTicketKeyRotation(t *testing.T) {
|
func TestStandaloneTLSTicketKeyRotation(t *testing.T) {
|
||||||
|
type syncPkt struct {
|
||||||
|
ticketKey [32]byte
|
||||||
|
keysInUse int
|
||||||
|
}
|
||||||
|
|
||||||
tlsGovChan := make(chan struct{})
|
tlsGovChan := make(chan struct{})
|
||||||
defer close(tlsGovChan)
|
defer close(tlsGovChan)
|
||||||
callSync := make(chan bool, 1)
|
callSync := make(chan *syncPkt, 1)
|
||||||
defer close(callSync)
|
defer close(callSync)
|
||||||
|
|
||||||
oldHook := setSessionTicketKeysTestHook
|
oldHook := setSessionTicketKeysTestHook
|
||||||
defer func() {
|
defer func() {
|
||||||
setSessionTicketKeysTestHook = oldHook
|
setSessionTicketKeysTestHook = oldHook
|
||||||
}()
|
}()
|
||||||
var keysInUse [][32]byte
|
|
||||||
setSessionTicketKeysTestHook = func(keys [][32]byte) [][32]byte {
|
setSessionTicketKeysTestHook = func(keys [][32]byte) [][32]byte {
|
||||||
keysInUse = keys
|
callSync <- &syncPkt{keys[0], len(keys)}
|
||||||
callSync <- true
|
|
||||||
return keys
|
return keys
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,17 +107,17 @@ func TestStandaloneTLSTicketKeyRotation(t *testing.T) {
|
||||||
var lastTicketKey [32]byte
|
var lastTicketKey [32]byte
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-callSync:
|
case pkt := <-callSync:
|
||||||
if lastTicketKey == keysInUse[0] {
|
if lastTicketKey == pkt.ticketKey {
|
||||||
close(tlsGovChan)
|
close(tlsGovChan)
|
||||||
t.Errorf("The same TLS ticket key has been used again (not rotated): %x.", lastTicketKey)
|
t.Errorf("The same TLS ticket key has been used again (not rotated): %x.", lastTicketKey)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
lastTicketKey = keysInUse[0]
|
lastTicketKey = pkt.ticketKey
|
||||||
rounds++
|
rounds++
|
||||||
if rounds <= NumTickets && len(keysInUse) != rounds {
|
if rounds <= NumTickets && pkt.keysInUse != rounds {
|
||||||
close(tlsGovChan)
|
close(tlsGovChan)
|
||||||
t.Errorf("Expected TLS ticket keys in use: %d; Got instead: %d.", rounds, len(keysInUse))
|
t.Errorf("Expected TLS ticket keys in use: %d; Got instead: %d.", rounds, pkt.keysInUse)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if c.SessionTicketsDisabled == true {
|
if c.SessionTicketsDisabled == true {
|
||||||
|
|
Loading…
Reference in a new issue