CVE-2026-46287
Description
Linux kernel txgbe driver has an RTNL assertion warning during module removal for copper NICs with external PHYs.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Linux kernel txgbe driver has an RTNL assertion warning during module removal for copper NICs with external PHYs.
Vulnerability
The Linux kernel's txgbe driver, specifically for copper NICs with external PHYs, experiences an RTNL assertion warning when the module is removed. This occurs because phylink_disconnect_phy() is called during the module's remove function without proper locking, leading to an assertion failure in drivers/net/phy/phylink.c [1]. The affected versions are not explicitly stated but the fix is present in the provided reference.
Exploitation
An attacker would need to trigger the removal of the txgbe kernel module. This typically requires elevated privileges on the system, such as root access, to execute the rmmod command. The vulnerability is triggered during the module's unload sequence when interacting with external PHY hardware.
Impact
The primary impact of this vulnerability is an RTNL assertion warning, which indicates a potential race condition or improper locking within the kernel's network subsystem. While not leading to code execution or data corruption, it can cause system instability, kernel panics, or denial of service due to the assertion failure during module removal.
Mitigation
The vulnerability is resolved by adding rtnl_lock() and rtnl_unlock() around the phylink_disconnect_phy() call within the txgbe driver's remove function. This ensures proper synchronization and prevents the assertion warning. The fix is available in the Linux kernel source code [1]. No workaround is described, and the vulnerability is not listed as part of the KEV catalog.
AI Insight generated on Jun 8, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected products
2Patches
10d29cafc7e4eenet: txgbe: fix RTNL assertion warning when remove module
1 file changed · +2 −1
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c+2 −1 modifieddiff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c index 03f1b9bc604d5..9b6f5cd3fdd7d 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c @@ -659,7 +659,9 @@ void txgbe_remove_phy(struct txgbe *txgbe) return; case wx_mac_sp: if (txgbe->wx->media_type == wx_media_copper) { + rtnl_lock(); phylink_disconnect_phy(txgbe->wx->phylink); + rtnl_unlock(); phylink_destroy(txgbe->wx->phylink); return; } -- cgit 1.3-korg
6c5ec52c68a6net: txgbe: fix RTNL assertion warning when remove module
1 file changed · +2 −1
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c+2 −1 modifieddiff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c index 8ea7aa07ae4e9..dc9f243146580 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c @@ -657,7 +657,9 @@ void txgbe_remove_phy(struct txgbe *txgbe) return; case wx_mac_sp: if (txgbe->wx->media_type == wx_media_copper) { + rtnl_lock(); phylink_disconnect_phy(txgbe->wx->phylink); + rtnl_unlock(); phylink_destroy(txgbe->wx->phylink); return; } -- cgit 1.3-korg
e159f05e12ccnet: txgbe: fix RTNL assertion warning when remove module
1 file changed · +2 −1
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c+2 −1 modifieddiff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c index 8ea7aa07ae4e9..dc9f243146580 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c @@ -657,7 +657,9 @@ void txgbe_remove_phy(struct txgbe *txgbe) return; case wx_mac_sp: if (txgbe->wx->media_type == wx_media_copper) { + rtnl_lock(); phylink_disconnect_phy(txgbe->wx->phylink); + rtnl_unlock(); phylink_destroy(txgbe->wx->phylink); return; } -- cgit 1.3-korg
3e223a7fd41cnet: txgbe: fix RTNL assertion warning when remove module
1 file changed · +2 −1
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c+2 −1 modifieddiff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c index f26946198a2fb..9726622a96bfb 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c @@ -622,7 +622,9 @@ err_unregister_swnode: void txgbe_remove_phy(struct txgbe *txgbe) { if (txgbe->wx->media_type == sp_media_copper) { + rtnl_lock(); phylink_disconnect_phy(txgbe->wx->phylink); + rtnl_unlock(); phylink_destroy(txgbe->wx->phylink); return; } -- cgit 1.3-korg
0305e7118451net: txgbe: fix RTNL assertion warning when remove module
1 file changed · +2 −1
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c+2 −1 modifieddiff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c index 4159c84035fdc..2494a3a171fdc 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c @@ -820,7 +820,9 @@ err_unregister_swnode: void txgbe_remove_phy(struct txgbe *txgbe) { if (txgbe->wx->media_type == sp_media_copper) { + rtnl_lock(); phylink_disconnect_phy(txgbe->phylink); + rtnl_unlock(); phylink_destroy(txgbe->phylink); return; } -- cgit 1.3-korg
3e223a7fd41cnet: txgbe: fix RTNL assertion warning when remove module
1 file changed · +2 −1
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c+2 −1 modifieddiff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c index f26946198a2fb..9726622a96bfb 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c @@ -622,7 +622,9 @@ err_unregister_swnode: void txgbe_remove_phy(struct txgbe *txgbe) { if (txgbe->wx->media_type == sp_media_copper) { + rtnl_lock(); phylink_disconnect_phy(txgbe->wx->phylink); + rtnl_unlock(); phylink_destroy(txgbe->wx->phylink); return; } -- cgit 1.3-korg
6c5ec52c68a6net: txgbe: fix RTNL assertion warning when remove module
1 file changed · +2 −1
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c+2 −1 modifieddiff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c index 8ea7aa07ae4e9..dc9f243146580 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c @@ -657,7 +657,9 @@ void txgbe_remove_phy(struct txgbe *txgbe) return; case wx_mac_sp: if (txgbe->wx->media_type == wx_media_copper) { + rtnl_lock(); phylink_disconnect_phy(txgbe->wx->phylink); + rtnl_unlock(); phylink_destroy(txgbe->wx->phylink); return; } -- cgit 1.3-korg
d29cafc7e4eenet: txgbe: fix RTNL assertion warning when remove module
1 file changed · +2 −1
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c+2 −1 modifieddiff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c index 03f1b9bc604d5..9b6f5cd3fdd7d 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c @@ -659,7 +659,9 @@ void txgbe_remove_phy(struct txgbe *txgbe) return; case wx_mac_sp: if (txgbe->wx->media_type == wx_media_copper) { + rtnl_lock(); phylink_disconnect_phy(txgbe->wx->phylink); + rtnl_unlock(); phylink_destroy(txgbe->wx->phylink); return; } -- cgit 1.3-korg
0305e7118451net: txgbe: fix RTNL assertion warning when remove module
1 file changed · +2 −1
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c+2 −1 modifieddiff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c index 4159c84035fdc..2494a3a171fdc 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c @@ -820,7 +820,9 @@ err_unregister_swnode: void txgbe_remove_phy(struct txgbe *txgbe) { if (txgbe->wx->media_type == sp_media_copper) { + rtnl_lock(); phylink_disconnect_phy(txgbe->phylink); + rtnl_unlock(); phylink_destroy(txgbe->phylink); return; } -- cgit 1.3-korg
e159f05e12ccnet: txgbe: fix RTNL assertion warning when remove module
1 file changed · +2 −1
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c+2 −1 modifieddiff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c index 8ea7aa07ae4e9..dc9f243146580 100644 --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c @@ -657,7 +657,9 @@ void txgbe_remove_phy(struct txgbe *txgbe) return; case wx_mac_sp: if (txgbe->wx->media_type == wx_media_copper) { + rtnl_lock(); phylink_disconnect_phy(txgbe->wx->phylink); + rtnl_unlock(); phylink_destroy(txgbe->wx->phylink); return; } -- cgit 1.3-korg
Vulnerability mechanics
Root cause
"The txgbe driver's remove function calls phylink_disconnect_phy without holding the RTNL lock, leading to an assertion failure."
Attack vector
This vulnerability is triggered when the txgbe module is removed. The driver's `txgbe_remove_phy` function, specifically when handling `wx_mac_sp` and `wx_media_copper`, calls `phylink_disconnect_phy` without proper locking. This occurs during the unbinding or unloading of the txgbe driver from the system.
Affected code
The vulnerability exists in the `txgbe_remove_phy` function within the file `drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c`. Specifically, the code path for copper media types calls `phylink_disconnect_phy` without acquiring the necessary RTNL lock.
What the fix does
The patch addresses the RTNL assertion warning by adding `rtnl_lock()` and `rtnl_unlock()` calls around the `phylink_disconnect_phy()` function within the `txgbe_remove_phy` function in `drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c` [patch_id=5239507]. This ensures that the network routing information (RTNL) is properly locked during the disconnection of the PHY, preventing the assertion failure that occurred when the module was removed.
Generated on Jun 8, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
5- git.kernel.org/stable/c/0305e7118451c7c363c18f8113b0d8e0077ffa4cnvd
- git.kernel.org/stable/c/3e223a7fd41ce6fffdb10577df9350385262bf33nvd
- git.kernel.org/stable/c/6c5ec52c68a6a442c8a159615ae092512562318anvd
- git.kernel.org/stable/c/d29cafc7e4ee9e28a150ba17e9a565ec5d881fbcnvd
- git.kernel.org/stable/c/e159f05e12cc1111a3103b99375ddf0dfd0e7d63nvd
News mentions
0No linked articles in our index yet.