@@ -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+
753805func (inst * instance ) ssh (args ... string ) ([]byte , error ) {
754806 return osutil .RunCmd (time .Minute * inst .timeouts .Scale , "" , "ssh" , inst .sshArgs (args ... )... )
755807}
0 commit comments