CVE-2026-43167 in Linuxinformation

Résumé

par VulDB • 31/05/2026

Dans le noyau Linux, la vulnérabilité suivante a été corrigée :

xfrm : toujours vider l'état et la politique lors de l'événement NETDEV_UNREGISTER

syzbot signale que le compteur de références (refcount) de « struct xfrm_state » fuit.

unregister_netdevice: attente de la libération de netdevsim0. Nombre d'utilisations = 2 ref_tracker: netdev@ffff888052f24618 a 1/1 utilisateurs à __netdev_tracker_alloc include/linux/netdevice.h:4400 [inline]
netdev_tracker_alloc include/linux/netdevice.h:4412 [inline]
xfrm_dev_state_add+0x3a5/0x1080 net/xfrm/xfrm_device.c:316 xfrm_state_construct net/xfrm/xfrm_user.c:986 [inline]
xfrm_add_sa+0x34ff/0x5fa0 net/xfrm/xfrm_user.c:1022 xfrm_user_rcv_msg+0x58e/0xc00 net/xfrm/xfrm_user.c:3507 netlink_rcv_skb+0x158/0x420 net/netlink/af_netlink.c:2550 xfrm_netlink_rcv+0x71/0x90 net/xfrm/xfrm_user.c:3529 netlink_unicast_kernel net/netlink/af_netlink.c:1318 [inline]
netlink_unicast+0x5aa/0x870 net/netlink/af_netlink.c:1344 netlink_sendmsg+0x8c8/0xdd0 net/netlink/af_netlink.c:1894 sock_sendmsg_nosec net/socket.c:727 [inline]
__sock_sendmsg net/socket.c:742 [inline]
____sys_sendmsg+0xa5d/0xc30 net/socket.c:2592 ___sys_sendmsg+0x134/0x1d0 net/socket.c:2646 __sys_sendmsg+0x16d/0x220 net/socket.c:2678 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0xcd/0xf80 arch/x86/entry/syscall_64.c:94 entry_SYSCALL_64_after_hwframe+0x77/0x7f

Cela est dû au fait que le commit d77e38e612a0 (« xfrm: Add an IPsec hardware offloading API ») a implémenté xfrm_dev_unregister() comme une opération vide (no-op) bien que xfrm_dev_state_add(), appelé depuis xfrm_add_sa(), acquière une référence à « struct net_device ».

Pour reproduire les mêmes symptômes, suivez ces étapes :

echo 0 > /sys/bus/netdevsim/new_device dev=$(ls -1 /sys/bus/netdevsim/devices/netdevsim0/net/) ip xfrm state add src 192.168.13.1 dst 192.168.13.2 proto esp \ spi 0x1000 mode tunnel aead 'rfc4106(gcm(aes))' $key 128 \ offload crypto dev $dev dir out ethtool -K $dev esp-hw-offload off echo 0 > /sys/bus/netdevsim/del_device

Comme ces étapes l'indiquent, le bit NETIF_F_HW_ESP peut être effacé après que xfrm_dev_state_add() ait acquis une référence à « struct net_device ». De plus, xfrm_dev_state_add() ne vérifie pas le bit NETIF_F_HW_ESP lors de l'acquisition d'une référence à « struct net_device ».

Le commit 03891f820c21 (« xfrm: handle NETDEV_UNREGISTER for xfrm device ») a réintroduit l'événement NETDEV_UNREGISTER dans xfrm_dev_event(), mais ce commit, pour des raisons inconnues, a choisi de partager xfrm_dev_down() entre l'événement NETDEV_DOWN et l'événement NETDEV_UNREGISTER. Je suppose que ce commit a manqué le comportement décrit dans le paragraphe précédent.

Par conséquent, nous devons réintroduire xfrm_dev_unregister() afin de libérer la référence à « struct net_device » en vidant inconditionnellement l'état et la politique.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Responsable

Linux

Réserver

01/05/2026

Divulgation

06/05/2026

Modérer

accepté

Entrée

VDB-361393

CPE

prêt

EPSS

0.00013

KEV

non

Activités

très faible

Sources

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!