selftests/tc-testing: add u32 manual table handle IDR tests

35fc: create a manual table with handle 801:, then add an auto-allocated
table. Before the fix, the auto allocation reuses id 1 and hands out the
same handle 0x80100000, aliasing the manual table; the test requires the
manual 801: handle to keep exactly one entry in the dump.

a6e8: with a live u32 table keeping the tc_u_common alive, add and delete
a manual table with handle 901:, then re-add it. Unpatched, the delete
leaks the raw-keyed IDR entry and the re-add fails with -ENOSPC; the
test requires the re-add to succeed.

Reviewed-by: Victor Nogueira <victor@mojatatu.com>
Tested-by: hybris <hybris@mojatatu.ai>
Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/QDISC-LQFE.v1.20260911041746.2@mojatatu.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Jamal Hadi Salim 2026-09-16 06:01:15 -04:00 committed by Jakub Kicinski
parent 0a5f5d9e94
commit 960ab631f3

View File

@ -376,5 +376,53 @@
"teardown": [
"$TC qdisc del dev $DUMMY clsact"
]
},
{
"id": "35fc",
"name": "u32 manual table then auto table: auto allocation must not alias a live manual handle",
"category": [
"filter",
"u32"
],
"plugins": {
"requires": "nsPlugin"
},
"setup": [
"$TC qdisc add dev $DEV1 ingress",
"$TC filter add dev $DEV1 ingress protocol ip pref 1 handle 801: u32 divisor 16"
],
"cmdUnderTest": "$TC filter add dev $DEV1 ingress protocol ip pref 2 u32 divisor 16",
"expExitCode": "0",
"verifyCmd": "$TC -d filter show dev $DEV1 ingress",
"matchPattern": "fh 801:",
"matchCount": "1",
"teardown": [
"$TC qdisc del dev $DEV1 ingress"
]
},
{
"id": "a6e8",
"name": "u32 manual table add/del does not leak its idr entry (re-adding the same handle succeeds)",
"category": [
"filter",
"u32"
],
"plugins": {
"requires": "nsPlugin"
},
"setup": [
"$TC qdisc add dev $DEV1 ingress",
"$TC filter add dev $DEV1 ingress protocol ip pref 1 u32 divisor 16",
"$TC filter add dev $DEV1 ingress protocol ip pref 5 handle 901: u32 divisor 1",
"$TC filter del dev $DEV1 ingress protocol ip pref 5 handle 901: u32"
],
"cmdUnderTest": "$TC filter add dev $DEV1 ingress protocol ip pref 6 handle 901: u32 divisor 1",
"expExitCode": "0",
"verifyCmd": "$TC -d filter show dev $DEV1 ingress",
"matchPattern": "fh 901: ht divisor 1",
"matchCount": "1",
"teardown": [
"$TC qdisc del dev $DEV1 ingress"
]
}
]