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

[email protected]
Newsgroups gmane.os.freebsd.bugs
Message-ID <[email protected]/bugzilla/>
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: [email protected]
          Reporter: [email protected]
 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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.