製品・ソフトウェアに関する情報
LinuxのLinux Kernelにおける不特定の脆弱性
Title LinuxのLinux Kernelにおける不特定の脆弱性
Summary

Linuxカーネルにおいて、以下の脆弱性が修正されました。xfrm: NETDEV_UNREGISTERイベント発生時に常に状態とポリシーをフラッシュします。syzbotは「struct xfrm_state」の参照カウントがリークしていることを報告しています。unregister_netdevice: netdevsim0が解放されるのを待機中であり、使用カウントは2です。ref_tracker: netdev@ffff888052f24618は1/1のユーザーを持っています。これは、コミットd77e38e612a0("xfrm: Add an IPsec hardware offloading API")がxfrm_dev_unregister()を実質的に無操作として実装したためであり、xfrm_dev_state_add()がxfrm_state_construct()から"struct net_device"への参照を取得しているにもかかわらずです。このコミットは、NETDEV_DOWNイベントがNETDEV_UNREGISTERイベントの前に発生すると想定し、さらにxfrm_dev_state_add()が(dev-features & NETIF_F_HW_ESP) != 0の場合にのみ呼ばれることを想定していたと推測されます。Sabrina Dubrocaは同様の症状を再現する手順を特定しました。これらの手順によれば、xfrm_dev_state_add()が"struct net_device"への参照を取得した後にNETIF_F_HW_ESPビットがクリアされる可能性があります。また、xfrm_dev_state_add()は参照取得時にNETIF_F_HW_ESPビットをチェックしていません。コミット03891f820c21("xfrm: handle NETDEV_UNREGISTER for xfrm device")はxfrm_dev_event()にNETDEV_UNREGISTERイベントを再導入しましたが、その際に、NETDEV_DOWNイベントとNETDEV_UNREGISTERイベントの両方にxfrm_dev_down()を共有させるという理由不明の選択をしました。このコミットは前述の挙動を見落としていると考えられます。したがって、状態とポリシーを無条件にフラッシュし、"struct net_device"への参照を解放するために、xfrm_dev_unregister()を再導入する必要があります。

Possible impacts 当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。 また、当該ソフトウェアが扱う情報について、書き換えは発生しません。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 
Solution

リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。

Publication Date May 6, 2026, midnight
Registration Date May 15, 2026, 10:58 a.m.
Last Update May 15, 2026, 10:58 a.m.
CVSS3.0 : 警告
Score 5.5
Vector CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Affected System
Linux
Linux Kernel 4.12 以上 6.6.128 未満
Linux Kernel 6.13 以上 6.18.16 未満
Linux Kernel 6.19 以上 6.19.6 未満
Linux Kernel 6.7 以上 6.12.75 未満
Linux Kernel 7.0
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
Change Log
No Changed Details Date of change
1 [2026年05月15日]
  掲載
May 15, 2026, 10:58 a.m.

NVD Vulnerability Information
CVE-2026-43167
Summary

In the Linux kernel, the following vulnerability has been resolved:

xfrm: always flush state and policy upon NETDEV_UNREGISTER event

syzbot is reporting that "struct xfrm_state" refcount is leaking.

unregister_netdevice: waiting for netdevsim0 to become free. Usage count = 2
ref_tracker: netdev@ffff888052f24618 has 1/1 users at
__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

This is because commit d77e38e612a0 ("xfrm: Add an IPsec hardware
offloading API") implemented xfrm_dev_unregister() as no-op despite
xfrm_dev_state_add() from xfrm_state_construct() acquires a reference
to "struct net_device".
I guess that that commit expected that NETDEV_DOWN event is fired before
NETDEV_UNREGISTER event fires, and also assumed that xfrm_dev_state_add()
is called only if (dev->features & NETIF_F_HW_ESP) != 0.

Sabrina Dubroca identified steps to reproduce the same symptoms as below.

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

Like these steps indicate, the NETIF_F_HW_ESP bit can be cleared after
xfrm_dev_state_add() acquired a reference to "struct net_device".
Also, xfrm_dev_state_add() does not check for the NETIF_F_HW_ESP bit
when acquiring a reference to "struct net_device".

Commit 03891f820c21 ("xfrm: handle NETDEV_UNREGISTER for xfrm device")
re-introduced the NETDEV_UNREGISTER event to xfrm_dev_event(), but that
commit for unknown reason chose to share xfrm_dev_down() between the
NETDEV_DOWN event and the NETDEV_UNREGISTER event.
I guess that that commit missed the behavior in the previous paragraph.

Therefore, we need to re-introduce xfrm_dev_unregister() in order to
release the reference to "struct net_device" by unconditionally flushing
state and policy.

Publication Date May 6, 2026, 9:16 p.m.
Registration Date May 7, 2026, 4:08 a.m.
Last Update May 6, 2026, 10:07 p.m.
Related information, measures and tools
Common Vulnerabilities List