CVE-2024-49943 (GCVE-0-2024-49943)
Vulnerability from cvelistv5
Published
2024-10-21 18:02
Modified
2026-08-05 11:40
Summary
In the Linux kernel, the following vulnerability has been resolved: drm/xe/guc_submit: add missing locking in wedged_fini Any non-wedged queue can have a zero refcount here and can be running concurrently with an async queue destroy, therefore dereferencing the queue ptr to check wedge status after the lookup can trigger UAF if queue is not wedged. Fix this by keeping the submission_state lock held around the check to postpone the free and make the check safe, before dropping again around the put() to avoid the deadlock. (cherry picked from commit d28af0b6b9580b9f90c265a7da0315b0ad20bbfd)
Impacted products
Vendor Product Version
Linux Linux Version: 8ed9aaae39f39130b7a3eb2726be05d7f64b344c
Version: 8ed9aaae39f39130b7a3eb2726be05d7f64b344c
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2024-49943",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2024-10-22T13:37:27.904932Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2024-10-22T13:38:50.255Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/gpu/drm/xe/xe_guc_submit.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "d88f9bab7e62dd0dbe983fa70cf040042a60cc84",
              "status": "affected",
              "version": "8ed9aaae39f39130b7a3eb2726be05d7f64b344c",
              "versionType": "git"
            },
            {
              "lessThan": "790533e44bfc7af929842fccd9674c9f424d4627",
              "status": "affected",
              "version": "8ed9aaae39f39130b7a3eb2726be05d7f64b344c",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/gpu/drm/xe/xe_guc_submit.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.11"
            },
            {
              "lessThan": "6.11",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.11.*",
              "status": "unaffected",
              "version": "6.11.3",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.12",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.11.3",
                  "versionStartIncluding": "6.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12",
                  "versionStartIncluding": "6.11",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/xe/guc_submit: add missing locking in wedged_fini\n\nAny non-wedged queue can have a zero refcount here and can be running\nconcurrently with an async queue destroy, therefore dereferencing the\nqueue ptr to check wedge status after the lookup can trigger UAF if\nqueue is not wedged.  Fix this by keeping the submission_state lock held\naround the check to postpone the free and make the check safe, before\ndropping again around the put() to avoid the deadlock.\n\n(cherry picked from commit d28af0b6b9580b9f90c265a7da0315b0ad20bbfd)"
        }
      ],
      "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 attacker\u0027s side of the race is driven entirely through local interfaces \u2014 opening /dev/dri/renderD*, creating/destroying exec queues, and submitting a hanging batch \u2014 and the fini handler runs from local device unwind. No network or adjacent-network data reaches this code.\nAC:L - The attacker controls the freeing side (many concurrent async exec-queue destroys, with the kmalloc bucket chosen via the queue `width`) and induces the wedge that makes a rebind the documented recovery, so attempts are repeatable and need no memory layout the attacker cannot influence; queues stuck in `xe_sched_entity_fini()` on a wedged GPU naturally complete during the same unwind that runs `guc_submit_wedged_fini()`.\nPR:L - `XE_EXEC_QUEUE_CREATE`/`XE_EXEC_QUEUE_DESTROY` and `XE_EXEC` are `DRM_RENDER_ALLOW` with no capability, DRM-master, or init-namespace requirement \u2014 ordinary render-node access suffices to arm the zero-refcount queues and drive the concurrent free.\nUI:N - No victim must open or process attacker-supplied content; the device-lifetime teardown that fires the devres action occurs automatically via VF/hot-remove lifecycle or an automated udev rebind-recovery agent reacting to the attacker-induced wedged device.\nS:U - The use-after-free corrupts GPU driver objects inside the host kernel\u0027s own security authority, with no VM, IOMMU, or sandbox boundary crossed.\nC:H - `exec_queue_wedged()` dereferences `q-\u003eguc` after both `q` and the `xe_guc_exec_queue` are freed; once the generic kmalloc slot is resprayed, `q-\u003eguc` is an attacker-controlled pointer, turning the state read into disclosure of arbitrary kernel memory.\nI:H - If the reused memory shows the WEDGED bit, `xe_exec_queue_put()` executes against the freed/reallocated object \u2014 a refcount decrement into live memory plus `xe_exec_queue_destroy()`\u0027s `list_del` on `q-\u003emulti_gt_list` (arbitrary unlink write) and an indirect call through `q-\u003eops-\u003efini(q)`, a classic control-flow hijack primitive.\nA:H - The stale dereference and the spurious `xe_exec_queue_put()` produce a KASAN-visible use-after-free, refcount underflow, and double free during driver unwind, oopsing or panicking the kernel."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T11:40:36.495Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/d88f9bab7e62dd0dbe983fa70cf040042a60cc84"
        },
        {
          "url": "https://git.kernel.org/stable/c/790533e44bfc7af929842fccd9674c9f424d4627"
        }
      ],
      "title": "drm/xe/guc_submit: add missing locking in wedged_fini",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2024-49943",
    "datePublished": "2024-10-21T18:02:01.794Z",
    "dateReserved": "2024-10-21T12:17:06.044Z",
    "dateUpdated": "2026-08-05T11:40:36.495Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "vulnrichment": {
      "containers": "{\"cna\": {\"providerMetadata\": {\"orgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"shortName\": \"Linux\", \"dateUpdated\": \"2024-10-21T18:02:01.794Z\"}, \"descriptions\": [{\"lang\": \"en\", \"value\": \"In the Linux kernel, the following vulnerability has been resolved:\\n\\ndrm/xe/guc_submit: add missing locking in wedged_fini\\n\\nAny non-wedged queue can have a zero refcount here and can be running\\nconcurrently with an async queue destroy, therefore dereferencing the\\nqueue ptr to check wedge status after the lookup can trigger UAF if\\nqueue is not wedged.  Fix this by keeping the submission_state lock held\\naround the check to postpone the free and make the check safe, before\\ndropping again around the put() to avoid the deadlock.\\n\\n(cherry picked from commit d28af0b6b9580b9f90c265a7da0315b0ad20bbfd)\"}], \"affected\": [{\"product\": \"Linux\", \"vendor\": \"Linux\", \"defaultStatus\": \"unaffected\", \"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"programFiles\": [\"drivers/gpu/drm/xe/xe_guc_submit.c\"], \"versions\": [{\"version\": \"8ed9aaae39f3\", \"lessThan\": \"d88f9bab7e62\", \"status\": \"affected\", \"versionType\": \"git\"}, {\"version\": \"8ed9aaae39f3\", \"lessThan\": \"790533e44bfc\", \"status\": \"affected\", \"versionType\": \"git\"}]}, {\"product\": \"Linux\", \"vendor\": \"Linux\", \"defaultStatus\": \"affected\", \"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"programFiles\": [\"drivers/gpu/drm/xe/xe_guc_submit.c\"], \"versions\": [{\"version\": \"6.11\", \"status\": \"affected\"}, {\"version\": \"0\", \"lessThan\": \"6.11\", \"status\": \"unaffected\", \"versionType\": \"custom\"}, {\"version\": \"6.11.3\", \"lessThanOrEqual\": \"6.11.*\", \"status\": \"unaffected\", \"versionType\": \"custom\"}, {\"version\": \"6.12-rc2\", \"lessThanOrEqual\": \"*\", \"status\": \"unaffected\", \"versionType\": \"original_commit_for_fix\"}]}], \"references\": [{\"url\": \"https://git.kernel.org/stable/c/d88f9bab7e62dd0dbe983fa70cf040042a60cc84\"}, {\"url\": \"https://git.kernel.org/stable/c/790533e44bfc7af929842fccd9674c9f424d4627\"}], \"title\": \"drm/xe/guc_submit: add missing locking in wedged_fini\", \"x_generator\": {\"engine\": \"bippy-c9c4e1df01b2\"}}, \"adp\": [{\"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2024-49943\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"no\"}, {\"Technical Impact\": \"partial\"}], \"version\": \"2.0.3\", \"timestamp\": \"2024-10-22T13:37:27.904932Z\"}}}], \"providerMetadata\": {\"shortName\": \"CISA-ADP\", \"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"dateUpdated\": \"2024-10-22T13:37:31.212Z\"}, \"title\": \"CISA ADP Vulnrichment\"}]}",
      "cveMetadata": "{\"cveId\": \"CVE-2024-49943\", \"assignerOrgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"state\": \"PUBLISHED\", \"assignerShortName\": \"Linux\", \"dateReserved\": \"2024-10-21T12:17:06.044Z\", \"datePublished\": \"2024-10-21T18:02:01.794Z\", \"dateUpdated\": \"2024-10-21T18:02:01.794Z\"}",
      "dataType": "CVE_RECORD",
      "dataVersion": "5.1"
    }
  }
}


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.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • 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…