From e32a06465903d8e300b8e2cbf260c3e1b887d313 Mon Sep 17 00:00:00 2001 From: Aaron Klotz Date: Wed, 3 Jan 2024 12:45:49 -0700 Subject: [PATCH] cmd/tailscaled: don't create a network monitor in the parent tailscaled on Windows The service is only used as a watchdog and for piping logs from the child process. We shouldn't be creating a network monitor in that case. Fixes #10732 Signed-off-by: Aaron Klotz --- cmd/tailscaled/tailscaled.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/cmd/tailscaled/tailscaled.go b/cmd/tailscaled/tailscaled.go index 750a7ee1b..390c6f39e 100644 --- a/cmd/tailscaled/tailscaled.go +++ b/cmd/tailscaled/tailscaled.go @@ -324,7 +324,7 @@ func ipnServerOpts() (o serverOptions) { var logPol *logpolicy.Policy var debugMux *http.ServeMux -func run() error { +func run() (err error) { var logf logger.Logf = log.Printf sys := new(tsd.System) @@ -332,7 +332,6 @@ func run() error { // Parse config, if specified, to fail early if it's invalid. var conf *conffile.Config if args.confFile != "" { - var err error conf, err = conffile.Load(args.confFile) if err != nil { return fmt.Errorf("error reading config file: %w", err) @@ -340,13 +339,17 @@ func run() error { sys.InitialConfig = conf } - netMon, err := netmon.New(func(format string, args ...any) { - logf(format, args...) - }) - if err != nil { - return fmt.Errorf("netmon.New: %w", err) + var netMon *netmon.Monitor + isWinSvc := isWindowsService() + if !isWinSvc { + netMon, err = netmon.New(func(format string, args ...any) { + logf(format, args...) + }) + if err != nil { + return fmt.Errorf("netmon.New: %w", err) + } + sys.Set(netMon) } - sys.Set(netMon) pol := logpolicy.New(logtail.CollectionNode, netMon, nil /* use log.Printf */) pol.SetVerbosityLevel(args.verbose) @@ -362,7 +365,7 @@ func run() error { log.Printf("Error reading environment config: %v", err) } - if isWindowsService() { + if isWinSvc { // Run the IPN server from the Windows service manager. log.Printf("Running service...") if err := runWindowsService(pol); err != nil {