CVE-2024-26596
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
23/02/2024
Last modified:
03/11/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
net: dsa: fix netdev_priv() dereference before check on non-DSA netdevice events<br />
<br />
After the blamed commit, we started doing this dereference for every<br />
NETDEV_CHANGEUPPER and NETDEV_PRECHANGEUPPER event in the system.<br />
<br />
static inline struct dsa_port *dsa_user_to_port(const struct net_device *dev)<br />
{<br />
struct dsa_user_priv *p = netdev_priv(dev);<br />
<br />
return p->dp;<br />
}<br />
<br />
Which is obviously bogus, because not all net_devices have a netdev_priv()<br />
of type struct dsa_user_priv. But struct dsa_user_priv is fairly small,<br />
and p->dp means dereferencing 8 bytes starting with offset 16. Most<br />
drivers allocate that much private memory anyway, making our access not<br />
fault, and we discard the bogus data quickly afterwards, so this wasn&#39;t<br />
caught.<br />
<br />
But the dummy interface is somewhat special in that it calls<br />
alloc_netdev() with a priv size of 0. So every netdev_priv() dereference<br />
is invalid, and we get this when we emit a NETDEV_PRECHANGEUPPER event<br />
with a VLAN as its new upper:<br />
<br />
$ ip link add dummy1 type dummy<br />
$ ip link add link dummy1 name dummy1.100 type vlan id 100<br />
[ 43.309174] ==================================================================<br />
[ 43.316456] BUG: KASAN: slab-out-of-bounds in dsa_user_prechangeupper+0x30/0xe8<br />
[ 43.323835] Read of size 8 at addr ffff3f86481d2990 by task ip/374<br />
[ 43.330058]<br />
[ 43.342436] Call trace:<br />
[ 43.366542] dsa_user_prechangeupper+0x30/0xe8<br />
[ 43.371024] dsa_user_netdevice_event+0xb38/0xee8<br />
[ 43.375768] notifier_call_chain+0xa4/0x210<br />
[ 43.379985] raw_notifier_call_chain+0x24/0x38<br />
[ 43.384464] __netdev_upper_dev_link+0x3ec/0x5d8<br />
[ 43.389120] netdev_upper_dev_link+0x70/0xa8<br />
[ 43.393424] register_vlan_dev+0x1bc/0x310<br />
[ 43.397554] vlan_newlink+0x210/0x248<br />
[ 43.401247] rtnl_newlink+0x9fc/0xe30<br />
[ 43.404942] rtnetlink_rcv_msg+0x378/0x580<br />
<br />
Avoid the kernel oops by dereferencing after the type check, as customary.
Impact
Base Score 3.x
5.50
Severity 3.x
MEDIUM
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.1.0 (including) | 6.7.2 (excluding) |
To consult the complete list of CPE names with products and versions, see this page
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/69a1e2d938dbbfcff0e064269adf60ad26dbb102
- https://git.kernel.org/stable/c/844f104790bd69c2e4dbb9ee3eba46fde1fcea7b
- https://git.kernel.org/stable/c/9e9953f5e4d6d11a9dad56fdee307bb923302809
- https://git.kernel.org/stable/c/dbd909c20c11f0d29c0054d41e0d1f668a60e8c8
- https://git.kernel.org/stable/c/844f104790bd69c2e4dbb9ee3eba46fde1fcea7b
- https://git.kernel.org/stable/c/dbd909c20c11f0d29c0054d41e0d1f668a60e8c8
- https://lists.debian.org/debian-lts-announce/2025/03/msg00028.html



