CVE-2025-21897 (GCVE-0-2025-21897)
Vulnerability from cvelistv5
Published
2025-04-01 15:26
Modified
2025-05-04 07:23
Severity ?
Summary
In the Linux kernel, the following vulnerability has been resolved: sched_ext: Fix pick_task_scx() picking non-queued tasks when it's called without balance() a6250aa251ea ("sched_ext: Handle cases where pick_task_scx() is called without preceding balance_scx()") added a workaround to handle the cases where pick_task_scx() is called without prececing balance_scx() which is due to a fair class bug where pick_taks_fair() may return NULL after a true return from balance_fair(). The workaround detects when pick_task_scx() is called without preceding balance_scx() and emulates SCX_RQ_BAL_KEEP and triggers kicking to avoid stalling. Unfortunately, the workaround code was testing whether @prev was on SCX to decide whether to keep the task running. This is incorrect as the task may be on SCX but no longer runnable. This could lead to a non-runnable task to be returned from pick_task_scx() which cause interesting confusions and failures. e.g. A common failure mode is the task ending up with (!on_rq && on_cpu) state which can cause potential wakers to busy loop, which can easily lead to deadlocks. Fix it by testing whether @prev has SCX_TASK_QUEUED set. This makes @prev_on_scx only used in one place. Open code the usage and improve the comment while at it.
Impacted products
Vendor Product Version
Linux Linux Version: a6250aa251eacaf3ebfcfe152a96a727fd483ecd
Version: a6250aa251eacaf3ebfcfe152a96a727fd483ecd
Version: a6250aa251eacaf3ebfcfe152a96a727fd483ecd
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "kernel/sched/ext.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "5324c459f90d16b0c43a78b494c598915d782b7a",
              "status": "affected",
              "version": "a6250aa251eacaf3ebfcfe152a96a727fd483ecd",
              "versionType": "git"
            },
            {
              "lessThan": "de60a31cb0bcacfaf9487546eac5e70e0a9c66d7",
              "status": "affected",
              "version": "a6250aa251eacaf3ebfcfe152a96a727fd483ecd",
              "versionType": "git"
            },
            {
              "lessThan": "8fef0a3b17bb258130a4fcbcb5addf94b25e9ec5",
              "status": "affected",
              "version": "a6250aa251eacaf3ebfcfe152a96a727fd483ecd",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "kernel/sched/ext.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.12"
            },
            {
              "lessThan": "6.12",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.18",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.13.*",
              "status": "unaffected",
              "version": "6.13.6",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.14",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.18",
                  "versionStartIncluding": "6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.13.6",
                  "versionStartIncluding": "6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.14",
                  "versionStartIncluding": "6.12",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nsched_ext: Fix pick_task_scx() picking non-queued tasks when it\u0027s called without balance()\n\na6250aa251ea (\"sched_ext: Handle cases where pick_task_scx() is called\nwithout preceding balance_scx()\") added a workaround to handle the cases\nwhere pick_task_scx() is called without prececing balance_scx() which is due\nto a fair class bug where pick_taks_fair() may return NULL after a true\nreturn from balance_fair().\n\nThe workaround detects when pick_task_scx() is called without preceding\nbalance_scx() and emulates SCX_RQ_BAL_KEEP and triggers kicking to avoid\nstalling. Unfortunately, the workaround code was testing whether @prev was\non SCX to decide whether to keep the task running. This is incorrect as the\ntask may be on SCX but no longer runnable.\n\nThis could lead to a non-runnable task to be returned from pick_task_scx()\nwhich cause interesting confusions and failures. e.g. A common failure mode\nis the task ending up with (!on_rq \u0026\u0026 on_cpu) state which can cause\npotential wakers to busy loop, which can easily lead to deadlocks.\n\nFix it by testing whether @prev has SCX_TASK_QUEUED set. This makes\n@prev_on_scx only used in one place. Open code the usage and improve the\ncomment while at it."
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2025-05-04T07:23:45.349Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/5324c459f90d16b0c43a78b494c598915d782b7a"
        },
        {
          "url": "https://git.kernel.org/stable/c/de60a31cb0bcacfaf9487546eac5e70e0a9c66d7"
        },
        {
          "url": "https://git.kernel.org/stable/c/8fef0a3b17bb258130a4fcbcb5addf94b25e9ec5"
        }
      ],
      "title": "sched_ext: Fix pick_task_scx() picking non-queued tasks when it\u0027s called without balance()",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-21897",
    "datePublished": "2025-04-01T15:26:49.705Z",
    "dateReserved": "2024-12-29T08:45:45.783Z",
    "dateUpdated": "2025-05-04T07:23:45.349Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.1",
  "vulnerability-lookup:meta": {
    "nvd": "{\"cve\":{\"id\":\"CVE-2025-21897\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2025-04-01T16:15:20.083\",\"lastModified\":\"2025-04-01T20:26:01.990\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nsched_ext: Fix pick_task_scx() picking non-queued tasks when it\u0027s called without balance()\\n\\na6250aa251ea (\\\"sched_ext: Handle cases where pick_task_scx() is called\\nwithout preceding balance_scx()\\\") added a workaround to handle the cases\\nwhere pick_task_scx() is called without prececing balance_scx() which is due\\nto a fair class bug where pick_taks_fair() may return NULL after a true\\nreturn from balance_fair().\\n\\nThe workaround detects when pick_task_scx() is called without preceding\\nbalance_scx() and emulates SCX_RQ_BAL_KEEP and triggers kicking to avoid\\nstalling. Unfortunately, the workaround code was testing whether @prev was\\non SCX to decide whether to keep the task running. This is incorrect as the\\ntask may be on SCX but no longer runnable.\\n\\nThis could lead to a non-runnable task to be returned from pick_task_scx()\\nwhich cause interesting confusions and failures. e.g. A common failure mode\\nis the task ending up with (!on_rq \u0026\u0026 on_cpu) state which can cause\\npotential wakers to busy loop, which can easily lead to deadlocks.\\n\\nFix it by testing whether @prev has SCX_TASK_QUEUED set. This makes\\n@prev_on_scx only used in one place. Open code the usage and improve the\\ncomment while at it.\"},{\"lang\":\"es\",\"value\":\"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: sched_ext: Fix pick_task_scx() picking nonqueued task when it is called without balance() a6250aa251ea (\\\"sched_ext: Handle cases where pick_task_scx() is called without previous balance_scx()\\\") a\u00f1adi\u00f3 un workaround para gestionar los casos donde pick_task_scx() se llama sin preceder a balance_scx(), lo cual se debe a un error de clase fair donde pick_taks_fair() puede devolver NULL despu\u00e9s de un retorno verdadero de balance_fair(). El workaround detecta cu\u00e1ndo se llama a pick_task_scx() sin preceder a balance_scx() y emula SCX_RQ_BAL_KEEP y activa el kicking para evitar el estancamiento. Desafortunadamente, el c\u00f3digo del workaround estaba probando si @prev estaba en SCX para decidir si mantener la tarea en ejecuci\u00f3n. Esto es incorrecto ya que la tarea puede estar en SCX pero ya no se puede ejecutar. Esto podr\u00eda provocar que pick_task_scx() devuelva una tarea no ejecutable, lo que causa confusiones y fallos interesantes. Por ejemplo, un modo de fallo com\u00fan es que la tarea termine en el estado (!on_rq \u0026amp;\u0026amp; on_cpu), lo que puede provocar que los posibles reactivadores entren en bucles de ocupaci\u00f3n, lo que puede f\u00e1cilmente provocar interbloqueos. Solucione esto comprobando si @prev tiene SCX_TASK_QUEUED definido. Esto hace que @prev_on_scx solo se use en un lugar. Abra el c\u00f3digo para su uso y mejore el comentario.\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/5324c459f90d16b0c43a78b494c598915d782b7a\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/8fef0a3b17bb258130a4fcbcb5addf94b25e9ec5\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/de60a31cb0bcacfaf9487546eac5e70e0a9c66d7\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}"
  }
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…