CVE-2025-23163 Information
Description
In the Linux kernel the following vulnerability has been resolved:
net: vlan: don’t propagate flags on open
With the device instance lock there is now a possibility of a deadlock:
[ 1.211455] ============================================
[ 1.211571] WARNING: possible recursive locking detected
[ 1.211687] 6.14.0-rc5-01215-g032756b4ca7a-dirty 5 Not tainted
[ 1.211823] ——————————————–
[ 1.211936] ip/184 is trying to acquire lock:
[ 1.212032] ffff8881024a4c30 (&dev->lock)+.+.-4:4 at: dev_set_allmulti+0x4e/0xb0
[ 1.212207]
[ 1.212207] but task is already holding lock:
[ 1.212332] ffff8881024a4c30 (&dev->lock)+.+.-4:4 at: dev_open+0x50/0xb0
[ 1.212487]
[ 1.212487] other info that might help us debug this:
[ 1.212626] Possible unsafe locking scenario:
[ 1.212626]
[ 1.212751] CPU0
[ 1.212815] —-
[ 1.212871] lock(&dev->lock);
[ 1.212944] lock(&dev->lock);
[ 1.213016]
[ 1.213016] DEADLOCK
[ 1.213016]
[ 1.213143] May be due to missing lock nesting notation
[ 1.213143]
[ 1.213294] 3 locks held by ip/184:
[ 1.213371] 0: ffffffff838b53e0 (rtnl_mutex)+.+.-4:4 at: rtnl_nets_lock+0x1b/0xa0
[ 1.213543] 1: ffffffff84e5fc70 (&net->rtnl_mutex)+.+.-4:4 at: rtnl_nets_lock+0x37/0xa0
[ 1.213727] 2: ffff8881024a4c30 (&dev->lock)+.+.-4:4 at: dev_open+0x50/0xb0
[ 1.213895]
[ 1.213895] stack backtrace:
[ 1.213991] CPU: 0 UID: 0 PID: 184 Comm: ip Not tainted 6.14.0-rc5-01215-g032756b4ca7a-dirty 5
[ 1.213993] Hardware name: QEMU Standard PC (i440FX + PIIX 1996) BIOS Arch Linux 1.16.3-1-1 04/01/2014
[ 1.213994] Call Trace:
[ 1.213995]
Device setup:
netdevsim0 (down)
^ ^
bond netdevsim1.100@netdevsim1 allmulticast=on (down)
When we enslave the lower device (netdevsim0) which has a vlan we propagate vlan’s allmuti/promisc flags during ndo_open. This causes (re)locking on of the real_dev.
Propagate allmulti/promisc on flags change not on the open. There is a slight semantics change that vlans that are down now propagate the flags but this seems unlikely to result in the real issues.
Reproducer:
echo 0 1 > /sys/bus/netdevsim/new_device
dev_path=$(ls -d /sys/bus/netdevsim/devices/netdevsim0/net/) dev=$(echo $dev_path | rev | cut -d/ -f1 | rev)
ip link set dev $dev name netdevsim0 ip link set dev netdevsim0 up
ip link add link netdevsim0 name netdevsim0.100 type vlan id 100 ip link set dev netdevsim0.100 allm
truncated—
Reference
https://git.kernel.org/stable/c/27b918007d96402aba10ed52a6af8015230f1793 https://git.kernel.org/stable/c/299d7d27af6b5844cda06a0fdfa635705e1bc50f https://git.kernel.org/stable/c/538b43aa21e3b17c110104efd218b966d2eda5f8 https://git.kernel.org/stable/c/53fb25e90c0a503a17c639341ba5e755cb2feb5c https://git.kernel.org/stable/c/8980018a9806743d9b80837330d46f06ecf78516 https://git.kernel.org/stable/c/d537859e56bcc3091805c524484a4c85386b3cc8
Share on: