aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-01-12 17:52:50 +0100
committerAleksandr Nogikh <nogikh@google.com>2024-01-23 11:48:01 +0000
commit74d5594c03d2f8445816b9980cd98f67e761d531 (patch)
treea699cd8672d42bfc0c551d7588a34d1b5cab425c
parentbf3b32eb43d4b6b620b3c2b9f2f54aeadc8f17f6 (diff)
syz-fuzzer: add a logging RPC call
Add an RPC call to post a log message to syz-manager directly from syz-fuzzer. It's very convenient during the debugging and profiling of the actual fuzzing code.
-rw-r--r--pkg/rpctype/rpctype.go6
-rw-r--r--syz-fuzzer/fuzzer.go15
-rw-r--r--syz-manager/rpc.go5
3 files changed, 26 insertions, 0 deletions
diff --git a/pkg/rpctype/rpctype.go b/pkg/rpctype/rpctype.go
index fc582e576..3b1244662 100644
--- a/pkg/rpctype/rpctype.go
+++ b/pkg/rpctype/rpctype.go
@@ -200,3 +200,9 @@ type RunTestDoneArgs struct {
Info []*ipc.ProgInfo
Error string
}
+
+type LogMessageReq struct {
+ Level int
+ Name string
+ Message string
+}
diff --git a/syz-fuzzer/fuzzer.go b/syz-fuzzer/fuzzer.go
index ed22edde2..b3465748d 100644
--- a/syz-fuzzer/fuzzer.go
+++ b/syz-fuzzer/fuzzer.go
@@ -625,6 +625,21 @@ func (fuzzer *Fuzzer) checkNewCallSignal(p *prog.Prog, info *ipc.CallInfo, call
return true
}
+// nolint: unused
+// It's only needed for debugging.
+func (fuzzer *Fuzzer) Logf(level int, msg string, args ...interface{}) {
+ go func() {
+ a := &rpctype.LogMessageReq{
+ Level: level,
+ Name: fuzzer.name,
+ Message: fmt.Sprintf(msg, args...),
+ }
+ if err := fuzzer.manager.Call("Manager.LogMessage", a, nil); err != nil {
+ log.SyzFatalf("Manager.LogMessage call failed: %v", err)
+ }
+ }()
+}
+
func setupPprofHandler(port int) {
// Necessary for pprof handlers.
go func() {
diff --git a/syz-manager/rpc.go b/syz-manager/rpc.go
index 3e946d4e9..de1fd1d43 100644
--- a/syz-manager/rpc.go
+++ b/syz-manager/rpc.go
@@ -396,3 +396,8 @@ func (serv *RPCServer) shutdownInstance(name string) []byte {
delete(serv.fuzzers, name)
return fuzzer.machineInfo
}
+
+func (serv *RPCServer) LogMessage(m *rpctype.LogMessageReq, r *int) error {
+ log.Logf(m.Level, "%s: %s", m.Name, m.Message)
+ return nil
+}