mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-19 20:13:49 -04:00
if sch_fq is configured with "initial quantum" having values greater than
INT_MAX, the first assignment of "credit" does signed integer overflow to
a very negative value.
In this situation, the syzkaller script provided by Cristoph triggers the
CPU soft-lockup warning even with few sockets. It's not an infinite loop,
but "credit" wasn't probably meant to be minus 2Gb for each new flow.
Capping "initial quantum" to INT_MAX proved to fix the issue.
v2: validation of "initial quantum" is done in fq_policy, instead of open
coding in fq_change() _ suggested by Jakub Kicinski
Reported-by: Christoph Paasch <cpaasch@apple.com>
Link: https://github.com/multipath-tcp/mptcp_net-next/issues/377
Fixes: afe4fd0624 ("pkt_sched: fq: Fair Queue packet scheduler")
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Davide Caratti <dcaratti@redhat.com>
Link: https://lore.kernel.org/r/7b3a3c7e36d03068707a021760a194a8eb5ad41a.1682002300.git.dcaratti@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
418 lines
13 KiB
JSON
418 lines
13 KiB
JSON
[
|
|
{
|
|
"id": "983b",
|
|
"name": "Create FQ with default setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "38a1",
|
|
"name": "Create FQ with limit packet setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq limit 3000",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 3000p",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "0a18",
|
|
"name": "Create FQ with flow_limit setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq flow_limit 300",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 300p",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "2390",
|
|
"name": "Create FQ with quantum setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq quantum 9000",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p buckets.*orphan_mask 1023 quantum 9000b",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "845b",
|
|
"name": "Create FQ with initial_quantum setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq initial_quantum 900000",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p buckets.*initial_quantum 900000b",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "10f7",
|
|
"name": "Create FQ with invalid initial_quantum setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq initial_quantum 0x80000000",
|
|
"expExitCode": "2",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root.*initial_quantum 2048Mb",
|
|
"matchCount": "0",
|
|
"teardown": [
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "9398",
|
|
"name": "Create FQ with maxrate setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq maxrate 100000",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p buckets.*maxrate 100Kbit",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "342c",
|
|
"name": "Create FQ with nopacing setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq nopacing",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p.*nopacing",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "6391",
|
|
"name": "Create FQ with refill_delay setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq refill_delay 100ms",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p.*refill_delay 100ms",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "238b",
|
|
"name": "Create FQ with low_rate_threshold setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq low_rate_threshold 10000",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p.*low_rate_threshold 10Kbit",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "7582",
|
|
"name": "Create FQ with orphan_mask setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq orphan_mask 255",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p.*orphan_mask 255",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "4894",
|
|
"name": "Create FQ with timer_slack setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq timer_slack 100",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p.*timer_slack 100ns",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "324c",
|
|
"name": "Create FQ with ce_threshold setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq ce_threshold 100",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "424a",
|
|
"name": "Create FQ with horizon time setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq horizon 100",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p.*horizon 100us",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "89e1",
|
|
"name": "Create FQ with horizon_cap setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root fq horizon_cap",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p flow_limit 100p.*horizon_cap",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "32e1",
|
|
"name": "Delete FQ with valid handle",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true",
|
|
"$TC qdisc add dev $DUMMY handle 1: root fq"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc del dev $DUMMY handle 1: root",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 10000p",
|
|
"matchCount": "0",
|
|
"teardown": [
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "49b0",
|
|
"name": "Replace FQ with limit setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true",
|
|
"$TC qdisc add dev $DUMMY handle 1: root fq"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc replace dev $DUMMY handle 1: root fq limit 5000",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 5000p",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
},
|
|
{
|
|
"id": "9478",
|
|
"name": "Change FQ with limit setting",
|
|
"category": [
|
|
"qdisc",
|
|
"fq"
|
|
],
|
|
"plugins": {
|
|
"requires": "nsPlugin"
|
|
},
|
|
"setup": [
|
|
"$IP link add dev $DUMMY type dummy || /bin/true",
|
|
"$TC qdisc add dev $DUMMY handle 1: root fq"
|
|
],
|
|
"cmdUnderTest": "$TC qdisc change dev $DUMMY handle 1: root fq limit 100",
|
|
"expExitCode": "0",
|
|
"verifyCmd": "$TC qdisc show dev $DUMMY",
|
|
"matchPattern": "qdisc fq 1: root refcnt [0-9]+ limit 100p",
|
|
"matchCount": "1",
|
|
"teardown": [
|
|
"$TC qdisc del dev $DUMMY handle 1: root",
|
|
"$IP link del dev $DUMMY type dummy"
|
|
]
|
|
}
|
|
]
|