CVE-2026-74731 (GCVE-0-2026-74731)

Vulnerability from cvelistv5 – Published: 2026-08-22 15:33 – Updated: 2026-08-25 05:42
VLAI
Title
sched_ext: Skip sub-disable teardown for never-linked sub-schedulers
Summary
In the Linux kernel, the following vulnerability has been resolved: sched_ext: Skip sub-disable teardown for never-linked sub-schedulers A sub-scheduler enable can fail before scx_link_sched() links the sched into the hierarchy, e.g. when the parent is already being disabled, and cleanup still runs the full scx_sub_disable(). That is racy against root disable: drain_descendants() is the only ordering between a sub's disable-time task walk and root disable's all-task teardown, and an unlinked sub is invisible to it. Root's teardown can thus run between the never-linked sub's drain and its walk, exiting every task to no scheduler. The walk then trips the membership WARN and re-homes the exited tasks onto the dying hierarchy, a use-after-free. Skip the cgroup ownership reset and the task walk if @sch was never linked, indicated by the empty ->sibling as unlinking only happens later in the same function. The membership WARN remains valid: a linked sub is always waited on by an ancestor's drain.
Assigner
Linux CNA under the mitre root
CNA scorecard D 53/100 over 6666 records in the last 180 days details
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 337ec00b1d9c676f637651c2cefddb8612b867ee , < 6428093a4a986c38c9089b5eb32b56d914ef437a (git)
Affected: 337ec00b1d9c676f637651c2cefddb8612b867ee , < 8c13364db9c9a43ed286f3a8d0fb9477b1adc43c (git)
guessed Create a notification for this product.
Linux Linux Affected: 7.1
Unaffected: 0 , < 7.1 (semver)
Unaffected: 7.1.9 , ≤ 7.1.* (semver)
Unaffected: 7.2 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "kernel/sched/ext/ext.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "6428093a4a986c38c9089b5eb32b56d914ef437a",
              "status": "affected",
              "version": "337ec00b1d9c676f637651c2cefddb8612b867ee",
              "versionType": "git"
            },
            {
              "lessThan": "8c13364db9c9a43ed286f3a8d0fb9477b1adc43c",
              "status": "affected",
              "version": "337ec00b1d9c676f637651c2cefddb8612b867ee",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "kernel/sched/ext/ext.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "7.1"
            },
            {
              "lessThan": "7.1",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.1.*",
              "status": "unaffected",
              "version": "7.1.9",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.2",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.1.9",
                  "versionStartIncluding": "7.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2",
                  "versionStartIncluding": "7.1",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nsched_ext: Skip sub-disable teardown for never-linked sub-schedulers\n\nA sub-scheduler enable can fail before scx_link_sched() links the sched into\nthe hierarchy, e.g. when the parent is already being disabled, and cleanup\nstill runs the full scx_sub_disable().\n\nThat is racy against root disable: drain_descendants() is the only ordering\nbetween a sub\u0027s disable-time task walk and root disable\u0027s all-task teardown,\nand an unlinked sub is invisible to it. Root\u0027s teardown can thus run between\nthe never-linked sub\u0027s drain and its walk, exiting every task to no\nscheduler.\n\nThe walk then trips the membership WARN and re-homes the exited tasks onto\nthe dying hierarchy, a use-after-free.\n\nSkip the cgroup ownership reset and the task walk if @sch was never linked,\nindicated by the empty -\u003esibling as unlinking only happens later in the same\nfunction. The membership WARN remains valid: a linked sub is always waited\non by an ancestor\u0027s drain."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The bug is reached only via local bpf(2) syscalls (BPF_MAP_CREATE/UPDATE_ELEM, BPF_PROG_LOAD, BPF_LINK_CREATE) that register sched_ext_ops struct_ops and invoke scx_enable()/scx_sub_enable_workfn(); per kernel CNA guidance BPF/sched_ext is Local, not network-reachable.\nAC:L - The attacker controls both sides of the race by concurrently attaching a sub-scheduler and closing the root BPF link to trigger scx_root_disable() while never-linked sub cleanup runs scx_sub_disable(); repeated attempts can reliably hit the window between drain_descendants() and the task walk.\nPR:L - Exploitation requires CAP_BPF to create BPF_MAP_TYPE_STRUCT_OPS, load BPF_PROG_TYPE_STRUCT_OPS, and BPF_LINK_CREATE sched_ext; per kernel guidance this is Low because CAP_BPF is obtainable via user namespaces/BPF tokens, not init-namespace root only.\nUI:N - No victim interaction is required; the attacker loads root and sub BPF schedulers, targets their cgroup, and closes BPF links from their own processes to orchestrate the concurrent enable-failure and teardown race.\nS:U - The use-after-free corrupts kernel scheduler/task state during sched_ext teardown on the same host kernel; this is standard kernel memory corruption and privilege escalation impact, not a VM escape or cross-security-authority boundary.\nC:H - Failed never-linked sub cleanup re-homes tasks onto a dying scx_sched hierarchy after root disable frees scheduler state; this use-after-free on scheduler/task metadata can be leveraged for arbitrary kernel memory disclosure per kernel UAF guidance.\nI:H - The UAF during scx_set_task_sched()/scx_enable_task() on a freed scx_sched corrupts scheduler pointers and task ownership in the system-wide scheduler path, enabling heap corruption and arbitrary kernel write or code execution primitives.\nA:H - The race re-homes tasks onto a tearing-down sched_ext hierarchy, tripping membership WARNs and corrupting scheduler teardown; this causes kernel oops/panic/hang on a system-wide scheduler subsystem, which is High availability impact per kernel guidance."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-25T05:42:10.750Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/6428093a4a986c38c9089b5eb32b56d914ef437a"
        },
        {
          "url": "https://git.kernel.org/stable/c/8c13364db9c9a43ed286f3a8d0fb9477b1adc43c"
        }
      ],
      "title": "sched_ext: Skip sub-disable teardown for never-linked sub-schedulers",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-74731",
    "datePublished": "2026-08-22T15:33:20.294Z",
    "dateReserved": "2026-08-15T05:44:03.930Z",
    "dateUpdated": "2026-08-25T05:42:10.750Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-74731",
      "date": "2026-10-16",
      "epss": "0.00165",
      "percentile": "0.0534"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "kernel/sched/ext/ext.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "6428093a4a986c38c9089b5eb32b56d914ef437a",
                    "status": "affected",
                    "version": "337ec00b1d9c676f637651c2cefddb8612b867ee",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "8c13364db9c9a43ed286f3a8d0fb9477b1adc43c",
                    "status": "affected",
                    "version": "337ec00b1d9c676f637651c2cefddb8612b867ee",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "kernel/sched/ext/ext.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "7.1"
                  },
                  {
                    "lessThan": "7.1",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.1.*",
                    "status": "unaffected",
                    "version": "7.1.9",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.2",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nsched_ext: Skip sub-disable teardown for never-linked sub-schedulers\n\nA sub-scheduler enable can fail before scx_link_sched() links the sched into\nthe hierarchy, e.g. when the parent is already being disabled, and cleanup\nstill runs the full scx_sub_disable().\n\nThat is racy against root disable: drain_descendants() is the only ordering\nbetween a sub\u0027s disable-time task walk and root disable\u0027s all-task teardown,\nand an unlinked sub is invisible to it. Root\u0027s teardown can thus run between\nthe never-linked sub\u0027s drain and its walk, exiting every task to no\nscheduler.\n\nThe walk then trips the membership WARN and re-homes the exited tasks onto\nthe dying hierarchy, a use-after-free.\n\nSkip the cgroup ownership reset and the task walk if @sch was never linked,\nindicated by the empty -\u003esibling as unlinking only happens later in the same\nfunction. The membership WARN remains valid: a linked sub is always waited\non by an ancestor\u0027s drain."
          },
          {
            "lang": "es",
            "value": "En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:\n\nsched_ext: Omitir el desmantelamiento de sub-desactivaci\u00f3n para sub-planificadores nunca vinculados\n\nUna activaci\u00f3n de sub-planificador puede fallar antes de que scx_link_sched() vincule el planificador a la jerarqu\u00eda, por ejemplo, cuando el padre ya est\u00e1 siendo deshabilitado, y la limpieza a\u00fan ejecuta el scx_sub_disable() completo.\n\nEso es una condici\u00f3n de carrera contra la desactivaci\u00f3n de la ra\u00edz: drain_descendants() es el \u00fanico ordenamiento entre un recorrido de tareas en tiempo de desactivaci\u00f3n de un sub y el desmantelamiento de todas las tareas de la desactivaci\u00f3n de la ra\u00edz, y un sub desvinculado es invisible para ello. El desmantelamiento de la ra\u00edz puede, por lo tanto, ejecutarse entre el drenaje del sub nunca vinculado y su recorrido, haciendo que cada tarea salga a ning\u00fan planificador.\n\nEl recorrido entonces activa la ADVERTENCIA de membres\u00eda y reasigna las tareas que salieron a la jerarqu\u00eda moribunda, un uso despu\u00e9s de liberaci\u00f3n.\n\nOmitir el restablecimiento de la propiedad del cgroup y el recorrido de tareas si @sch nunca fue vinculado, indicado por el  -\u003e sibling vac\u00edo ya que la desvinculaci\u00f3n solo ocurre m\u00e1s tarde en la misma funci\u00f3n. La ADVERTENCIA de membres\u00eda sigue siendo v\u00e1lida: un sub vinculado siempre es esperado por el drenaje de un ancestro."
          }
        ],
        "id": "CVE-2026-74731",
        "lastModified": "2026-10-14T13:10:00.187",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 7.8,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "LOW",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 1.8,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-08-22T16:16:48.257",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/6428093a4a986c38c9089b5eb32b56d914ef437a"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/8c13364db9c9a43ed286f3a8d0fb9477b1adc43c"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    },
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-08-25T08:56:38+00:00",
      "cve": "CVE-2026-74731",
      "id": "CVE-2026-74731",
      "initial_release_date": "2026-08-22T00:00:00+00:00",
      "product_status:known_not_affected": "274",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: sched_ext: Skip sub-disable teardown for never-linked sub-schedulers",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-74731.json",
      "version": "3"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Vulnerability timeline

Sightings and recorded dates, grouped by day · UTC

JSON
Events included in the timeline

Loading timeline…


    Loading…

    Loading…

    Loading…

    Related by attack behaviour

    Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.