net: Remove RTNL dance for SIOCBRADDIF and SIOCBRDELIF.
Key facts
- Attack vector
- Local
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- Low
- Impact type
- —
- Confidentiality · integrity · availability
- None · None · High
- Fix status
- Partial Red Hat: 10 fixed, 1 without a fix
Attack profile from CVSS 3.1 · NVD. Fix status from CNA and Red Hat.
Summary
In the Linux kernel, the following vulnerability has been resolved: net: Remove RTNL dance for SIOCBRADDIF and SIOCBRDELIF. SIOCBRDELIF is passed to dev_ioctl() first and later forwarded to br_ioctl_call(), which causes unnecessary RTNL dance and the splat below [0] under RTNL pressure. Let's say Thread A is trying to detach a device from a bridge and Thread B is trying to remove the bridge. In dev_ioctl(), Thread A bumps the bridge device's refcnt by netdev_hold() and releases RTNL because the following br_ioctl_call() also re-acquires RTNL. In the race window, Thread B could acquire RTNL and try to remove the bridge device. Then, rtnl_unlock() by Thread B will release RTNL and wait for netdev_put() by Thread A. Thread A, however, must hold RTNL after the unlock in dev_ifsioc(), which may take long under RTNL pressure, resulting in the splat by Thread B. Thread A (SIOCBRDELIF) Thread B (SIOCBRDELBR) ---------------------- ---------------------- sock_ioctl sock_ioctl `- sock_do_ioctl `- br_ioctl_call `- dev_ioctl `- br_ioctl_stub |- rtnl_lock | |- dev_ifsioc ' ' |- dev = __dev_get_by_name(...) |- netdev_hold(dev, ...) . / |- rtnl_unlock ------. | | |- br_ioctl_call `---> |- rtnl_lock Race | | `- br_ioctl_stub |- br_del_bridge Window | | | |- dev = __dev_get_by_name(...) | | | May take long | `- br_dev_delete(dev, ...) | | | under RTNL pressure | `- unregister_netdevice_queue(dev, ...) | | | | `- rtnl_unlock \ | |- rtnl_lock <-' `- netdev_run_todo | |- ... `- netdev_run_todo | `- rtnl_unlock |- __rtnl_unlock | |- netdev_wait_allrefs_any |- netdev_put(dev, ...) <----------------' Wait refcnt decrement and log splat below To avoid blocking SIOCBRDELBR unnecessarily, let's not call dev_ioctl() for SIOCBRADDIF and SIOCBRDELIF. In the dev_ioctl() path, we do the following: 1. Copy struct ifreq by get_user_ifreq in sock_do_ioctl() 2. Check CAP_NET_ADMIN in dev_ioctl() 3. Call dev_load() in dev_ioctl() 4. Fetch the master dev from ifr.ifr_name in dev_ifsioc() 3. can be done by request_module() in br_ioctl_call(), so we move 1., 2., and 4. to br_ioctl_stub(). Note that 2. is also checked later in add_del_if(), but it's better performed before RTNL. SIOCBRADDIF and SIOCBRDELIF have been processed in dev_ioctl() since the pre-git era, and there seems to be no specific reason to process them there. [0]: unregister_netdevice: waiting for wpan3 to become free. Usage count = 2 ref_tracker: wpan3@ffff8880662d8608 has 1/1 users at __netdev_tracker_alloc include/linux/netdevice.h:4282 [inline] netdev_hold include/linux/netdevice.h:4311 [inline] dev_ifsioc+0xc6a/0x1160 net/core/dev_ioctl.c:624 dev_ioctl+0x255/0x10c0 net/core/dev_ioctl.c:826 sock_do_ioctl+0x1ca/0x260 net/socket.c:1213 sock_ioctl+0x23a/0x6c0 net/socket.c:1318 vfs_ioctl fs/ioctl.c:51 [inline] __do_sys_ioctl fs/ioctl.c:906 [inline] __se_sys_ioctl fs/ioctl.c:892 [inline] __x64_sys_ioctl+0x1a4/0x210 fs/ioctl.c:892 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0xcb/0x250 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x77/0x7f
Why it matters now
SSVC decision points
Not available: CISA has not published SSVC decision points for this record.
Affected products
Remediation
- Fix · CNA Linux (Linux) Fixed in 5.15.198, 6.1.160, 6.6.120, 6.12.65, 6.14.2, 6.15
Red Hat 2 advisories
- RHSA-2025:20518 Released 2025-11-11 · Red Hat rating Moderatekernel security update
- Red Hat Enterprise Linux AppStream (v. 9) kernel-64k-debug-devel-5.14.0-611.5.1.el9_7, kernel-64k-debug-devel-matched-5.14.0-611.5.1.el9_7, kernel-64k-devel-5.14.0-611.5.1.el9_7 +12
- Red Hat Enterprise Linux BaseOS (v. 9) kernel-5.14.0-611.5.1.el9_7, kernel-64k-5.14.0-611.5.1.el9_7, kernel-64k-core-5.14.0-611.5.1.el9_7 +28
- Red Hat Enterprise Linux CodeReady Linux Builder (v. 9) kernel-tools-libs-devel-5.14.0-611.5.1.el9_7, libperf-5.14.0-611.5.1.el9_7
- Red Hat Enterprise Linux Real Time (v. 9) kernel-rt-5.14.0-611.5.1.el9_7, kernel-rt-64k-5.14.0-611.5.1.el9_7, kernel-rt-64k-core-5.14.0-611.5.1.el9_7 +21
- Red Hat Enterprise Linux Real Time for NFV (v. 9) kernel-rt-5.14.0-611.5.1.el9_7, kernel-rt-core-5.14.0-611.5.1.el9_7, kernel-rt-debug-5.14.0-611.5.1.el9_7 +9
- RHSA-2025:20095 Released 2025-11-11 · Red Hat rating Moderatekernel security update
- Red Hat Enterprise Linux AppStream (v. 10) kernel-64k-debug-devel-6.12.0-124.8.1.el10_1, kernel-64k-debug-devel-matched-6.12.0-124.8.1.el10_1, kernel-64k-devel-6.12.0-124.8.1.el10_1 +12
- Red Hat Enterprise Linux BaseOS (v. 10) kernel-6.12.0-124.8.1.el10_1, kernel-64k-6.12.0-124.8.1.el10_1, kernel-64k-core-6.12.0-124.8.1.el10_1 +29
- Red Hat Enterprise Linux CodeReady Linux Builder (v. 10) kernel-tools-libs-devel-6.12.0-124.8.1.el10_1, libperf-6.12.0-124.8.1.el10_1
- Red Hat Enterprise Linux Real Time (v. 10) kernel-rt-6.12.0-124.8.1.el10_1, kernel-rt-64k-6.12.0-124.8.1.el10_1, kernel-rt-64k-core-6.12.0-124.8.1.el10_1 +21
- Red Hat Enterprise Linux Real Time for NFV (v. 10) kernel-rt-6.12.0-124.8.1.el10_1, kernel-rt-core-6.12.0-124.8.1.el10_1, kernel-rt-debug-6.12.0-124.8.1.el10_1 +9
Vendor assessments
Red Hat
Red Hat rating: Low. Red Hat's page for this CVE →
| Product | Status | Plan or fix |
|---|---|---|
| Red Hat Enterprise Linux 9 | Affected | No fix yet: Fix deferred |
| Red Hat Enterprise Linux AppStream (v. 10) | Fixed | RHSA-2025:20095 |
| Red Hat Enterprise Linux AppStream (v. 9) | Fixed | RHSA-2025:20518 |
| Red Hat Enterprise Linux BaseOS (v. 10) | Fixed | RHSA-2025:20095 |
| Red Hat Enterprise Linux BaseOS (v. 9) | Fixed | RHSA-2025:20518 |
| Red Hat Enterprise Linux CodeReady Linux Builder (v. 10) | Fixed | RHSA-2025:20095 |
| Red Hat Enterprise Linux CodeReady Linux Builder (v. 9) | Fixed | RHSA-2025:20518 |
| Red Hat Enterprise Linux Real Time (v. 10) | Fixed | RHSA-2025:20095 |
| Red Hat Enterprise Linux Real Time (v. 9) | Fixed | RHSA-2025:20518 |
| Red Hat Enterprise Linux Real Time for NFV (v. 10) | Fixed | RHSA-2025:20095 |
| Red Hat Enterprise Linux Real Time for NFV (v. 9) | Fixed | RHSA-2025:20518 |
Not affected: 3 products
- Red Hat Enterprise Linux 6
- Red Hat Enterprise Linux 7
- Red Hat Enterprise Linux 8
Timeline
- 2026-10-02 Threatist record created from CVE-2025-22111
- 2026-10-03 Alias added: GHSA-jch8-hv9x-vvc6
References
Patch 2
More Linux Kernel vulnerabilities
- TI-2025-26358 tls: fix handling of zero-length records on the rx_list KEVCVSS 3.1CRITICAL 9.8
- TI-2026-38352 netfilter: bridge: make ebt_snat ARP rewrite writable KEVCVSS 3.1HIGH 8.8
- TI-2013-05264 The (1) get_user and (2) put_user API functions in the Linux kernel before 3.5.5 on the… KEVCVSS 3.1HIGH 8.8
- TI-2022-00125 Integer overflow in kernel KEVCVSS 3.1HIGH 8.4
- TI-2013-01864 The perf_swevent_init function in kernel/events/core.c in the Linux kernel before 3.8.9… KEVCVSS 3.1HIGH 8.4
- TI-2021-05514 Heap Out-Of-Bounds Write in Netfilter IP6T_SO_SET_REPLACE KEVCVSS 3.1HIGH 8.3
Sources
- CVE-2025-22111 · CVE Program
- CVE-2025-22111 · NVD
- FIRST EPSS
- GHSA-jch8-hv9x-vvc6 · GitHub Advisory Database · CC BY 4.0
- CVE-2025-22111 · Red Hat security data · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences