sched_ext: Fix the bypass dispatch claim for schedulers bypassed by an ancestor
In the Linux kernel, the following vulnerability has been resolved: sched_ext: Fix the bypass dispatch claim for schedulers bypassed by an ancestor scx_bypass() claims bypass dispatch when the scheduler's depth goes from zero to one and releases it when the depth returns to zero, but propagates only the depth to the descendants, not the claim. A descendant that starts bypassing with its ancestor never claims, and one whose own bypass ends under the ancestor's keeps its claim, as its depth does not return to zero. A sub-scheduler enable whose bypass ends under a PM suspend thus leaks its claim: the parent keeps hosting bypass dispatch and the sub-scheduler's next bypass trips the WARN_ON_ONCE() on the claim. A sub-scheduler disable that starts under a PM suspend has no claim, so once the resume lifts the root's bypass its tasks sit on the parent's bypass DSQs with nobody consuming them. Claim for every descendant whose depth goes from zero to one in the propagation and release every scheduler in the subtree whose depth returned to zero once the tasks have moved out of the bypass DSQs. A parent that is bypassing itself when a descendant claims consumes only its own bypass DSQs, empty until it leaves bypass and becomes the host.
- Products
- Linux
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-99104
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 1 Nov 2026, 02:45 UTC · Revision 1
Source evidence
sched_ext: Fix the bypass dispatch claim for schedulers bypassed by an ancestor
core-cve · Original sourcePublished 28 Oct 2026, 10:34 UTC
In the Linux kernel, the following vulnerability has been resolved: sched_ext: Fix the bypass dispatch claim for schedulers bypassed by an ancestor scx_bypass() claims bypass dispatch when the scheduler's depth goes from zero to one and releases it when the depth returns to zero, but propagates only the depth to the descendants, not the claim. A descendant that starts bypassing with its ancestor never claims, and one whose own bypass ends under the ancestor's keeps its claim, as its depth does not return to zero. A sub-scheduler enable whose bypass ends under a PM suspend thus leaks its claim: the parent keeps hosting bypass dispatch and the sub-scheduler's next bypass trips the WARN_ON_ONCE() on the claim. A sub-scheduler disable that starts under a PM suspend has no claim, so once the resume lifts the root's bypass its tasks sit on the parent's bypass DSQs with nobody consuming them. Claim for every descendant whose depth goes from zero to one in the propagation and release every scheduler in the subtree whose depth returned to zero once the tasks have moved out of the bypass DSQs. A parent that is bypassing itself when a descendant claims consumes only its own bypass DSQs, empty until it leaves bypass and becomes the host.
cve:CVE-2026-99104
Linux
Fixed versions: Not specified
Linux
Fixed versions: Not specified
Complete source record
{
"id": "1a4b7f7bc8da773791e141a07aed5d7490ab69c552b621f2c6f5662dbf57f8e9",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-99104",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "sched_ext: Fix the bypass dispatch claim for schedulers bypassed by an ancestor",
"summary": "In the Linux kernel, the following vulnerability has been resolved: sched_ext: Fix the bypass dispatch claim for schedulers bypassed by an ancestor scx_bypass() claims bypass dispatch when the scheduler's depth goes from zero to one and releases it when the depth returns to zero, but propagates only the depth to the descendants, not the claim. A descendant that starts bypassing with its ancestor never claims, and one whose own bypass ends under the ancestor's keeps its claim, as its depth does not return to zero. A sub-scheduler enable whose bypass ends under a PM suspend thus leaks its claim: the parent keeps hosting bypass dispatch and the sub-scheduler's next bypass trips the WARN_ON_ONCE() on the claim. A sub-scheduler disable that starts under a PM suspend has no claim, so once the resume lifts the root's bypass its tasks sit on the parent's bypass DSQs with nobody consuming them. Claim for every descendant whose depth goes from zero to one in the propagation and release every scheduler in the subtree whose depth returned to zero once the tasks have moved out of the bypass DSQs. A parent that is bypassing itself when a descendant claims consumes only its own bypass DSQs, empty until it leaves bypass and becomes the host.",
"evidence": "cve:CVE-2026-99104",
"products": [
{
"name": {
"value": "Linux",
"evidence": "/containers/cna/affected/0/product"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": []
},
{
"name": {
"value": "Linux",
"evidence": "/containers/cna/affected/1/product"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": []
}
],
"severity": "unknown",
"structured": {
"id": "CVE-2026-99104",
"aliases": [
"CVE-2026-99104"
],
"metrics": [],
"affected": [
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "aa2a0a19686c90106ade6a7e848ffbb62d55d733",
"lessThan": "f0f18075e45d47bef7ff2eb9512ee4f0c7e5f9c7",
"versionType": "git"
},
{
"status": "affected",
"version": "aa2a0a19686c90106ade6a7e848ffbb62d55d733",
"lessThan": "5bdeca322a6f8d10acaf67cccab1f69747ee7be3",
"versionType": "git"
}
],
"programFiles": [
"kernel/sched/ext/ext.c"
],
"defaultStatus": "unaffected"
},
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "7.1"
},
{
"status": "unaffected",
"version": "0",
"lessThan": "7.1",
"versionType": "semver"
},
{
"status": "unaffected",
"version": "7.2.13",
"versionType": "semver",
"lessThanOrEqual": "7.2.*"
},
{
"status": "unaffected",
"version": "7.3",
"versionType": "original_commit_for_fix",
"lessThanOrEqual": "*"
}
],
"programFiles": [
"kernel/sched/ext/ext.c"
],
"defaultStatus": "affected"
}
],
"modified": "2026-10-28T10:34:23.729Z",
"provider": "cve",
"references": [
"https://git.kernel.org/stable/c/f0f18075e45d47bef7ff2eb9512ee4f0c7e5f9c7",
"https://git.kernel.org/stable/c/5bdeca322a6f8d10acaf67cccab1f69747ee7be3"
],
"provider_metadata": {
"cna": {
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux",
"dateUpdated": "2026-10-28T10:34:23.729Z"
}
}
},
"related_cves": [
{
"value": "CVE-2026-99104",
"evidence": "/cveMetadata/cveId"
}
],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-cve",
"document_id": 425346,
"published_at": "2026-10-28T10:34:23.729+00:00"
}