Skip to content

Commit 0155697

Browse files
matankalinadBransky
authored andcommitted
enable logging in http server + fix race condition between 2 executors goroutines calling MaxSignal() simultaneously from the RPC server's connection loops
1 parent 136d577 commit 0155697

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

syz-verifier/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ func main() {
113113
}
114114
osutil.MkdirAll(workdir)
115115

116+
log.EnableLogCaching(1000, 1<<20)
116117
log.Logf(0, "initialized %d sources", len(sources))
117118

118119
vrf := &Verifier{

syz-verifier/verifier.go

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -689,17 +689,32 @@ func (kernel *Kernel) CoverageFilter(modules []*vminfo.KernelModule) ([]uint64,
689689
}
690690

691691
func (kernel *Kernel) MaxSignal() signal.Signal {
692-
if kernel.phase >= kPhaseLoadedQueue {
693-
kernel.reqMaxSignal <- kernel.id
694-
kernel.setPhaseLocked(kPhaseAwaitingMaxSignal)
695-
sig := <-kernel.maxSignal
696-
kernel.setPhaseLocked(kPhaseLoadedQueue)
697-
return sig
692+
kernel.mu.Lock()
693+
if kernel.phase < kPhaseLoadedQueue {
694+
kernel.mu.Unlock()
695+
return nil
698696
}
699-
return nil
697+
if kernel.phase == kPhaseAwaitingMaxSignal {
698+
// Another goroutine is already requesting max signal
699+
kernel.mu.Unlock()
700+
return nil
701+
}
702+
kernel.phase = kPhaseAwaitingMaxSignal
703+
kernel.mu.Unlock()
704+
705+
kernel.reqMaxSignal <- kernel.id
706+
sig := <-kernel.maxSignal
707+
708+
kernel.mu.Lock()
709+
kernel.phase = kPhaseLoadedQueue
710+
kernel.mu.Unlock()
711+
712+
return sig
700713
}
701714

702715
func (kernel *Kernel) setPhaseLocked(newPhase int) {
716+
kernel.mu.Lock()
717+
defer kernel.mu.Unlock()
703718
if kernel.phase == newPhase {
704719
panic("repeated phase update")
705720
}

0 commit comments

Comments
 (0)