cmd/tailscaled, version/distro: default to userspace-networking on Crostini

cros-garcon NULL-derefs on cold-boot netlink enumeration when
tailscale0 is present, preventing the Crostini container and
ChromeOS Terminal from starting cleanly. This is an upstream
ChromiumOS bug in cros-garcon; tailscaled can work around it
by defaulting to userspace-networking mode on Crostini.

Tailscale SSH continues to work via tailscaled's netstack.
Users can override with --tun=tailscale0 on ChromeOS builds
where cros-garcon is fixed.

Crostini is detected via /opt/google/cros-containers/bin/garcon,
which is present in every Crostini penguin container.

ssh/tailssh extends the existing Debian default-PATH case to
cover Crostini, since Crostini is Debian-based and benefits
from the same SSH PATH defaults.

RELNOTE: Crostini now defaults to userspace-networking.

Fixes #19488
Updates #12090

Signed-off-by: ferrumclaudepilgrim <ferrumclaudepilgrim@users.noreply.github.com>
This commit is contained in:
ferrumclaudepilgrim
2026-06-01 17:40:07 -07:00
committed by Brad Fitzpatrick
parent a6ab7efa4f
commit 3f70abdc6f
3 changed files with 17 additions and 1 deletions
+10
View File
@@ -87,6 +87,16 @@ func defaultTunName() string {
// See https://github.com/tailscale/tailscale-synology/issues/35
return "tailscale0,userspace-networking"
}
if buildfeatures.HasNetstack && distro.Get() == distro.Crostini {
// cros-garcon NULL-derefs on cold-boot netlink interface
// enumeration when tailscale0 is present, preventing the
// Crostini container and ChromeOS Terminal from starting
// cleanly. Default to userspace-networking until the
// upstream ChromiumOS bug is fixed.
// See https://github.com/tailscale/tailscale/issues/12090
// See https://issuetracker.google.com/issues/517069318
return "userspace-networking"
}
}
return "tailscale0"
}