CVE-2026-43456
Gravedad CVSS v3.1:
ALTA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
08/05/2026
Última modificación:
12/05/2026
Descripción
*** Pendiente de traducción *** In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
bonding: fix type confusion in bond_setup_by_slave()<br />
<br />
kernel BUG at net/core/skbuff.c:2306!<br />
Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI<br />
RIP: 0010:pskb_expand_head+0xa08/0xfe0 net/core/skbuff.c:2306<br />
RSP: 0018:ffffc90004aff760 EFLAGS: 00010293<br />
RAX: 0000000000000000 RBX: ffff88807e3c8780 RCX: ffffffff89593e0e<br />
RDX: ffff88807b7c4900 RSI: ffffffff89594747 RDI: ffff88807b7c4900<br />
RBP: 0000000000000820 R08: 0000000000000005 R09: 0000000000000000<br />
R10: 00000000961a63e0 R11: 0000000000000000 R12: ffff88807e3c8780<br />
R13: 00000000961a6560 R14: dffffc0000000000 R15: 00000000961a63e0<br />
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033<br />
CR2: 00007fe1a0ed8df0 CR3: 000000002d816000 CR4: 00000000003526f0<br />
Call Trace:<br />
<br />
ipgre_header+0xdd/0x540 net/ipv4/ip_gre.c:900<br />
dev_hard_header include/linux/netdevice.h:3439 [inline]<br />
packet_snd net/packet/af_packet.c:3028 [inline]<br />
packet_sendmsg+0x3ae5/0x53c0 net/packet/af_packet.c:3108<br />
sock_sendmsg_nosec net/socket.c:727 [inline]<br />
__sock_sendmsg net/socket.c:742 [inline]<br />
____sys_sendmsg+0xa54/0xc30 net/socket.c:2592<br />
___sys_sendmsg+0x190/0x1e0 net/socket.c:2646<br />
__sys_sendmsg+0x170/0x220 net/socket.c:2678<br />
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]<br />
do_syscall_64+0x106/0xf80 arch/x86/entry/syscall_64.c:94<br />
entry_SYSCALL_64_after_hwframe+0x77/0x7f<br />
RIP: 0033:0x7fe1a0e6c1a9<br />
<br />
When a non-Ethernet device (e.g. GRE tunnel) is enslaved to a bond,<br />
bond_setup_by_slave() directly copies the slave&#39;s header_ops to the<br />
bond device:<br />
<br />
bond_dev->header_ops = slave_dev->header_ops;<br />
<br />
This causes a type confusion when dev_hard_header() is later called<br />
on the bond device. Functions like ipgre_header(), ip6gre_header(),all use<br />
netdev_priv(dev) to access their device-specific private data. When<br />
called with the bond device, netdev_priv() returns the bond&#39;s private<br />
data (struct bonding) instead of the expected type (e.g. struct<br />
ip_tunnel), leading to garbage values being read and kernel crashes.<br />
<br />
Fix this by introducing bond_header_ops with wrapper functions that<br />
delegate to the active slave&#39;s header_ops using the slave&#39;s own<br />
device. This ensures netdev_priv() in the slave&#39;s header functions<br />
always receives the correct device.<br />
<br />
The fix is placed in the bonding driver rather than individual device<br />
drivers, as the root cause is bond blindly inheriting header_ops from<br />
the slave without considering that these callbacks expect a specific<br />
netdev_priv() layout.<br />
<br />
The type confusion can be observed by adding a printk in<br />
ipgre_header() and running the following commands:<br />
<br />
ip link add dummy0 type dummy<br />
ip addr add 10.0.0.1/24 dev dummy0<br />
ip link set dummy0 up<br />
ip link add gre1 type gre local 10.0.0.1<br />
ip link add bond1 type bond mode active-backup<br />
ip link set gre1 master bond1<br />
ip link set gre1 up<br />
ip link set bond1 up<br />
ip addr add fe80::1/64 dev bond1
Impacto
Puntuación base 3.x
7.80
Gravedad 3.x
ALTA



