Commit 1b1aecb1 authored by elcore's avatar elcore Committed by GitHub

Merge pull request #989 from tw4452852/tls_race

tls: fix TestStandaloneTLSTicketKeyRotation data race
parents da5b3cfc 3d43c5b6
...@@ -79,19 +79,22 @@ func PrivateKeyBytes(key crypto.PrivateKey) []byte { ...@@ -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) { ...@@ -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 {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment