In the Linux kernel, the following vulnerability has been resolved:
net/sched: taprio: extend minimum interval restriction to entire cycle too
It is possible for syzbot to side-step the restriction imposed by the
blamed commit in the Fixes: tag, because the taprio UAPI permits a
cycle-time different from (and potentially shorter than) the sum of
entry intervals.
We need one more restriction, which is that the cycle time itself must
be larger than N * ETH_ZLEN bit times, where N is the number of schedule
entries. This restriction needs to apply regardless of whether the cycle
time came from the user or was the implicit, auto-calculated value, so
we move the existing “cycle == 0” check outside the "if “(!new->cycle_time)”
branch. This way covers both conditions and scenarios.
Add a selftest which illustrates the issue triggered by syzbot.
[
{
"product": "Linux",
"vendor": "Linux",
"defaultStatus": "unaffected",
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"programFiles": [
"net/sched/sch_taprio.c",
"tools/testing/selftests/tc-testing/tc-tests/qdiscs/taprio.json"
],
"versions": [
{
"version": "b5b73b26b3ca",
"lessThan": "b939d1e04a90",
"status": "affected",
"versionType": "git"
},
{
"version": "b5b73b26b3ca",
"lessThan": "91f249b01fe4",
"status": "affected",
"versionType": "git"
},
{
"version": "b5b73b26b3ca",
"lessThan": "fb66df20a720",
"status": "affected",
"versionType": "git"
}
]
},
{
"product": "Linux",
"vendor": "Linux",
"defaultStatus": "affected",
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"programFiles": [
"net/sched/sch_taprio.c",
"tools/testing/selftests/tc-testing/tc-tests/qdiscs/taprio.json"
],
"versions": [
{
"version": "5.9",
"status": "affected"
},
{
"version": "0",
"lessThan": "5.9",
"status": "unaffected",
"versionType": "custom"
},
{
"version": "6.6.33",
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"versionType": "custom"
},
{
"version": "6.9.4",
"lessThanOrEqual": "6.9.*",
"status": "unaffected",
"versionType": "custom"
},
{
"version": "6.10-rc2",
"lessThanOrEqual": "*",
"status": "unaffected",
"versionType": "original_commit_for_fix"
}
]
}
]