diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-01-12 17:52:50 +0100 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2024-01-23 11:48:01 +0000 |
| commit | 74d5594c03d2f8445816b9980cd98f67e761d531 (patch) | |
| tree | a699cd8672d42bfc0c551d7588a34d1b5cab425c | |
| parent | bf3b32eb43d4b6b620b3c2b9f2f54aeadc8f17f6 (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.go | 6 | ||||
| -rw-r--r-- | syz-fuzzer/fuzzer.go | 15 | ||||
| -rw-r--r-- | syz-manager/rpc.go | 5 |
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 +} |
