[Bug 297424] linuxulator: NETLINK_ROUTE omits IFF_LOWER_UP -> Chromium navigator.onLine false
Date: Mon, 10 Aug 2026 22:13:47 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297424
Bug ID: 297424
Summary: linuxulator: NETLINK_ROUTE omits IFF_LOWER_UP ->
Chromium navigator.onLine false
Product: Base System
Version: 16.0-CURRENT
Hardware: Any
OS: Any
Status: New
Severity: Affects Some People
Priority: ---
Component: kern
Assignee: bugs@FreeBSD.org
Reporter: dteske@FreeBSD.org
Attachment #273601 text/plain
mime type:
Created attachment 273601
--> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=273601&action=edit
Linux NETLINK_ROUTE litmus applying Chromium AddressTrackerLinux online
heuristic (UP|LOWER_UP|RUNNING)
Under the Linuxulator, Chromium-family browsers (AddressTrackerLinux) decide
whether a link is "online" from RTM_NEWLINK ifi_flags using:
!IFF_LOOPBACK && IFF_UP && IFF_LOWER_UP && IFF_RUNNING
FreeBSD's native netlink path sets IFF_LOWER_UP (IFF_NETLINK_1) when the
operstate is UP, but rtnl_if_flags_to_linux() in
sys/compat/linux/linux_netlink.c
did not map that bit to Linux's IFF_LOWER_UP (1<<16). The translated flags
therefore lacked LOWER_UP, online_links stayed empty, ConnectionType became
CONNECTION_NONE, and navigator.onLine was false even though TCP/HTTPS worked.
Symptom in userspace: Linux Chromium under compat (e.g. www/linux-brave) can
show a spurious "Offline" UI (Netflix is a visible example) while browsing and
media playback still succeed. Sites that ignore navigator.onLine (e.g. some
streaming UIs) look fine. This is not Brave-specific; any Linux Chromium
using AddressTrackerLinux under Linuxulator is on the same path. Native
www/chromium uses a different notifier and is not this bug.
Reproducible without a browser -- small Linux NETLINK_ROUTE dump applying the
Chromium heuristic:
Before fix: chromium_online_links=0 / OFFLINE
After mapping IFF_LOWER_UP: chromium_online_links>=1 / ONLINE
Native ifconfig already showed LOWER_UP on the carrier iface; only the
Linuxulator translation dropped it.
Proposed fix (patch forthcoming on Phabricator): map IFF_LOWER_UP ->
LINUX_IFF_LOWER_UP in rtnl_if_flags_to_linux(), and define LINUX_IFF_LOWER_UP
(and LINUX_IFF_DORMANT) next to the existing LINUX_IFF_* constants in
sys/compat/linux/linux.h.
Tested on 16.0-CURRENT (uname -K matched src): litmus ONLINE; linux-brave
Netflix browse with navigator.onLine true and no Offline banner.
--
You are receiving this mail because:
You are the assignee for the bug.