Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 Jan 2026 02:25:08 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 292493] [lagg] Protocol replacement synchronization failure leading to Panic
Message-ID:  <bug-292493-227@https.bugs.freebsd.org/bugzilla/>

index | next in thread | raw e-mail

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=292493

            Bug ID: 292493
           Summary: [lagg] Protocol replacement synchronization failure
                    leading to Panic
           Product: Base System
           Version: 14.3-STABLE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: kern
          Assignee: bugs@FreeBSD.org
          Reporter: hanguidong02@gmail.com

I am opening this new report to draw attention to a synchronization flaw in the
Link Aggregation (lagg) subsystem. While this issue was briefly touched upon in
Bug 289017 (https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=289017) via code
analysis, I have since developed a reliable reproduction suite that
demonstrates the scope and severity of this vulnerability far exceeds the
initial findings.

The core issue is a complete lack of synchronization between the control path
(SIOCSLAGG ioctl) and the data path (lagg_transmit). When switching protocols
(e.g., from FAILOVER to LACP), the kernel detaches the old protocol and sets
the state to LAGG_PROTO_NONE before attaching the new one. This transition is
not atomic relative to the transmit path.

Using a custom multi-threaded PoC (attached below as setup_and_trigger.sh and
poc.c), I can reliably crash an unmodified GENERIC kernel (FreeBSD 14.3) within
seconds.

My dynamic analysis reveals that the race condition manifests in multiple ways
depending on the exact timing.

I have attached the following reproduction files:
1. setup_and_trigger.sh: Sets up the environment and rapidly toggles lagg
protocols.
2. poc.c: A multi-threaded packet sprayer designed to hit the race window.

Steps to reproduce:
1. Compile the PoC: clang -O2 -pthread -o poc poc.c
2. Run ./setup_and_trigger.sh in one terminal.
3. Run ./poc in another terminal.
4. The system will panic within seconds.

I have verified this crash on FreeBSD 14.3 using QEMU. Code analysis indicates
the vulnerable logic also exists in FreeBSD 15.0 and earlier versions. I am
currently occupied but plan to test other versions next weekend; however, I
expect the attached scripts to work across these versions without modification.

Reason for new report: This report includes new findings. The original ticket
has seen no developer activity for several months. Updates were posted in
December, but have received no response for over a month.

-- 
You are receiving this mail because:
You are the assignee for the bug.

home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-292493-227>