CVE-2025-21701
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
13/02/2025
Last modified:
13/03/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
net: avoid race between device unregistration and ethnl ops<br />
<br />
The following trace can be seen if a device is being unregistered while<br />
its number of channels are being modified.<br />
<br />
DEBUG_LOCKS_WARN_ON(lock->magic != lock)<br />
WARNING: CPU: 3 PID: 3754 at kernel/locking/mutex.c:564 __mutex_lock+0xc8a/0x1120<br />
CPU: 3 UID: 0 PID: 3754 Comm: ethtool Not tainted 6.13.0-rc6+ #771<br />
RIP: 0010:__mutex_lock+0xc8a/0x1120<br />
Call Trace:<br />
<br />
ethtool_check_max_channel+0x1ea/0x880<br />
ethnl_set_channels+0x3c3/0xb10<br />
ethnl_default_set_doit+0x306/0x650<br />
genl_family_rcv_msg_doit+0x1e3/0x2c0<br />
genl_rcv_msg+0x432/0x6f0<br />
netlink_rcv_skb+0x13d/0x3b0<br />
genl_rcv+0x28/0x40<br />
netlink_unicast+0x42e/0x720<br />
netlink_sendmsg+0x765/0xc20<br />
__sys_sendto+0x3ac/0x420<br />
__x64_sys_sendto+0xe0/0x1c0<br />
do_syscall_64+0x95/0x180<br />
entry_SYSCALL_64_after_hwframe+0x76/0x7e<br />
<br />
This is because unregister_netdevice_many_notify might run before the<br />
rtnl lock section of ethnl operations, eg. set_channels in the above<br />
example. In this example the rss lock would be destroyed by the device<br />
unregistration path before being used again, but in general running<br />
ethnl operations while dismantle has started is not a good idea.<br />
<br />
Fix this by denying any operation on devices being unregistered. A check<br />
was already there in ethnl_ops_begin, but not wide enough.<br />
<br />
Note that the same issue cannot be seen on the ioctl version<br />
(__dev_ethtool) because the device reference is retrieved from within<br />
the rtnl lock section there. Once dismantle started, the net device is<br />
unlisted and no reference will be found.
Impact
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/12e070eb6964b341b41677fd260af5a305316a1f
- https://git.kernel.org/stable/c/26bc6076798aa4dc83a07d0a386f9e57c94e8517
- https://git.kernel.org/stable/c/2f29127e94ae9fdc7497331003d6860e9551cdf3
- https://git.kernel.org/stable/c/4dc880245f9b529fa8f476b5553c799d2848b47b
- https://git.kernel.org/stable/c/b1cb37a31a482df3dd35a6ac166282dac47664f4
- https://git.kernel.org/stable/c/b382ab9b885cbb665e0e70a727f101c981b4edf3