CVE-2024-27010CWE-667

CVE-2024-27010

Medium · published May 1, 2024

CVSS v3.1
5.5
EPSS
0%
Percentile
6.8
In the wild
Unconfirmed
What it is

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

net/sched: Fix mirred deadlock on device recursion

When the mirred action is used on a classful egress qdisc and a packet is

mirrored or redirected to self we hit a qdisc lock deadlock.

See trace below.

[..... other info removed for brevity....]

[ 82.890906]

[ 82.890906] ============================================

[ 82.890906] WARNING: possible recursive locking detected

[ 82.890906] 6.8.0-05205-g77fadd89fe2d-dirty #213 Tainted: G W

[ 82.890906] --------------------------------------------

[ 82.890906] ping/418 is trying to acquire lock:

[ 82.890906] ffff888006994110 (&sch->q.lock){+.-.}-{3:3}, at:

__dev_queue_xmit+0x1778/0x3550

[ 82.890906]

[ 82.890906] but task is already holding lock:

[ 82.890906] ffff888006994110 (&sch->q.lock){+.-.}-{3:3}, at:

__dev_queue_xmit+0x1778/0x3550

[ 82.890906]

[ 82.890906] other info that might help us debug this:

[ 82.890906] Possible unsafe locking scenario:

[ 82.890906]

[ 82.890906] CPU0

[ 82.890906] ----

[ 82.890906] lock(&sch->q.lock);

[ 82.890906] lock(&sch->q.lock);

[ 82.890906]

[ 82.890906] *** DEADLOCK ***

[ 82.890906]

[..... other info removed for brevity....]

Example setup (eth0->eth0) to recreate

tc qdisc add dev eth0 root handle 1: htb default 30

tc filter add dev eth0 handle 1: protocol ip prio 2 matchall \

action mirred egress redirect dev eth0

Another example(eth0->eth1->eth0) to recreate

tc qdisc add dev eth0 root handle 1: htb default 30

tc filter add dev eth0 handle 1: protocol ip prio 2 matchall \

action mirred egress redirect dev eth1

tc qdisc add dev eth1 root handle 1: htb default 30

tc filter add dev eth1 handle 1: protocol ip prio 2 matchall \

action mirred egress redirect dev eth0

We fix this by adding an owner field (CPU id) to struct Qdisc set after

root qdisc is entered. When the softirq enters it a second time, if the

qdisc owner is the same CPU, the packet is dropped to break the loop.

The record
Technical detail
CVSS v3.1
5.5 · MEDIUM
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00176 · 6.8th percentile
Weakness
CWE-667 · Improper Locking
Published
2024-05-01T10:15Z
Affected products (5)
ProductVersionsFixed in
linux/linux_kernel≥ 4.2, < 6.8.86.8.8
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (8)
EPSS history
Timeline
  • 01 MAY 05:29Z
    net/sched: Fix mirred deadlock on device recursion
    cvelistv5