aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-01-03 18:41:44 +0100
committerAleksandr Nogikh <nogikh@google.com>2024-01-10 12:06:51 +0000
commitb8b0c9f7d8f02415beab09246ddf66b021dfdc06 (patch)
treee0d52eaa420ab82c4300f34eede999a9415cfbdc
parent22263b07f5df14a974bcb00d286ab178891c0891 (diff)
syz-fuzzer: export pprof endpoints
This will let us have a better understanding of what's going on inside a fuzzed VM.
-rw-r--r--syz-fuzzer/fuzzer.go11
-rw-r--r--vm/vmimpl/vmimpl.go3
2 files changed, 14 insertions, 0 deletions
diff --git a/syz-fuzzer/fuzzer.go b/syz-fuzzer/fuzzer.go
index f0b6d9c23..99d04f57f 100644
--- a/syz-fuzzer/fuzzer.go
+++ b/syz-fuzzer/fuzzer.go
@@ -7,6 +7,8 @@ import (
"flag"
"fmt"
"math/rand"
+ "net/http"
+ _ "net/http/pprof"
"os"
"runtime"
"runtime/debug"
@@ -28,6 +30,7 @@ import (
"github.com/google/syzkaller/prog"
_ "github.com/google/syzkaller/sys"
"github.com/google/syzkaller/sys/targets"
+ "github.com/google/syzkaller/vm/vmimpl"
)
type Fuzzer struct {
@@ -194,6 +197,14 @@ func main() {
os.Exit(1)
}()
+ // Necessary for pprof handlers.
+ go func() {
+ err := http.ListenAndServe(fmt.Sprintf("0.0.0.0:%v", vmimpl.PprofPort), nil)
+ if err != nil {
+ log.SyzFatalf("failed to setup a server: %v", err)
+ }
+ }()
+
checkArgs := &checkArgs{
target: target,
sandbox: sandbox,
diff --git a/vm/vmimpl/vmimpl.go b/vm/vmimpl/vmimpl.go
index 0a4ada028..8b63ca77e 100644
--- a/vm/vmimpl/vmimpl.go
+++ b/vm/vmimpl/vmimpl.go
@@ -186,6 +186,9 @@ func Multiplex(cmd *exec.Cmd, merger *OutputMerger, console io.Closer, timeout t
return merger.Output, errc, nil
}
+// On VMs, pprof will be listening to this port.
+const PprofPort = 6060
+
func RandomPort() int {
n, err := rand.Int(rand.Reader, big.NewInt(64<<10-1<<10))
if err != nil {