From 102e004727c29072e43dd2c85db7716bdb8d6878 Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Mon, 13 Jan 2025 19:37:36 +0100 Subject: all: support empty HTTP config We don't really need an HTTP server when running syz-manager during kernel image testing and when running syz-diff automatically. Don't require the config to be set and don't start the HTTP server in this case. --- pkg/manager/http.go | 3 +++ pkg/mgrconfig/load.go | 1 - syz-ci/manager.go | 3 +-- syz-ci/syz-ci.go | 5 +---- syz-manager/manager.go | 8 +++++++- tools/syz-diff/diff.go | 24 +++++++++++++----------- 6 files changed, 25 insertions(+), 19 deletions(-) diff --git a/pkg/manager/http.go b/pkg/manager/http.go index 6d4e2ac40..65f0a5714 100644 --- a/pkg/manager/http.go +++ b/pkg/manager/http.go @@ -68,6 +68,9 @@ type HTTPServer struct { } func (serv *HTTPServer) Serve() { + if serv.Cfg.HTTP == "" { + log.Fatalf("starting a disabled HTTP server") + } if serv.Pool != nil { serv.Pools = map[string]*vm.Dispatcher{"": serv.Pool} } diff --git a/pkg/mgrconfig/load.go b/pkg/mgrconfig/load.go index 602cf4ec8..0624dae00 100644 --- a/pkg/mgrconfig/load.go +++ b/pkg/mgrconfig/load.go @@ -145,7 +145,6 @@ func Complete(cfg *Config) error { cfg.TargetArch, "target", cfg.Workdir, "workdir", cfg.Syzkaller, "syzkaller", - cfg.HTTP, "http", cfg.Type, "type", cfg.SSHUser, "ssh_user", ); err != nil { diff --git a/syz-ci/manager.go b/syz-ci/manager.go index 784527023..547b5d9cc 100644 --- a/syz-ci/manager.go +++ b/syz-ci/manager.go @@ -591,8 +591,7 @@ func (mgr *Manager) createTestConfig(imageDir string, info *BuildInfo) (*mgrconf *mgrcfg = *mgr.managercfg mgrcfg.Name += "-test" mgrcfg.Tag = info.KernelCommit - // Use designated ports not to collide with the ports of other managers. - mgrcfg.HTTP = fmt.Sprintf("localhost:%v", mgr.mgrcfg.testHTTPPort) + mgrcfg.HTTP = "" // Don't start the HTTP server. // For GCE VMs, we need to bind to a real networking interface, so no localhost. mgrcfg.RPC = fmt.Sprintf(":%v", mgr.mgrcfg.testRPCPort) mgrcfg.Workdir = filepath.Join(imageDir, "workdir") diff --git a/syz-ci/syz-ci.go b/syz-ci/syz-ci.go index fdaca59f3..ede3bad17 100644 --- a/syz-ci/syz-ci.go +++ b/syz-ci/syz-ci.go @@ -225,8 +225,7 @@ type ManagerConfig struct { managercfg *mgrconfig.Config // Auto-assigned ports used by test instances. - testHTTPPort int - testRPCPort int + testRPCPort int } type ManagerJobs struct { @@ -461,8 +460,6 @@ func loadManagerConfig(cfg *Config, mgr *ManagerConfig) error { managercfg.RPC = fmt.Sprintf(":%v", cfg.RPCPort) cfg.RPCPort++ } - mgr.testHTTPPort = cfg.ManagerPort - cfg.ManagerPort++ mgr.testRPCPort = cfg.RPCPort cfg.RPCPort++ // Note: we don't change Compiler/Ccache because it may be just "gcc" referring diff --git a/syz-manager/manager.go b/syz-manager/manager.go index 1c86668f1..e093f7732 100644 --- a/syz-manager/manager.go +++ b/syz-manager/manager.go @@ -282,6 +282,7 @@ func RunManager(mode *Mode, cfg *mgrconfig.Config) { mgr.cfg.Procs = 1 } mgr.http = &manager.HTTPServer{ + // Note that if cfg.HTTP == "", we don't start the server. Cfg: cfg, StartTime: time.Now(), CrashStore: mgr.crashStore, @@ -355,7 +356,9 @@ func RunManager(mode *Mode, cfg *mgrconfig.Config) { mgr.http.TogglePause = mgr.pool.TogglePause ctx := vm.ShutdownCtx() - go mgr.http.Serve() + if mgr.cfg.HTTP != "" { + go mgr.http.Serve() + } go mgr.trackUsedFiles() go mgr.processFuzzingResults(ctx) mgr.pool.Loop(ctx) @@ -1437,6 +1440,9 @@ func (mgr *Manager) CoverageFilter(modules []*vminfo.KernelModule) []uint64 { } func publicWebAddr(addr string) string { + if addr == "" { + return "" + } _, port, err := net.SplitHostPort(addr) if err == nil && port != "" { if host, err := os.Hostname(); err == nil { diff --git a/tools/syz-diff/diff.go b/tools/syz-diff/diff.go index 3707867ae..5e971b1be 100644 --- a/tools/syz-diff/diff.go +++ b/tools/syz-diff/diff.go @@ -87,18 +87,19 @@ func main() { new: new, store: store, reproAttempts: map[string]int{}, - http: &manager.HTTPServer{ + } + if newCfg.HTTP != "" { + diffCtx.http = &manager.HTTPServer{ Cfg: newCfg, StartTime: time.Now(), DiffStore: store, - }, - } - diffCtx.http.Pools = map[string]*vm.Dispatcher{ - new.name: new.pool, - base.name: base.pool, + Pools: map[string]*vm.Dispatcher{ + new.name: new.pool, + base.name: base.pool, + }, + } + new.http = diffCtx.http } - new.http = diffCtx.http - diffCtx.Loop(ctx) } @@ -116,7 +117,10 @@ type diffContext struct { func (dc *diffContext) Loop(ctx context.Context) { reproLoop := manager.NewReproLoop(dc, dc.new.pool.Total()-dc.new.cfg.FuzzingVMs, false) - dc.http.ReproLoop = reproLoop + if dc.http != nil { + dc.http.ReproLoop = reproLoop + go dc.http.Serve() + } go func() { // Let both base and patched instances somewhat progress in fuzzing before we take // VMs away for bug reproduction. @@ -128,10 +132,8 @@ func (dc *diffContext) Loop(ctx context.Context) { go dc.base.Loop() go dc.new.Loop() - go dc.http.Serve() runner := &reproRunner{done: make(chan reproRunnerResult, 2), kernel: dc.base} - rareStat := time.NewTicker(5 * time.Minute) for { select { -- cgit mrf-deployment