Vulnerability Details CVE-2024-26596
In the Linux kernel, the following vulnerability has been resolved:
net: dsa: fix netdev_priv() dereference before check on non-DSA netdevice events
After the blamed commit, we started doing this dereference for every
NETDEV_CHANGEUPPER and NETDEV_PRECHANGEUPPER event in the system.
static inline struct dsa_port *dsa_user_to_port(const struct net_device *dev)
{
struct dsa_user_priv *p = netdev_priv(dev);
return p->dp;
}
Which is obviously bogus, because not all net_devices have a netdev_priv()
of type struct dsa_user_priv. But struct dsa_user_priv is fairly small,
and p->dp means dereferencing 8 bytes starting with offset 16. Most
drivers allocate that much private memory anyway, making our access not
fault, and we discard the bogus data quickly afterwards, so this wasn't
caught.
But the dummy interface is somewhat special in that it calls
alloc_netdev() with a priv size of 0. So every netdev_priv() dereference
is invalid, and we get this when we emit a NETDEV_PRECHANGEUPPER event
with a VLAN as its new upper:
$ ip link add dummy1 type dummy
$ ip link add link dummy1 name dummy1.100 type vlan id 100
[ 43.309174] ==================================================================
[ 43.316456] BUG: KASAN: slab-out-of-bounds in dsa_user_prechangeupper+0x30/0xe8
[ 43.323835] Read of size 8 at addr ffff3f86481d2990 by task ip/374
[ 43.330058]
[ 43.342436] Call trace:
[ 43.366542] dsa_user_prechangeupper+0x30/0xe8
[ 43.371024] dsa_user_netdevice_event+0xb38/0xee8
[ 43.375768] notifier_call_chain+0xa4/0x210
[ 43.379985] raw_notifier_call_chain+0x24/0x38
[ 43.384464] __netdev_upper_dev_link+0x3ec/0x5d8
[ 43.389120] netdev_upper_dev_link+0x70/0xa8
[ 43.393424] register_vlan_dev+0x1bc/0x310
[ 43.397554] vlan_newlink+0x210/0x248
[ 43.401247] rtnl_newlink+0x9fc/0xe30
[ 43.404942] rtnetlink_rcv_msg+0x378/0x580
Avoid the kernel oops by dereferencing after the type check, as customary.
Exploit prediction scoring system (EPSS) score
EPSS Score 0.0
EPSS Ranking 1.6%
CVSS Severity
CVSS v3 Score 5.5
Products affected by CVE-2024-26596
-
cpe:2.3:o:linux:linux_kernel:6.1.1
-
cpe:2.3:o:linux:linux_kernel:6.1.10
-
cpe:2.3:o:linux:linux_kernel:6.1.100
-
cpe:2.3:o:linux:linux_kernel:6.1.101
-
cpe:2.3:o:linux:linux_kernel:6.1.102
-
cpe:2.3:o:linux:linux_kernel:6.1.103
-
cpe:2.3:o:linux:linux_kernel:6.1.104
-
cpe:2.3:o:linux:linux_kernel:6.1.105
-
cpe:2.3:o:linux:linux_kernel:6.1.106
-
cpe:2.3:o:linux:linux_kernel:6.1.107
-
cpe:2.3:o:linux:linux_kernel:6.1.108
-
cpe:2.3:o:linux:linux_kernel:6.1.109
-
cpe:2.3:o:linux:linux_kernel:6.1.11
-
cpe:2.3:o:linux:linux_kernel:6.1.110
-
cpe:2.3:o:linux:linux_kernel:6.1.111
-
cpe:2.3:o:linux:linux_kernel:6.1.112
-
cpe:2.3:o:linux:linux_kernel:6.1.113
-
cpe:2.3:o:linux:linux_kernel:6.1.114
-
cpe:2.3:o:linux:linux_kernel:6.1.115
-
cpe:2.3:o:linux:linux_kernel:6.1.116
-
cpe:2.3:o:linux:linux_kernel:6.1.117
-
cpe:2.3:o:linux:linux_kernel:6.1.118
-
cpe:2.3:o:linux:linux_kernel:6.1.119
-
cpe:2.3:o:linux:linux_kernel:6.1.12
-
cpe:2.3:o:linux:linux_kernel:6.1.120
-
cpe:2.3:o:linux:linux_kernel:6.1.121
-
cpe:2.3:o:linux:linux_kernel:6.1.122
-
cpe:2.3:o:linux:linux_kernel:6.1.123
-
cpe:2.3:o:linux:linux_kernel:6.1.124
-
cpe:2.3:o:linux:linux_kernel:6.1.125
-
cpe:2.3:o:linux:linux_kernel:6.1.126
-
cpe:2.3:o:linux:linux_kernel:6.1.127
-
cpe:2.3:o:linux:linux_kernel:6.1.128
-
cpe:2.3:o:linux:linux_kernel:6.1.129
-
cpe:2.3:o:linux:linux_kernel:6.1.13
-
cpe:2.3:o:linux:linux_kernel:6.1.130
-
cpe:2.3:o:linux:linux_kernel:6.1.131
-
cpe:2.3:o:linux:linux_kernel:6.1.132
-
cpe:2.3:o:linux:linux_kernel:6.1.133
-
cpe:2.3:o:linux:linux_kernel:6.1.134
-
cpe:2.3:o:linux:linux_kernel:6.1.135
-
cpe:2.3:o:linux:linux_kernel:6.1.14
-
cpe:2.3:o:linux:linux_kernel:6.1.15
-
cpe:2.3:o:linux:linux_kernel:6.1.16
-
cpe:2.3:o:linux:linux_kernel:6.1.17
-
cpe:2.3:o:linux:linux_kernel:6.1.18
-
cpe:2.3:o:linux:linux_kernel:6.1.19
-
cpe:2.3:o:linux:linux_kernel:6.1.2
-
cpe:2.3:o:linux:linux_kernel:6.1.20
-
cpe:2.3:o:linux:linux_kernel:6.1.21
-
cpe:2.3:o:linux:linux_kernel:6.1.22
-
cpe:2.3:o:linux:linux_kernel:6.1.23
-
cpe:2.3:o:linux:linux_kernel:6.1.24
-
cpe:2.3:o:linux:linux_kernel:6.1.25
-
cpe:2.3:o:linux:linux_kernel:6.1.26
-
cpe:2.3:o:linux:linux_kernel:6.1.27
-
cpe:2.3:o:linux:linux_kernel:6.1.28
-
cpe:2.3:o:linux:linux_kernel:6.1.29
-
cpe:2.3:o:linux:linux_kernel:6.1.3
-
cpe:2.3:o:linux:linux_kernel:6.1.30
-
cpe:2.3:o:linux:linux_kernel:6.1.31
-
cpe:2.3:o:linux:linux_kernel:6.1.32
-
cpe:2.3:o:linux:linux_kernel:6.1.33
-
cpe:2.3:o:linux:linux_kernel:6.1.34
-
cpe:2.3:o:linux:linux_kernel:6.1.35
-
cpe:2.3:o:linux:linux_kernel:6.1.36
-
cpe:2.3:o:linux:linux_kernel:6.1.37
-
cpe:2.3:o:linux:linux_kernel:6.1.38
-
cpe:2.3:o:linux:linux_kernel:6.1.39
-
cpe:2.3:o:linux:linux_kernel:6.1.4
-
cpe:2.3:o:linux:linux_kernel:6.1.40
-
cpe:2.3:o:linux:linux_kernel:6.1.41
-
cpe:2.3:o:linux:linux_kernel:6.1.42
-
cpe:2.3:o:linux:linux_kernel:6.1.43
-
cpe:2.3:o:linux:linux_kernel:6.1.44
-
cpe:2.3:o:linux:linux_kernel:6.1.45
-
cpe:2.3:o:linux:linux_kernel:6.1.46
-
cpe:2.3:o:linux:linux_kernel:6.1.47
-
cpe:2.3:o:linux:linux_kernel:6.1.48
-
cpe:2.3:o:linux:linux_kernel:6.1.49
-
cpe:2.3:o:linux:linux_kernel:6.1.5
-
cpe:2.3:o:linux:linux_kernel:6.1.50
-
cpe:2.3:o:linux:linux_kernel:6.1.51
-
cpe:2.3:o:linux:linux_kernel:6.1.52
-
cpe:2.3:o:linux:linux_kernel:6.1.53
-
cpe:2.3:o:linux:linux_kernel:6.1.54
-
cpe:2.3:o:linux:linux_kernel:6.1.55
-
cpe:2.3:o:linux:linux_kernel:6.1.56
-
cpe:2.3:o:linux:linux_kernel:6.1.57
-
cpe:2.3:o:linux:linux_kernel:6.1.58
-
cpe:2.3:o:linux:linux_kernel:6.1.59
-
cpe:2.3:o:linux:linux_kernel:6.1.6
-
cpe:2.3:o:linux:linux_kernel:6.1.60
-
cpe:2.3:o:linux:linux_kernel:6.1.61
-
cpe:2.3:o:linux:linux_kernel:6.1.62
-
cpe:2.3:o:linux:linux_kernel:6.1.63
-
cpe:2.3:o:linux:linux_kernel:6.1.64
-
cpe:2.3:o:linux:linux_kernel:6.1.65
-
cpe:2.3:o:linux:linux_kernel:6.1.66
-
cpe:2.3:o:linux:linux_kernel:6.1.67
-
cpe:2.3:o:linux:linux_kernel:6.1.68
-
cpe:2.3:o:linux:linux_kernel:6.1.69
-
cpe:2.3:o:linux:linux_kernel:6.1.7
-
cpe:2.3:o:linux:linux_kernel:6.1.70
-
cpe:2.3:o:linux:linux_kernel:6.1.71
-
cpe:2.3:o:linux:linux_kernel:6.1.72
-
cpe:2.3:o:linux:linux_kernel:6.1.73
-
cpe:2.3:o:linux:linux_kernel:6.1.74
-
cpe:2.3:o:linux:linux_kernel:6.1.75
-
cpe:2.3:o:linux:linux_kernel:6.1.76
-
cpe:2.3:o:linux:linux_kernel:6.1.77
-
cpe:2.3:o:linux:linux_kernel:6.1.78
-
cpe:2.3:o:linux:linux_kernel:6.1.79
-
cpe:2.3:o:linux:linux_kernel:6.1.8
-
cpe:2.3:o:linux:linux_kernel:6.1.80
-
cpe:2.3:o:linux:linux_kernel:6.1.81
-
cpe:2.3:o:linux:linux_kernel:6.1.82
-
cpe:2.3:o:linux:linux_kernel:6.1.83
-
cpe:2.3:o:linux:linux_kernel:6.1.84
-
cpe:2.3:o:linux:linux_kernel:6.1.85
-
cpe:2.3:o:linux:linux_kernel:6.1.86
-
cpe:2.3:o:linux:linux_kernel:6.1.87
-
cpe:2.3:o:linux:linux_kernel:6.1.88
-
cpe:2.3:o:linux:linux_kernel:6.1.89
-
cpe:2.3:o:linux:linux_kernel:6.1.9
-
cpe:2.3:o:linux:linux_kernel:6.1.90
-
cpe:2.3:o:linux:linux_kernel:6.1.91
-
cpe:2.3:o:linux:linux_kernel:6.1.92
-
cpe:2.3:o:linux:linux_kernel:6.1.93
-
cpe:2.3:o:linux:linux_kernel:6.1.94
-
cpe:2.3:o:linux:linux_kernel:6.1.95
-
cpe:2.3:o:linux:linux_kernel:6.1.96
-
cpe:2.3:o:linux:linux_kernel:6.1.97
-
cpe:2.3:o:linux:linux_kernel:6.1.98
-
cpe:2.3:o:linux:linux_kernel:6.1.99
-
cpe:2.3:o:linux:linux_kernel:6.2
-
cpe:2.3:o:linux:linux_kernel:6.2.0
-
cpe:2.3:o:linux:linux_kernel:6.2.1
-
cpe:2.3:o:linux:linux_kernel:6.2.10
-
cpe:2.3:o:linux:linux_kernel:6.2.11
-
cpe:2.3:o:linux:linux_kernel:6.2.12
-
cpe:2.3:o:linux:linux_kernel:6.2.13
-
cpe:2.3:o:linux:linux_kernel:6.2.14
-
cpe:2.3:o:linux:linux_kernel:6.2.15
-
cpe:2.3:o:linux:linux_kernel:6.2.16
-
cpe:2.3:o:linux:linux_kernel:6.2.2
-
cpe:2.3:o:linux:linux_kernel:6.2.3
-
cpe:2.3:o:linux:linux_kernel:6.2.4
-
cpe:2.3:o:linux:linux_kernel:6.2.5
-
cpe:2.3:o:linux:linux_kernel:6.2.6
-
cpe:2.3:o:linux:linux_kernel:6.2.7
-
cpe:2.3:o:linux:linux_kernel:6.2.8
-
cpe:2.3:o:linux:linux_kernel:6.2.9
-
cpe:2.3:o:linux:linux_kernel:6.3
-
cpe:2.3:o:linux:linux_kernel:6.3.1
-
cpe:2.3:o:linux:linux_kernel:6.3.10
-
cpe:2.3:o:linux:linux_kernel:6.3.11
-
cpe:2.3:o:linux:linux_kernel:6.3.12
-
cpe:2.3:o:linux:linux_kernel:6.3.13
-
cpe:2.3:o:linux:linux_kernel:6.3.2
-
cpe:2.3:o:linux:linux_kernel:6.3.3
-
cpe:2.3:o:linux:linux_kernel:6.3.4
-
cpe:2.3:o:linux:linux_kernel:6.3.5
-
cpe:2.3:o:linux:linux_kernel:6.3.6
-
cpe:2.3:o:linux:linux_kernel:6.3.7
-
cpe:2.3:o:linux:linux_kernel:6.3.8
-
cpe:2.3:o:linux:linux_kernel:6.3.9
-
cpe:2.3:o:linux:linux_kernel:6.4
-
cpe:2.3:o:linux:linux_kernel:6.4.1
-
cpe:2.3:o:linux:linux_kernel:6.4.10
-
cpe:2.3:o:linux:linux_kernel:6.4.11
-
cpe:2.3:o:linux:linux_kernel:6.4.12
-
cpe:2.3:o:linux:linux_kernel:6.4.13
-
cpe:2.3:o:linux:linux_kernel:6.4.14
-
cpe:2.3:o:linux:linux_kernel:6.4.15
-
cpe:2.3:o:linux:linux_kernel:6.4.16
-
cpe:2.3:o:linux:linux_kernel:6.4.2
-
cpe:2.3:o:linux:linux_kernel:6.4.3
-
cpe:2.3:o:linux:linux_kernel:6.4.4
-
cpe:2.3:o:linux:linux_kernel:6.4.5
-
cpe:2.3:o:linux:linux_kernel:6.4.6
-
cpe:2.3:o:linux:linux_kernel:6.4.7
-
cpe:2.3:o:linux:linux_kernel:6.4.8
-
cpe:2.3:o:linux:linux_kernel:6.4.9
-
cpe:2.3:o:linux:linux_kernel:6.5
-
cpe:2.3:o:linux:linux_kernel:6.5.1
-
cpe:2.3:o:linux:linux_kernel:6.5.10
-
cpe:2.3:o:linux:linux_kernel:6.5.11
-
cpe:2.3:o:linux:linux_kernel:6.5.12
-
cpe:2.3:o:linux:linux_kernel:6.5.13
-
cpe:2.3:o:linux:linux_kernel:6.5.2
-
cpe:2.3:o:linux:linux_kernel:6.5.3
-
cpe:2.3:o:linux:linux_kernel:6.5.4
-
cpe:2.3:o:linux:linux_kernel:6.5.5
-
cpe:2.3:o:linux:linux_kernel:6.5.6
-
cpe:2.3:o:linux:linux_kernel:6.5.7
-
cpe:2.3:o:linux:linux_kernel:6.5.8
-
cpe:2.3:o:linux:linux_kernel:6.5.9
-
cpe:2.3:o:linux:linux_kernel:6.6
-
cpe:2.3:o:linux:linux_kernel:6.6.1
-
cpe:2.3:o:linux:linux_kernel:6.6.10
-
cpe:2.3:o:linux:linux_kernel:6.6.11
-
cpe:2.3:o:linux:linux_kernel:6.6.12
-
cpe:2.3:o:linux:linux_kernel:6.6.13
-
cpe:2.3:o:linux:linux_kernel:6.6.14
-
cpe:2.3:o:linux:linux_kernel:6.6.15
-
cpe:2.3:o:linux:linux_kernel:6.6.16
-
cpe:2.3:o:linux:linux_kernel:6.6.17
-
cpe:2.3:o:linux:linux_kernel:6.6.18
-
cpe:2.3:o:linux:linux_kernel:6.6.19
-
cpe:2.3:o:linux:linux_kernel:6.6.2
-
cpe:2.3:o:linux:linux_kernel:6.6.20
-
cpe:2.3:o:linux:linux_kernel:6.6.21
-
cpe:2.3:o:linux:linux_kernel:6.6.22
-
cpe:2.3:o:linux:linux_kernel:6.6.23
-
cpe:2.3:o:linux:linux_kernel:6.6.24
-
cpe:2.3:o:linux:linux_kernel:6.6.25
-
cpe:2.3:o:linux:linux_kernel:6.6.26
-
cpe:2.3:o:linux:linux_kernel:6.6.27
-
cpe:2.3:o:linux:linux_kernel:6.6.28
-
cpe:2.3:o:linux:linux_kernel:6.6.29
-
cpe:2.3:o:linux:linux_kernel:6.6.3
-
cpe:2.3:o:linux:linux_kernel:6.6.30
-
cpe:2.3:o:linux:linux_kernel:6.6.31
-
cpe:2.3:o:linux:linux_kernel:6.6.32
-
cpe:2.3:o:linux:linux_kernel:6.6.33
-
cpe:2.3:o:linux:linux_kernel:6.6.34
-
cpe:2.3:o:linux:linux_kernel:6.6.35
-
cpe:2.3:o:linux:linux_kernel:6.6.36
-
cpe:2.3:o:linux:linux_kernel:6.6.37
-
cpe:2.3:o:linux:linux_kernel:6.6.38
-
cpe:2.3:o:linux:linux_kernel:6.6.39
-
cpe:2.3:o:linux:linux_kernel:6.6.4
-
cpe:2.3:o:linux:linux_kernel:6.6.40
-
cpe:2.3:o:linux:linux_kernel:6.6.41
-
cpe:2.3:o:linux:linux_kernel:6.6.42
-
cpe:2.3:o:linux:linux_kernel:6.6.43
-
cpe:2.3:o:linux:linux_kernel:6.6.44
-
cpe:2.3:o:linux:linux_kernel:6.6.45
-
cpe:2.3:o:linux:linux_kernel:6.6.46
-
cpe:2.3:o:linux:linux_kernel:6.6.47
-
cpe:2.3:o:linux:linux_kernel:6.6.48
-
cpe:2.3:o:linux:linux_kernel:6.6.49
-
cpe:2.3:o:linux:linux_kernel:6.6.5
-
cpe:2.3:o:linux:linux_kernel:6.6.50
-
cpe:2.3:o:linux:linux_kernel:6.6.51
-
cpe:2.3:o:linux:linux_kernel:6.6.52
-
cpe:2.3:o:linux:linux_kernel:6.6.53
-
cpe:2.3:o:linux:linux_kernel:6.6.54
-
cpe:2.3:o:linux:linux_kernel:6.6.55
-
cpe:2.3:o:linux:linux_kernel:6.6.56
-
cpe:2.3:o:linux:linux_kernel:6.6.57
-
cpe:2.3:o:linux:linux_kernel:6.6.58
-
cpe:2.3:o:linux:linux_kernel:6.6.59
-
cpe:2.3:o:linux:linux_kernel:6.6.6
-
cpe:2.3:o:linux:linux_kernel:6.6.60
-
cpe:2.3:o:linux:linux_kernel:6.6.61
-
cpe:2.3:o:linux:linux_kernel:6.6.62
-
cpe:2.3:o:linux:linux_kernel:6.6.63
-
cpe:2.3:o:linux:linux_kernel:6.6.64
-
cpe:2.3:o:linux:linux_kernel:6.6.65
-
cpe:2.3:o:linux:linux_kernel:6.6.66
-
cpe:2.3:o:linux:linux_kernel:6.6.67
-
cpe:2.3:o:linux:linux_kernel:6.6.68
-
cpe:2.3:o:linux:linux_kernel:6.6.69
-
cpe:2.3:o:linux:linux_kernel:6.6.7
-
cpe:2.3:o:linux:linux_kernel:6.6.70
-
cpe:2.3:o:linux:linux_kernel:6.6.71
-
cpe:2.3:o:linux:linux_kernel:6.6.72
-
cpe:2.3:o:linux:linux_kernel:6.6.73
-
cpe:2.3:o:linux:linux_kernel:6.6.74
-
cpe:2.3:o:linux:linux_kernel:6.6.75
-
cpe:2.3:o:linux:linux_kernel:6.6.76
-
cpe:2.3:o:linux:linux_kernel:6.6.77
-
cpe:2.3:o:linux:linux_kernel:6.6.78
-
cpe:2.3:o:linux:linux_kernel:6.6.79
-
cpe:2.3:o:linux:linux_kernel:6.6.8
-
cpe:2.3:o:linux:linux_kernel:6.6.80
-
cpe:2.3:o:linux:linux_kernel:6.6.81
-
cpe:2.3:o:linux:linux_kernel:6.6.83
-
cpe:2.3:o:linux:linux_kernel:6.6.84
-
cpe:2.3:o:linux:linux_kernel:6.6.85
-
cpe:2.3:o:linux:linux_kernel:6.6.86
-
cpe:2.3:o:linux:linux_kernel:6.6.87
-
cpe:2.3:o:linux:linux_kernel:6.6.88
-
cpe:2.3:o:linux:linux_kernel:6.6.9
-
cpe:2.3:o:linux:linux_kernel:6.7
-
cpe:2.3:o:linux:linux_kernel:6.7.1