CVE-2026-74726: bonding: alb: re-check primary_is_promisc under RTNL in bond_alb_monitor
In the Linux kernel, the following vulnerability has been resolved:
bonding: alb: re-check primaryispromisc under RTNL in bondalbmonitor
bondalbmonitor() reads primaryispromisc under RCU, then drops RCU and takes RTNL via rtnltrylock() before undoing the promiscuity it set on the active slave. In that window the active slave can change under RTNL (RTMDELLINK -> bondreleaseone() -> bondalbhandleactivechange()), which already drops the promiscuity and clears primaryispromisc. The monitor still acts on the stale decision: if the slave was removed with no failover, curractiveslave is now NULL and the deref faults; if it failed over, the stale devsetpromiscuity(-1) underflows the new slave's promiscuity counter and pins it in IFFPROMISC.
Oops: general protection fault, probably for non-canonical address ... KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007] Workqueue: b42 bondalbmonitor RIP: 0010:bondalbmonitor (drivers/net/bonding/bondalb.c:1600) processonework (kernel/workqueue.c:3322) workerthread (kernel/workqueue.c:3486) kthread (kernel/kthread.c:436) retfromfork (arch/x86/kernel/process.c:158) Kernel panic - not syncing: Fatal exception
Re-check primaryispromisc (and curractiveslave) after taking RTNL so the monitor only undoes an increment it still owns. The other bonding monitors already re-read state under RTNL in their commit phase (bondmiimoncommit/bondabarpcommit); bondalbmonitor() was the only one acting on the pre-trylock decision.
Affected Software
Event History
Frequently Asked Questions
Which systems are exposed to this race condition?
Systems using Linux kernel bonding in active load balancing (ALB) mode are exposed when the active slave can be removed or changed while bond_alb_monitor() is running. The issue concerns changes made under RTNL, including RTM_DELLINK-driven slave removal.
What conditions trigger the failure?
The race requires bond_alb_monitor() to decide that it must remove promiscuous mode from the active slave, then lose RCU protection before obtaining RTNL. During that interval, the active slave must be removed or changed, causing the monitor to act on stale state.
What is the practical impact if the race occurs?
If the active slave is removed without failover, the monitor can dereference a NULL curr_active_slave and crash the kernel. If failover occurs, it can decrement the replacement slave's promiscuity counter incorrectly, leaving that interface stuck in promiscuous mode.
How can administrators recognize that the system has already hit this issue?
Affected systems may log a KASAN null-pointer dereference or general protection fault in bond_alb_monitor(), potentially followed by a kernel panic. Another indication is a replacement active slave remaining in IFF_PROMISC after a failover or slave removal.