Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

selftests/tc-testing: Add tests for restrictions on netem duplication

Ensure that a duplicating netem cannot exist in a tree with other netems
in both qdisc addition and change. This is meant to prevent the soft
lockup and OOM loop scenario discussed in [1]. Also adjust a HFSC's
re-entrancy test case with netem for this new restriction - KASAN
still triggers upon its failure.

[1] https://lore.kernel.org/netdev/8DuRWwfqjoRDLDmBMlIfbrsZg9Gx50DHJc1ilxsEBNe2D6NMoigR_eIRIG0LOjMc3r10nUUZtArXx4oZBIdUfZQrwjcQhdinnMis_0G7VEk=@willsroot.io/

Signed-off-by: William Liu <will@willsroot.io>
Reviewed-by: Savino Dicanosa <savy@syst3mfailure.io>
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
Link: https://patch.msgid.link/20250708164219.875521-1-will@willsroot.io
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

William Liu and committed by
Jakub Kicinski
ecdec65e ec8e0e3d

+83 -3
+2 -3
tools/testing/selftests/tc-testing/tc-tests/infra/qdiscs.json
··· 478 478 "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem duplicate 100%", 479 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 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 481 "$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 482 "ping -c 1 10.10.10.1 -I$DUMMY > /dev/null || true", 484 483 "$TC filter del dev $DUMMY parent 1:0 protocol ip prio 1", ··· 490 491 { 491 492 "kind": "hfsc", 492 493 "handle": "1:", 493 - "bytes": 392, 494 - "packets": 4 494 + "bytes": 294, 495 + "packets": 3 495 496 } 496 497 ], 497 498 "matchCount": "1",
+81
tools/testing/selftests/tc-testing/tc-tests/qdiscs/netem.json
··· 336 336 "teardown": [ 337 337 "$TC qdisc del dev $DUMMY handle 1: root" 338 338 ] 339 + }, 340 + { 341 + "id": "d34d", 342 + "name": "NETEM test qdisc duplication restriction in qdisc tree in netem_change root", 343 + "category": ["qdisc", "netem"], 344 + "plugins": { 345 + "requires": "nsPlugin" 346 + }, 347 + "setup": [ 348 + "$TC qdisc add dev $DUMMY root handle 1: netem limit 1", 349 + "$TC qdisc add dev $DUMMY parent 1: handle 2: netem limit 1" 350 + ], 351 + "cmdUnderTest": "$TC qdisc change dev $DUMMY handle 1: netem duplicate 50%", 352 + "expExitCode": "2", 353 + "verifyCmd": "$TC -s qdisc show dev $DUMMY", 354 + "matchPattern": "qdisc netem", 355 + "matchCount": "2", 356 + "teardown": [ 357 + "$TC qdisc del dev $DUMMY handle 1:0 root" 358 + ] 359 + }, 360 + { 361 + "id": "b33f", 362 + "name": "NETEM test qdisc duplication restriction in qdisc tree in netem_change non-root", 363 + "category": ["qdisc", "netem"], 364 + "plugins": { 365 + "requires": "nsPlugin" 366 + }, 367 + "setup": [ 368 + "$TC qdisc add dev $DUMMY root handle 1: netem limit 1", 369 + "$TC qdisc add dev $DUMMY parent 1: handle 2: netem limit 1" 370 + ], 371 + "cmdUnderTest": "$TC qdisc change dev $DUMMY handle 2: netem duplicate 50%", 372 + "expExitCode": "2", 373 + "verifyCmd": "$TC -s qdisc show dev $DUMMY", 374 + "matchPattern": "qdisc netem", 375 + "matchCount": "2", 376 + "teardown": [ 377 + "$TC qdisc del dev $DUMMY handle 1:0 root" 378 + ] 379 + }, 380 + { 381 + "id": "cafe", 382 + "name": "NETEM test qdisc duplication restriction in qdisc tree", 383 + "category": ["qdisc", "netem"], 384 + "plugins": { 385 + "requires": "nsPlugin" 386 + }, 387 + "setup": [ 388 + "$TC qdisc add dev $DUMMY root handle 1: netem limit 1 duplicate 100%" 389 + ], 390 + "cmdUnderTest": "$TC qdisc add dev $DUMMY parent 1: handle 2: netem duplicate 100%", 391 + "expExitCode": "2", 392 + "verifyCmd": "$TC -s qdisc show dev $DUMMY", 393 + "matchPattern": "qdisc netem", 394 + "matchCount": "1", 395 + "teardown": [ 396 + "$TC qdisc del dev $DUMMY handle 1:0 root" 397 + ] 398 + }, 399 + { 400 + "id": "1337", 401 + "name": "NETEM test qdisc duplication restriction in qdisc tree across branches", 402 + "category": ["qdisc", "netem"], 403 + "plugins": { 404 + "requires": "nsPlugin" 405 + }, 406 + "setup": [ 407 + "$TC qdisc add dev $DUMMY parent root handle 1:0 hfsc", 408 + "$TC class add dev $DUMMY parent 1:0 classid 1:1 hfsc rt m2 10Mbit", 409 + "$TC qdisc add dev $DUMMY parent 1:1 handle 2:0 netem", 410 + "$TC class add dev $DUMMY parent 1:0 classid 1:2 hfsc rt m2 10Mbit" 411 + ], 412 + "cmdUnderTest": "$TC qdisc add dev $DUMMY parent 1:2 handle 3:0 netem duplicate 100%", 413 + "expExitCode": "2", 414 + "verifyCmd": "$TC -s qdisc show dev $DUMMY", 415 + "matchPattern": "qdisc netem", 416 + "matchCount": "1", 417 + "teardown": [ 418 + "$TC qdisc del dev $DUMMY handle 1:0 root" 419 + ] 339 420 } 340 421 ]