Skip to content

Commit a6e1c5a

Browse files
vbnogueirakuba-moo
authored andcommitted
selftests: tc-testing: Add TDC tests that exercise reentrant enqueue behaviour
Add 5 TDC tests that exercise the reentrant enqueue behaviour in drr, ets, qfq, and hfsc: - Test DRR's enqueue reentrant behaviour with netem (which caused a double list add) - Test ETS's enqueue reentrant behaviour with netem (which caused a double list add) - Test QFQ's enqueue reentrant behaviour with netem (which caused a double list add) - Test HFSC's enqueue reentrant behaviour with netem (which caused a UAF) - Test nested DRR's enqueue reentrant behaviour with netem (which caused a double list add) Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: Victor Nogueira <victor@mojatatu.com> Link: https://patch.msgid.link/20250425220710.3964791-6-victor@mojatatu.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent f139f37 commit a6e1c5a

File tree

1 file changed

+186
-0
lines changed
  • tools/testing/selftests/tc-testing/tc-tests/infra

1 file changed

+186
-0
lines changed

tools/testing/selftests/tc-testing/tc-tests/infra/qdiscs.json

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,5 +352,191 @@
352352
"$TC qdisc del dev $DUMMY handle 1:0 root",
353353
"$IP addr del 10.10.10.10/24 dev $DUMMY || true"
354354
]
355+
},
356+
{
357+
"id": "90ec",
358+
"name": "Test DRR's enqueue reentrant behaviour with netem",
359+
"category": [
360+
"qdisc",
361+
"drr"
362+
],
363+
"plugins": {
364+
"requires": "nsPlugin"
365+
},
366+
"setup": [
367+
"$IP link set dev $DUMMY up || true",
368+
"$IP addr add 10.10.10.10/24 dev $DUMMY || true",
369+
"$TC qdisc add dev $DUMMY handle 1:0 root drr",
370+
"$TC class replace dev $DUMMY parent 1:0 classid 1:1 drr",
371+
"$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
372+
"$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
373+
],
374+
"cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
375+
"expExitCode": "0",
376+
"verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
377+
"matchJSON": [
378+
{
379+
"kind": "drr",
380+
"handle": "1:",
381+
"bytes": 196,
382+
"packets": 2
383+
}
384+
],
385+
"matchCount": "1",
386+
"teardown": [
387+
"$TC qdisc del dev $DUMMY handle 1:0 root",
388+
"$IP addr del 10.10.10.10/24 dev $DUMMY || true"
389+
]
390+
},
391+
{
392+
"id": "1f1f",
393+
"name": "Test ETS's enqueue reentrant behaviour with netem",
394+
"category": [
395+
"qdisc",
396+
"ets"
397+
],
398+
"plugins": {
399+
"requires": "nsPlugin"
400+
},
401+
"setup": [
402+
"$IP link set dev $DUMMY up || true",
403+
"$IP addr add 10.10.10.10/24 dev $DUMMY || true",
404+
"$TC qdisc add dev $DUMMY handle 1:0 root ets bands 2",
405+
"$TC class replace dev $DUMMY parent 1:0 classid 1:1 ets quantum 1500",
406+
"$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
407+
"$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
408+
],
409+
"cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
410+
"expExitCode": "0",
411+
"verifyCmd": "$TC -j -s class show dev $DUMMY",
412+
"matchJSON": [
413+
{
414+
"class": "ets",
415+
"handle": "1:1",
416+
"stats": {
417+
"bytes": 196,
418+
"packets": 2
419+
}
420+
}
421+
],
422+
"matchCount": "1",
423+
"teardown": [
424+
"$TC qdisc del dev $DUMMY handle 1:0 root",
425+
"$IP addr del 10.10.10.10/24 dev $DUMMY || true"
426+
]
427+
},
428+
{
429+
"id": "5e6d",
430+
"name": "Test QFQ's enqueue reentrant behaviour with netem",
431+
"category": [
432+
"qdisc",
433+
"qfq"
434+
],
435+
"plugins": {
436+
"requires": "nsPlugin"
437+
},
438+
"setup": [
439+
"$IP link set dev $DUMMY up || true",
440+
"$IP addr add 10.10.10.10/24 dev $DUMMY || true",
441+
"$TC qdisc add dev $DUMMY handle 1:0 root qfq",
442+
"$TC class replace dev $DUMMY parent 1:0 classid 1:1 qfq weight 100 maxpkt 1500",
443+
"$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
444+
"$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1"
445+
],
446+
"cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
447+
"expExitCode": "0",
448+
"verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
449+
"matchJSON": [
450+
{
451+
"kind": "qfq",
452+
"handle": "1:",
453+
"bytes": 196,
454+
"packets": 2
455+
}
456+
],
457+
"matchCount": "1",
458+
"teardown": [
459+
"$TC qdisc del dev $DUMMY handle 1:0 root",
460+
"$IP addr del 10.10.10.10/24 dev $DUMMY || true"
461+
]
462+
},
463+
{
464+
"id": "bf1d",
465+
"name": "Test HFSC's enqueue reentrant behaviour with netem",
466+
"category": [
467+
"qdisc",
468+
"hfsc"
469+
],
470+
"plugins": {
471+
"requires": "nsPlugin"
472+
},
473+
"setup": [
474+
"$IP link set dev $DUMMY up || true",
475+
"$IP addr add 10.10.10.10/24 dev $DUMMY || true",
476+
"$TC qdisc add dev $DUMMY handle 1:0 root hfsc",
477+
"$TC class add dev $DUMMY parent 1:0 classid 1:1 hfsc ls m2 10Mbit",
478+
"$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%",
479+
"$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip dst 10.10.10.1/32 flowid 1:1",
480+
"$TC class add dev $DUMMY parent 1:0 classid 1:2 hfsc ls m2 10Mbit",
481+
"$TC qdisc add dev $DUMMY parent 1:2 handle 3:0 netem duplicate 100%",
482+
"$TC filter add dev $DUMMY parent 1:0 protocol ip prio 2 u32 match ip dst 10.10.10.2/32 flowid 1:2",
483+
"ping -c 1 10.10.10.1 -I$DUMMY > /dev/null || true",
484+
"$TC filter del dev $DUMMY parent 1:0 protocol ip prio 1",
485+
"$TC class del dev $DUMMY classid 1:1"
486+
],
487+
"cmdUnderTest": "ping -c 1 10.10.10.2 -I$DUMMY > /dev/null || true",
488+
"expExitCode": "0",
489+
"verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
490+
"matchJSON": [
491+
{
492+
"kind": "hfsc",
493+
"handle": "1:",
494+
"bytes": 392,
495+
"packets": 4
496+
}
497+
],
498+
"matchCount": "1",
499+
"teardown": [
500+
"$TC qdisc del dev $DUMMY handle 1:0 root",
501+
"$IP addr del 10.10.10.10/24 dev $DUMMY || true"
502+
]
503+
},
504+
{
505+
"id": "7c3b",
506+
"name": "Test nested DRR's enqueue reentrant behaviour with netem",
507+
"category": [
508+
"qdisc",
509+
"drr"
510+
],
511+
"plugins": {
512+
"requires": "nsPlugin"
513+
},
514+
"setup": [
515+
"$IP link set dev $DUMMY up || true",
516+
"$IP addr add 10.10.10.10/24 dev $DUMMY || true",
517+
"$TC qdisc add dev $DUMMY handle 1:0 root drr",
518+
"$TC class add dev $DUMMY parent 1:0 classid 1:1 drr",
519+
"$TC filter add dev $DUMMY parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:1",
520+
"$TC qdisc add dev $DUMMY handle 2:0 parent 1:1 drr",
521+
"$TC class add dev $DUMMY classid 2:1 parent 2:0 drr",
522+
"$TC filter add dev $DUMMY parent 2:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 2:1",
523+
"$TC qdisc add dev $DUMMY parent 2:1 handle 3:0 netem duplicate 100%"
524+
],
525+
"cmdUnderTest": "ping -c 1 -I $DUMMY 10.10.10.1 > /dev/null || true",
526+
"expExitCode": "0",
527+
"verifyCmd": "$TC -j -s qdisc ls dev $DUMMY handle 1:0",
528+
"matchJSON": [
529+
{
530+
"kind": "drr",
531+
"handle": "1:",
532+
"bytes": 196,
533+
"packets": 2
534+
}
535+
],
536+
"matchCount": "1",
537+
"teardown": [
538+
"$TC qdisc del dev $DUMMY handle 1:0 root",
539+
"$IP addr del 10.10.10.10/24 dev $DUMMY || true"
540+
]
355541
}
356542
]

0 commit comments

Comments
 (0)