From nobody Sat Oct 3 12:04:07 2026 Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A29503090E2 for ; Sat, 1 Aug 2026 13:42:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785591780; cv=none; b=XFotPuWnLKOQyt6nBlzkOj2G+RhkcZIlDIBWYmhbMgQyxAOlvSLI0DdW8s2I+uLXsX7fEy+Ofc2tBa8L+W7rGtSkpaVEeS9ZLxHTrOISLE2DyJI6QTajBDg7PXgbRQwQxbYbJ8antebRoLm7U6OkEbqIILy3AXSLMNBICoAlXe0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785591780; c=relaxed/simple; bh=7oZpUAI64myintFN5P3mwkl+kh7M5jFwqp1ttfu5Aas=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SMkktrquU9pByxsZe25l9tY88J9taZtLVgz2JzHPZPShPH2Uq86W04oqjkYPIpRVYQwWyXt5dG8bk7z2OlMhRvfJ/RJ0QswHaRqsC4r4T1v1MWe8jk2S/aMcuCWVc70Fb8mn/MoppCYurF+6I3+hYfduek4azinjfdXiZI25Zks= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dWpjD7HN; arc=none smtp.client-ip=209.85.215.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dWpjD7HN" Received: by mail-pg1-f174.google.com with SMTP id 41be03b00d2f7-ca7c1176317so1714516a12.1 for ; Sat, 01 Aug 2026 06:42:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785591778; x=1786196578; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=jtGDI9BCziEtTlla0MY6NVjGHkp8vq0UbFBjp9Cujkk=; b=dWpjD7HNEUS3q0o+pKmD79/04YOGK9ebHoZXUjasDJSpgpQM1BkoMCuSsAMGE2nI/R rHlLE8XIo45hjEZZi85226sCnLwtW994EwTrFiwo1+L8z/oZlMI/KPM+hokBqOSFjzyV svvfennsuKReqPsmKZwGk/5i9dD0kbCAMGbbcMuOLx+E/cV8BIa0UwzoxARHE5qu+2z3 HWk71kVKIkihGoGjYV+DvkvnjG7PvtJSKphcO2ae71W6JX8crMeSEA+9GGcHYsgccc+9 sKI7N3geCA1YfLj3boAQvlSwopAf7p658lYFqcUPCJ9m/5N1sxQmb4bADSQALydIX/kP QU8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785591778; x=1786196578; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=jtGDI9BCziEtTlla0MY6NVjGHkp8vq0UbFBjp9Cujkk=; b=oWVbm6iS6DWQFhcqYozEmVjAy6bgwgCHt0uQvfTZ4aLnQ4Zx9LXGsWbRd7/DiRIAO2 cB2MmTC0R3UBGNR049eqKRaZF3XfrzRpLv7mSUvyb9sA/uqVOGy9WH5SVcyQZNjAH73X DOsCri6xAAHb/yKam4tV5xx2iij32KKAUa5iZVc4OV6iK7A0s0/UD3CEwx9VIYAg/WvN 5c9YMUQIwTYhHZHwoSftFemKqPi4Ih0Esx4jf0y+UxyXRadSHsAQkCJjkvmyK29vDgb+ SCEljdUhLDa6c15TSjZP2BiIytUFbeTVs/ZSSlZWYTneNdpEu4HLCUG1wvpBGleMot4e oJog== X-Forwarded-Encrypted: i=1; AHgh+RobmRY0xY7XfDdqh5X9DhoL9HlhKPDx4LCVl88eDIDOBIfefneZgEuMw3FTYSwmutOvETBgMrGD2aE3HZA=@vger.kernel.org X-Gm-Message-State: AOJu0YyHZ0ex5NwO9B5/fyGY9LcL6In9V1DPrphJLm6JvKHjQsxDDOVi Auk8GpOmvy+yPrjDiRaRruC+z4BMm7NZWDO8FkqxuPx0Q5toKfZOjjAz X-Gm-Gg: AR+sD13tHugbjNRbJKUob670b1uFEIlmXAPJVAGFLhDehMmsYsjDoKMLYZ+UsBUOjOK MEFq9rT7wqHNgHjBkIs4qgsCi03h8cD+CuiEbN/PljIsfPToU0aEiVAas2oJW2CA81yWtBfgM5Q ZR6CP9r/QJb+aZ0S6ryXItch4XL1H7cibGuBH76GmPx0ZUMHFpVXVXi66lVpN4sRKCFpKs390dr IgN3YhGVfaZWsUIMgkrLrTcOxDsWFYEiKCeUBtdwMUmRbhTCFSQNGUpKCG6yK7X+TDc6JTEpDLl ON7kKqyBD/CDZqY1ycgn5qKhWzuRwfsAurZRC4a41+9wmdV5W0O+/iBgoC+aO49KXADQ/UgQwIL ANAjiN2OZIcnZfzaSbAmYxtEpDl5FMtBSpUwmtQWFkb0V6zKjfd93V9YP1Ju62ipN+WGWFyS+9Q p5mw9H+Peji4jBHLp5+oi8DUvicsFt9/aokR9xUE9+tiboiMfw4kUPFny4u/q7tDFohNG69myOY 7Vf X-Received: by 2002:a05:6a21:510:b0:398:7ed3:a001 with SMTP id adf61e73a8af0-3c92a543d1dmr3175828637.2.1785591777858; Sat, 01 Aug 2026 06:42:57 -0700 (PDT) Received: from enjou-Legion-Y7000P-2019 ([165.232.167.5]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3153dd4e5b0sm16077652eec.1.2026.08.01.06.42.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 01 Aug 2026 06:42:57 -0700 (PDT) From: Ren Wei 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 1/2] net/sched: reject overly deep qdisc hierarchies Date: Sat, 1 Aug 2026 21:42:33 +0800 Message-ID: <1e9ab39597423fd5d13cfaaf52279b8ee3d9fc3c.1785434373.git.milkory@outlook.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Zijie Huang Deep qdisc hierarchies can lead to excessive recursion in qdisc tree walkers and exhaust the kernel stack. The existing loop check does not cover the create-and-graft path, so a hierarchy can still be extended by creating a new child qdisc below an already deep parent. Store the hierarchy depth in struct Qdisc and update it when qdiscs are grafted. Reject new child qdiscs once the parent is already at the maximum allowed depth. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Cc: stable@vger.kernel.org Reported-by: Vega Assisted-by: Codex:gpt-5.4 Signed-off-by: Zijie Huang Signed-off-by: Ren Wei Acked-by: Jamal Hadi Salim Reviewed-by: Victor Nogueira --- changes in v2: - Store the qdisc hierarchy depth in struct Qdisc and update it from qdisc_graft(), instead of walking the parent chain. - Move the depth check to qdisc_graft() so it is applied at the actual attach point. - Add tdc tests for the maximum allowed depth and rejection above it. - v1 Link: https://lore.kernel.org/all/cover.1785304107.git.milkory@outlo= ok.com/ include/net/sch_generic.h | 1 + net/sched/sch_api.c | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index 45a1e8c78222..cbc248776511 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -99,6 +99,7 @@ struct Qdisc { struct hlist_node hash; u32 handle; u32 parent; + int depth; =20 struct netdev_queue *dev_queue; =20 diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index 668bcd60d183..65b35528d125 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c @@ -1114,6 +1114,9 @@ static int qdisc_graft(struct net_device *dev, struct= Qdisc *parent, unsigned int i, num_q, ingress; struct netdev_queue *dev_queue; =20 + if (new) + new->depth =3D 0; + ingress =3D 0; num_q =3D dev->num_tx_queues; if ((q && q->flags & TCQ_F_INGRESS) || @@ -1211,9 +1214,15 @@ static int qdisc_graft(struct net_device *dev, struc= t Qdisc *parent, NL_SET_ERR_MSG(extack, "STAB not supported on a non root"); return -EINVAL; } + if (new && parent->depth >=3D 7) { + NL_SET_ERR_MSG(extack, "Qdisc hierarchy is too deep"); + return -E2BIG; + } err =3D cops->graft(parent, cl, new, &old, extack); if (err) return err; + if (new) + new->depth =3D parent->depth + 1; notify_and_destroy(net, skb, n, classid, old, new, extack); } return 0; --=20 2.47.2 From nobody Sat Oct 3 12:04:07 2026 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D87C1305670 for ; Sat, 1 Aug 2026 13:43:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785591787; cv=none; b=oIrZYyydZpm1X4q2J7CiphR2J6L3ytUP94ubz0KCNfmxJ6HdNeqRY5lm/nODbWyuEOzt9UsjzoMnrqLfQ4a3GwH+PIY4tehmM15iU3YMvHod+fSs73HR7ArKY8lyNE7bXo3RCXbWxFNnbSPIa6/6ViQG/4prnB/MUgawqvnN1UM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785591787; c=relaxed/simple; bh=pb8bhPoTH0rHkw3kmuOdle1bI2sKEr+SbI9ru9+uM84=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DXJE8S7e5HXiihLYxVT8CPEdz0CRaZJs7I+2vLr22lbNTp5ogWQm3Q2m8Z6IiJaW69CM7ZTaV1WD38bM0Fh6H/P0UaUsyimwXOKyeeuSpF4G5lEwtJQrA2sE2VTeI5BD6Yo5kILJPxTWyRFm8BeVc7ZdaRKVyQ25uliH6x5zwCY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=By8o/p3M; arc=none smtp.client-ip=209.85.210.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="By8o/p3M" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-84eb992a881so1709074b3a.2 for ; Sat, 01 Aug 2026 06:43:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785591785; x=1786196585; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=TqwX7lGfwVTZrv3NkOKGPL2b4D0FBuhrUgvXr3c+0ww=; b=By8o/p3Mx7rHNvlCav8tDoI7GD4W3IULH5tv8iOEVPAugRVJDTnMG3fTsu1Cz4NwDV Wvf/1ay+jZs8FukkoIiFPcme21HgNS+dX+ncpyxgdpz7R+plZkYDIYGj4XubiBvVqaSF COiUfxhrvwt1eeG1I54ssPQJ5weVJlFgNBDdjwhH57xpvYUveFmEC5AE1Sjyyf4RkQXv whMUZYrG3nCGnWor9YWn/JwMdsZ4h9vAkJjmBuN2bIk2OWmmjaIdwxQeQZZWHl8J91u7 ikP+CoPsK8tRBscLRWiiq65UMNlTZF38HoYT/AHVPN3QX4bt7hjjkRf62WaHvUZOi4y2 Oqxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785591785; x=1786196585; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=TqwX7lGfwVTZrv3NkOKGPL2b4D0FBuhrUgvXr3c+0ww=; b=N2/JIPy84An5qje2VIerOQ/0ioc5m31qecipgYO1xKUeV3pf0nUPAdRYU7prP+rAx8 ImHn3DOoxum8J1yw6Yg7TQ/MY63fiw7WWeKWZYYamthVme/wGLEHwEbuwA0JK+9xJWEm zUutPAMFmFFrHGsWzpDLN6FuzXZIae0thLJKEAO8B6k8n8ppyVcEv3F3XihkQuJAi48m 0d9ei1Z/0Yq6jCzE5jEZejIUrV906DwmkOaVEZ+/PP4PEjTiSHyI1H9R/RLS7FCJIVHy 6vqI5Ke49tgypIdPLz4jEa/yYZC2Wm9Gw6JihsDbF5Cn1D7w6bfXkR00P1dnHA1eckFe RlBw== X-Forwarded-Encrypted: i=1; AHgh+RqeaMsvxgqAMGM/SovwlIaeQ+R5yYRVVmhYMmDRxYxniL3BKreY0PVwarjPqujN9IdP0a9sx2SSnPLYQ04=@vger.kernel.org X-Gm-Message-State: AOJu0YwhM6u0sJiBofLCZhEV7Fsi76Ld3G3WaseA9dWdgi30GkP29gnR 7ON0md/xjXoGEx2Wmg0u3P7Mc74L3wjIyY2OR8HBSh37zwO69RRCHgQ5 X-Gm-Gg: AR+sD108jMRv2MYbmp/N1VCMrS7D+HL2xreyneC3SXz9BCjYZm4+hRDN6I/Dww8NAsF nC6Kvf+k+qOTM8dVzyciGkeT3FVIOS1qEvY6QiPbmx7RjRRyouBH0ku1SgsgAU9rza+TmoOVZVn 2lOEo/TN8dcOv3MRiXyjZ0Hs3CAlRQ8lI9HyzCUTsX6v0vQFaeu1rDJEK4MHYixgB1nKTZ3gn6H 1e2WfF8+KYnvxhfDc2PCvEdX41o9ksK04yAKIpGaMnOjI+juwJx98GMKMgiR/okGaASbD410yzQ iBfzxtZ4oyJozEul1/hkmjauB/mDWeMN2L9N//fC0PwcXqCAeTFBZa6ymfzndzlnagij2Tc2gUb SY35qDt4vIkdNIutRL8PsGHNm4zE4JAm0Zc8+0P47vk0xtJwau1J149vu9OBid4yyBr00NGe6Ky ZCG9/RHcO/C5s95ZIi+vk4i0VwpJ2fuSa4fWJ8sCVISfabJ5y5QR+oxSMEp+2pJicATC4PxOYGS cyA X-Received: by 2002:a05:6a21:10d:b0:3c3:954d:279a with SMTP id adf61e73a8af0-3c92a85c84dmr3413623637.33.1785591785010; Sat, 01 Aug 2026 06:43:05 -0700 (PDT) Received: from enjou-Legion-Y7000P-2019 ([165.232.167.5]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3153dd4e5b0sm16077652eec.1.2026.08.01.06.42.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 01 Aug 2026 06:43:04 -0700 (PDT) From: Ren Wei 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 2/2] selftests/tc-testing: add qdisc hierarchy depth tests Date: Sat, 1 Aug 2026 21:42:34 +0800 Message-ID: <5cc2d26a7c8e553759cdd29a3116f843fabc25ba.1785434373.git.milkory@outlook.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Zijie Huang Add tdc coverage for the qdisc hierarchy depth limit. The tests verify that the deepest allowed hierarchy can still be created and that adding another child qdisc below it is rejected. Signed-off-by: Zijie Huang Assisted-by: Codex:gpt-5.4 Signed-off-by: Ren Wei Acked-by: Jamal Hadi Salim Reviewed-by: Victor Nogueira --- .../tc-testing/tc-tests/qdiscs/depth.json | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 tools/testing/selftests/tc-testing/tc-tests/qdiscs/dept= h.json diff --git a/tools/testing/selftests/tc-testing/tc-tests/qdiscs/depth.json = b/tools/testing/selftests/tc-testing/tc-tests/qdiscs/depth.json new file mode 100644 index 000000000000..48f8683f0d1a --- /dev/null +++ b/tools/testing/selftests/tc-testing/tc-tests/qdiscs/depth.json @@ -0,0 +1,74 @@ +[ + { + "id": "ad43", + "name": "Create qdisc hierarchy at maximum depth", + "category": [ + "qdisc", + "depth" + ], + "plugins": { + "requires": "nsPlugin" + }, + "setup": [ + "$TC qdisc add dev $DUMMY root handle 1: htb default 1", + "$TC class add dev $DUMMY parent 1: classid 1:1 htb rate 10mbi= t", + "$TC qdisc add dev $DUMMY parent 1:1 handle 2: htb default 1", + "$TC class add dev $DUMMY parent 2: classid 2:1 htb rate 10mbi= t", + "$TC qdisc add dev $DUMMY parent 2:1 handle 3: htb default 1", + "$TC class add dev $DUMMY parent 3: classid 3:1 htb rate 10mbi= t", + "$TC qdisc add dev $DUMMY parent 3:1 handle 4: htb default 1", + "$TC class add dev $DUMMY parent 4: classid 4:1 htb rate 10mbi= t", + "$TC qdisc add dev $DUMMY parent 4:1 handle 5: htb default 1", + "$TC class add dev $DUMMY parent 5: classid 5:1 htb rate 10mbi= t", + "$TC qdisc add dev $DUMMY parent 5:1 handle 6: htb default 1", + "$TC class add dev $DUMMY parent 6: classid 6:1 htb rate 10mbi= t", + "$TC qdisc add dev $DUMMY parent 6:1 handle 7: htb default 1", + "$TC class add dev $DUMMY parent 7: classid 7:1 htb rate 10mbi= t" + ], + "cmdUnderTest": "$TC qdisc add dev $DUMMY parent 7:1 handle 8: htb= default 1", + "expExitCode": "0", + "verifyCmd": "$TC qdisc show dev $DUMMY", + "matchPattern": "qdisc htb 8: parent 7:1", + "matchCount": "1", + "teardown": [ + "$TC qdisc del dev $DUMMY root" + ] + }, + { + "id": "c519", + "name": "Reject qdisc hierarchy above maximum depth", + "category": [ + "qdisc", + "depth" + ], + "plugins": { + "requires": "nsPlugin" + }, + "setup": [ + "$TC qdisc add dev $DUMMY root handle 1: htb default 1", + "$TC class add dev $DUMMY parent 1: classid 1:1 htb rate 10mbi= t", + "$TC qdisc add dev $DUMMY parent 1:1 handle 2: htb default 1", + "$TC class add dev $DUMMY parent 2: classid 2:1 htb rate 10mbi= t", + "$TC qdisc add dev $DUMMY parent 2:1 handle 3: htb default 1", + "$TC class add dev $DUMMY parent 3: classid 3:1 htb rate 10mbi= t", + "$TC qdisc add dev $DUMMY parent 3:1 handle 4: htb default 1", + "$TC class add dev $DUMMY parent 4: classid 4:1 htb rate 10mbi= t", + "$TC qdisc add dev $DUMMY parent 4:1 handle 5: htb default 1", + "$TC class add dev $DUMMY parent 5: classid 5:1 htb rate 10mbi= t", + "$TC qdisc add dev $DUMMY parent 5:1 handle 6: htb default 1", + "$TC class add dev $DUMMY parent 6: classid 6:1 htb rate 10mbi= t", + "$TC qdisc add dev $DUMMY parent 6:1 handle 7: htb default 1", + "$TC class add dev $DUMMY parent 7: classid 7:1 htb rate 10mbi= t", + "$TC qdisc add dev $DUMMY parent 7:1 handle 8: htb default 1", + "$TC class add dev $DUMMY parent 8: classid 8:1 htb rate 10mbi= t" + ], + "cmdUnderTest": "$TC qdisc add dev $DUMMY parent 8:1 handle 9: htb= default 1", + "expExitCode": "2", + "verifyCmd": "$TC qdisc show dev $DUMMY", + "matchPattern": "qdisc htb 9:", + "matchCount": "0", + "teardown": [ + "$TC qdisc del dev $DUMMY root" + ] + } +] --=20 2.47.2