[Bug 297424] linuxulator: NETLINK_ROUTE omits IFF_LOWER_UP -> Chromium navigator.onLine false

From: <bugzilla-noreply_at_freebsd.org>
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.