Skip to content

Commit 76dc5bc

Browse files
committed
vm/qemu: additional check for crashes only in Diagnose
vm/qemu: additional check for crashes only in Diagnose vm/qemu: additional check for crashes only in Diagnose
1 parent ef766cd commit 76dc5bc

File tree

1 file changed

+54
-2
lines changed

1 file changed

+54
-2
lines changed

vm/qemu/qemu.go

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/google/syzkaller/pkg/log"
2424
"github.com/google/syzkaller/pkg/osutil"
2525
"github.com/google/syzkaller/pkg/report"
26+
"github.com/google/syzkaller/pkg/report/crash"
2627
"github.com/google/syzkaller/sys/targets"
2728
"github.com/google/syzkaller/vm/vmimpl"
2829
)
@@ -734,8 +735,11 @@ func (inst *instance) Diagnose(rep *report.Report) ([]byte, bool) {
734735
return output, wait
735736
}
736737
}
737-
// TODO: we don't need registers on all reports. Probably only relevant for "crashes"
738-
// (NULL derefs, paging faults, etc), but is not useful for WARNING/BUG/HANG (?).
738+
739+
if !needsRegisterInfo(rep) {
740+
return nil, false
741+
}
742+
739743
ret := []byte(fmt.Sprintf("%s Registers:\n", time.Now().Format("15:04:05 ")))
740744
for cpu := 0; cpu < inst.cfg.CPU; cpu++ {
741745
regs, err := inst.hmp("info registers", cpu)
@@ -750,6 +754,54 @@ func (inst *instance) Diagnose(rep *report.Report) ([]byte, bool) {
750754
return ret, false
751755
}
752756

757+
func needsRegisterInfo(rep *report.Report) bool {
758+
switch rep.Type {
759+
case crash.NullPtrDerefBUG,
760+
crash.KASANNullPtrDerefRead,
761+
crash.KASANNullPtrDerefWrite,
762+
crash.KFENCEMemoryCorruption:
763+
return true
764+
case crash.KASANRead,
765+
crash.KASANWrite,
766+
crash.KASANUseAfterFreeRead,
767+
crash.KASANUseAfterFreeWrite,
768+
crash.KFENCERead,
769+
crash.KFENCEWrite,
770+
crash.KFENCEUseAfterFreeRead,
771+
crash.KFENCEUseAfterFreeWrite:
772+
return true
773+
case crash.KASANInvalidFree,
774+
crash.KFENCEInvalidFree:
775+
return true
776+
case crash.MemorySafetyBUG,
777+
crash.MemorySafetyUBSAN:
778+
return true
779+
case crash.Bug:
780+
return true
781+
case crash.Warning,
782+
crash.AtomicSleep,
783+
crash.Hang,
784+
crash.DoS,
785+
crash.KCSANAssert,
786+
crash.KCSANDataRace,
787+
crash.KCSANUnknown,
788+
crash.KMSANInfoLeak,
789+
crash.KMSANUninitValue,
790+
crash.KMSANUnknown,
791+
crash.KMSANUseAfterFreeRead,
792+
crash.LockdepBug,
793+
crash.MemoryLeak,
794+
crash.RefcountWARNING,
795+
crash.UBSAN,
796+
crash.LostConnection,
797+
crash.SyzFailure,
798+
crash.UnexpectedReboot:
799+
return false
800+
default:
801+
return true
802+
}
803+
}
804+
753805
func (inst *instance) ssh(args ...string) ([]byte, error) {
754806
return osutil.RunCmd(time.Minute*inst.timeouts.Scale, "", "ssh", inst.sshArgs(args...)...)
755807
}

0 commit comments

Comments
 (0)