Commit e18f3486 authored by Victor Nogueira's avatar Victor Nogueira Committed by Jakub Kicinski
Browse files

selftests/tc-testing: Create test cases for adding qdiscs to invalid qdisc parents

As described in a previous commit [1], Lion's patch [2] revealed an ancient
bug in the qdisc API. Whenever a user tries to add a qdisc to an
invalid parent (not a class, root, or ingress qdisc), the qdisc API will
detect this after qdisc_create is called. Some qdiscs (like fq_codel, pie,
and sfq) call functions (on their init callback) which assume the parent is
valid, so qdisc_create itself may have caused a NULL pointer dereference in
such cases.

This commit creates 3 TDC tests that attempt to add fq_codel, pie and sfq
qdiscs to invalid parents

- Attempts to add an fq_codel qdisc to an hhf qdisc parent
- Attempts to add a pie qdisc to a drr qdisc parent
- Attempts to add an sfq qdisc to an inexistent hfsc classid (which would
  belong to a valid hfsc qdisc)

[1] https://lore.kernel.org/all/20250707210801.372995-1-victor@mojatatu.com/
[2] https://lore.kernel.org/netdev/d912cbd7-193b-4269-9857-525bee8bbb6a@gmail.com/



Signed-off-by: default avatarVictor Nogueira <victor@mojatatu.com>
Link: https://patch.msgid.link/20250712145035.705156-1-victor@mojatatu.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 60ada4fe
Loading
Loading
Loading
Loading
+66 −0
Original line number Diff line number Diff line
@@ -672,5 +672,71 @@
        "teardown": [
            "$TC qdisc del dev $DUMMY root handle 1: drr"
        ]
    },
    {
        "id": "be28",
        "name": "Try to add fq_codel qdisc as a child of an hhf qdisc",
        "category": [
            "qdisc",
            "fq_codel",
            "hhf"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$TC qdisc add dev $DUMMY root handle a: hhf"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: fq_codel",
        "expExitCode": "2",
        "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
        "matchJSON": [],
        "teardown": [
            "$TC qdisc del dev $DUMMY root"
        ]
    },
    {
        "id": "fcb5",
        "name": "Try to add pie qdisc as a child of a drr qdisc",
        "category": [
            "qdisc",
            "pie",
            "drr"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$TC qdisc add dev $DUMMY root handle a: drr"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a: handle b: pie",
        "expExitCode": "2",
        "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
        "matchJSON": [],
        "teardown": [
            "$TC qdisc del dev $DUMMY root"
        ]
    },
    {
        "id": "7801",
        "name": "Try to add fq qdisc as a child of an inexistent hfsc class",
        "category": [
            "qdisc",
            "sfq",
            "hfsc"
        ],
        "plugins": {
            "requires": "nsPlugin"
        },
        "setup": [
            "$TC qdisc add dev $DUMMY root handle a: hfsc"
        ],
        "cmdUnderTest": "$TC qdisc add dev $DUMMY parent a:fff2 sfq limit 4",
        "expExitCode": "2",
        "verifyCmd": "$TC -j qdisc ls dev $DUMMY handle b:",
        "matchJSON": [],
        "teardown": [
            "$TC qdisc del dev $DUMMY root"
        ]
    }
]