GCVE Workshop - 22 September 2026 (14:00-18:00), Luxembourg Before The Vulnopticon Conference - Registration

CVE-2023-52981 (GCVE-0-2023-52981)

Vulnerability from cvelistv5 – Published: 2025-03-27 16:43 – Updated: 2026-08-05 09:12
VLAI
Title
drm/i915: Fix request ref counting during error capture & debugfs dump
Summary
In the Linux kernel, the following vulnerability has been resolved: drm/i915: Fix request ref counting during error capture & debugfs dump When GuC support was added to error capture, the reference counting around the request object was broken. Fix it up. The context based search manages the spinlocking around the search internally. So it needs to grab the reference count internally as well. The execlist only request based search relies on external locking, so it needs an external reference count but within the spinlock not outside it. The only other caller of the context based search is the code for dumping engine state to debugfs. That code wasn't previously getting an explicit reference at all as it does everything while holding the execlist specific spinlock. So, that needs updaing as well as that spinlock doesn't help when using GuC submission. Rather than trying to conditionally get/put depending on submission model, just change it to always do the get/put. v2: Explicitly document adding an extra blank line in some dense code (Andy Shevchenko). Fix multiple potential null pointer derefs in case of no request found (some spotted by Tvrtko, but there was more!). Also fix a leaked request in case of !started and another in __guc_reset_context now that intel_context_find_active_request is actually reference counting the returned request. v3: Add a _get suffix to intel_context_find_active_request now that it grabs a reference (Daniele). v4: Split the intel_guc_find_hung_context change to a separate patch and rename intel_context_find_active_request_get to intel_context_get_active_request (Tvrtko). v5: s/locking/reference counting/ in commit message (Tvrtko) (cherry picked from commit 3700e353781e27f1bc7222f51f2cc36cbeb9b4ec)
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 573ba126aef37c8315e5bb68d2dad515efa96994 , < 9467397f417dd7b5d0db91452f0474e79716a527 (git)
Affected: 573ba126aef37c8315e5bb68d2dad515efa96994 , < 86d8ddc74124c3fdfc139f246ba6da15e45e86e3 (git)
guessed Create a notification for this product.
Linux Linux Affected: 5.15
Unaffected: 0 , < 5.15 (semver)
Unaffected: 6.1.11 , ≤ 6.1.* (semver)
Unaffected: 6.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": [
            "drivers/gpu/drm/i915/gt/intel_context.c",
            "drivers/gpu/drm/i915/gt/intel_context.h",
            "drivers/gpu/drm/i915/gt/intel_engine_cs.c",
            "drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c",
            "drivers/gpu/drm/i915/i915_gpu_error.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "9467397f417dd7b5d0db91452f0474e79716a527",
              "status": "affected",
              "version": "573ba126aef37c8315e5bb68d2dad515efa96994",
              "versionType": "git"
            },
            {
              "lessThan": "86d8ddc74124c3fdfc139f246ba6da15e45e86e3",
              "status": "affected",
              "version": "573ba126aef37c8315e5bb68d2dad515efa96994",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/gpu/drm/i915/gt/intel_context.c",
            "drivers/gpu/drm/i915/gt/intel_context.h",
            "drivers/gpu/drm/i915/gt/intel_engine_cs.c",
            "drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c",
            "drivers/gpu/drm/i915/i915_gpu_error.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5.15"
            },
            {
              "lessThan": "5.15",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.11",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.2",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.11",
                  "versionStartIncluding": "5.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.2",
                  "versionStartIncluding": "5.15",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/i915: Fix request ref counting during error capture \u0026 debugfs dump\n\nWhen GuC support was added to error capture, the reference counting\naround the request object was broken. Fix it up.\n\nThe context based search manages the spinlocking around the search\ninternally. So it needs to grab the reference count internally as\nwell. The execlist only request based search relies on external\nlocking, so it needs an external reference count but within the\nspinlock not outside it.\n\nThe only other caller of the context based search is the code for\ndumping engine state to debugfs. That code wasn\u0027t previously getting\nan explicit reference at all as it does everything while holding the\nexeclist specific spinlock. So, that needs updaing as well as that\nspinlock doesn\u0027t help when using GuC submission. Rather than trying to\nconditionally get/put depending on submission model, just change it to\nalways do the get/put.\n\nv2: Explicitly document adding an extra blank line in some dense code\n(Andy Shevchenko). Fix multiple potential null pointer derefs in case\nof no request found (some spotted by Tvrtko, but there was more!).\nAlso fix a leaked request in case of !started and another in\n__guc_reset_context now that intel_context_find_active_request is\nactually reference counting the returned request.\nv3: Add a _get suffix to intel_context_find_active_request now that it\ngrabs a reference (Daniele).\nv4: Split the intel_guc_find_hung_context change to a separate patch\nand rename intel_context_find_active_request_get to\nintel_context_get_active_request (Tvrtko).\nv5: s/locking/reference counting/ in commit message (Tvrtko)\n\n(cherry picked from commit 3700e353781e27f1bc7222f51f2cc36cbeb9b4ec)"
        }
      ],
      "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 - Reachable only via local DRM/i915 paths (render-node execbuf inducing a GPU hang that drives GuC context-reset error capture, or local debugfs engine dump), not via network packets.\nAC:L - An unprivileged attacker can reliably submit hanging and concurrent GPU work on the render node to force GuC hang detection/error capture while controlling request retirement, so both sides of the missing-refcount race are attacker-influenced.\nPR:L - Triggering requires only ordinary render-node access (/dev/dri/renderD*) with DRM_RENDER_ALLOW ioctls; no root or init-namespace CAP_SYS_ADMIN is required.\nUI:N - The attacker induces the hang and error-capture path themselves through their own GPU submissions; no separate victim action is required.\nS:U - Impact is confined to the host kernel security authority (local privilege escalation / memory corruption), with no VM escape or IOMMU boundary crossing.\nC:H - Missing request refcounting yields a use-after-free on the i915_request/dma_fence heap object, which can be reclaimed and read for arbitrary kernel information disclosure.\nI:H - The same UAF enables heap spraying and corruption of the reused object, providing write/control-flow hijacking primitives suitable for privilege escalation.\nA:H - UAF and the related NULL-deref paths can oops/panic the kernel during error capture or GuC context reset, causing full denial of service."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T09:12:14.346Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/9467397f417dd7b5d0db91452f0474e79716a527"
        },
        {
          "url": "https://git.kernel.org/stable/c/86d8ddc74124c3fdfc139f246ba6da15e45e86e3"
        }
      ],
      "title": "drm/i915: Fix request ref counting during error capture \u0026 debugfs dump",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2023-52981",
    "datePublished": "2025-03-27T16:43:20.111Z",
    "dateReserved": "2025-03-27T16:40:15.740Z",
    "dateUpdated": "2026-08-05T09:12:14.346Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2023-52981",
      "date": "2026-09-17",
      "epss": "0.00236",
      "percentile": "0.14812"
    },
    "microsoft_vex": {
      "current_release_date": "2026-08-24T01:42:27.000Z",
      "cve": "CVE-2023-52981",
      "id": "msrc_CVE-2023-52981",
      "initial_release_date": "2025-10-30T01:01:26.000Z",
      "product_status:known_affected": "5",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "drm/i915: Fix request ref counting during error capture \u0026 debugfs dump",
      "url": "https://msrc.microsoft.com/csaf/vex/2025/msrc_cve-2023-52981.json",
      "version": "5"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "drivers/gpu/drm/i915/gt/intel_context.c",
                  "drivers/gpu/drm/i915/gt/intel_context.h",
                  "drivers/gpu/drm/i915/gt/intel_engine_cs.c",
                  "drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c",
                  "drivers/gpu/drm/i915/i915_gpu_error.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "9467397f417dd7b5d0db91452f0474e79716a527",
                    "status": "affected",
                    "version": "573ba126aef37c8315e5bb68d2dad515efa96994",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "86d8ddc74124c3fdfc139f246ba6da15e45e86e3",
                    "status": "affected",
                    "version": "573ba126aef37c8315e5bb68d2dad515efa96994",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "drivers/gpu/drm/i915/gt/intel_context.c",
                  "drivers/gpu/drm/i915/gt/intel_context.h",
                  "drivers/gpu/drm/i915/gt/intel_engine_cs.c",
                  "drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c",
                  "drivers/gpu/drm/i915/i915_gpu_error.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "5.15"
                  },
                  {
                    "lessThan": "5.15",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.1.*",
                    "status": "unaffected",
                    "version": "6.1.11",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "6.2",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "configurations": [
          {
            "nodes": [
              {
                "cpeMatch": [
                  {
                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                    "matchCriteriaId": "276C2247-2301-46F7-B5F7-9604642F876D",
                    "versionEndExcluding": "6.1.11",
                    "versionStartIncluding": "5.15",
                    "vulnerable": true
                  },
                  {
                    "criteria": "cpe:2.3:o:linux:linux_kernel:6.2:rc1:*:*:*:*:*:*",
                    "matchCriteriaId": "FF501633-2F44-4913-A8EE-B021929F49F6",
                    "vulnerable": true
                  },
                  {
                    "criteria": "cpe:2.3:o:linux:linux_kernel:6.2:rc2:*:*:*:*:*:*",
                    "matchCriteriaId": "2BDA597B-CAC1-4DF0-86F0-42E142C654E9",
                    "vulnerable": true
                  },
                  {
                    "criteria": "cpe:2.3:o:linux:linux_kernel:6.2:rc3:*:*:*:*:*:*",
                    "matchCriteriaId": "725C78C9-12CE-406F-ABE8-0813A01D66E8",
                    "vulnerable": true
                  },
                  {
                    "criteria": "cpe:2.3:o:linux:linux_kernel:6.2:rc4:*:*:*:*:*:*",
                    "matchCriteriaId": "A127C155-689C-4F67-B146-44A57F4BFD85",
                    "vulnerable": true
                  },
                  {
                    "criteria": "cpe:2.3:o:linux:linux_kernel:6.2:rc5:*:*:*:*:*:*",
                    "matchCriteriaId": "D34127CC-68F5-4703-A5F6-5006F803E4AE",
                    "vulnerable": true
                  },
                  {
                    "criteria": "cpe:2.3:o:linux:linux_kernel:6.2:rc6:*:*:*:*:*:*",
                    "matchCriteriaId": "4AB8D555-648E-4F2F-98BD-3E7F45BD12A8",
                    "vulnerable": true
                  }
                ],
                "negate": false,
                "operator": "OR"
              }
            ]
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/i915: Fix request ref counting during error capture \u0026 debugfs dump\n\nWhen GuC support was added to error capture, the reference counting\naround the request object was broken. Fix it up.\n\nThe context based search manages the spinlocking around the search\ninternally. So it needs to grab the reference count internally as\nwell. The execlist only request based search relies on external\nlocking, so it needs an external reference count but within the\nspinlock not outside it.\n\nThe only other caller of the context based search is the code for\ndumping engine state to debugfs. That code wasn\u0027t previously getting\nan explicit reference at all as it does everything while holding the\nexeclist specific spinlock. So, that needs updaing as well as that\nspinlock doesn\u0027t help when using GuC submission. Rather than trying to\nconditionally get/put depending on submission model, just change it to\nalways do the get/put.\n\nv2: Explicitly document adding an extra blank line in some dense code\n(Andy Shevchenko). Fix multiple potential null pointer derefs in case\nof no request found (some spotted by Tvrtko, but there was more!).\nAlso fix a leaked request in case of !started and another in\n__guc_reset_context now that intel_context_find_active_request is\nactually reference counting the returned request.\nv3: Add a _get suffix to intel_context_find_active_request now that it\ngrabs a reference (Daniele).\nv4: Split the intel_guc_find_hung_context change to a separate patch\nand rename intel_context_find_active_request_get to\nintel_context_get_active_request (Tvrtko).\nv5: s/locking/reference counting/ in commit message (Tvrtko)\n\n(cherry picked from commit 3700e353781e27f1bc7222f51f2cc36cbeb9b4ec)"
          },
          {
            "lang": "es",
            "value": "En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: drm/i915: Arreglar el conteo de referencias de solicitud durante la captura de errores y el volcado de debugfs Cuando se agreg\u00f3 soporte para GuC a la captura de errores, el conteo de referencias alrededor del objeto de solicitud se rompi\u00f3. Arr\u00e9glenlo. La b\u00fasqueda basada en contexto administra el bloqueo de giro alrededor de la b\u00fasqueda internamente. Por lo tanto, tambi\u00e9n necesita obtener el conteo de referencias internamente. La b\u00fasqueda basada en solicitud solo de execlist se basa en el bloqueo externo, por lo que necesita un conteo de referencias externo pero dentro del bloqueo de giro, no fuera de \u00e9l. El \u00fanico otro llamador de la b\u00fasqueda basada en contexto es el c\u00f3digo para volcar el estado del motor a debugfs. Ese c\u00f3digo anteriormente no obten\u00eda una referencia expl\u00edcita en absoluto, ya que hace todo mientras mantiene el bloqueo de giro espec\u00edfico de execlist. Por lo tanto, eso necesita actualizarse, ya que el bloqueo de giro no ayuda cuando se usa el env\u00edo de GuC. En lugar de intentar obtener/poner condicionalmente dependiendo del modelo de env\u00edo, simplemente c\u00e1mbielo para que siempre haga obtener/poner. v2: Documentar expl\u00edcitamente agregar una l\u00ednea en blanco adicional en alg\u00fan c\u00f3digo denso (Andy Shevchenko). Se corrigen varias posibles desreferencias de puntero nulo en caso de no encontrarse ninguna solicitud (algunas detectadas por Tvrtko, \u00a1pero hab\u00eda m\u00e1s!). Tambi\u00e9n se corrigen una solicitud filtrada en caso de !started y otra en __guc_reset_context, ahora que intel_context_find_active_request cuenta las referencias de la solicitud devuelta. v3: Se a\u00f1ade el sufijo _get a intel_context_find_active_request ahora que obtiene una referencia (Daniele). v4: Se divide el cambio de intel_guc_find_hung_context en un parche independiente y se cambia el nombre de intel_context_find_active_request_get a intel_context_get_active_request (Tvrtko). v5: s/locking/reference counting/ en el mensaje de confirmaci\u00f3n (Tvrtko) (seleccionado del commit 3700e353781e27f1bc7222f51f2cc36cbeb9b4ec)."
          }
        ],
        "id": "CVE-2023-52981",
        "lastModified": "2026-08-04T10:18:50.790",
        "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"
            },
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 5.5,
                "baseSeverity": "MEDIUM",
                "confidentialityImpact": "NONE",
                "integrityImpact": "NONE",
                "privilegesRequired": "LOW",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 1.8,
              "impactScore": 3.6,
              "source": "nvd@nist.gov",
              "type": "Primary"
            }
          ]
        },
        "published": "2025-03-27T17:15:45.313",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "tags": [
              "Patch"
            ],
            "url": "https://git.kernel.org/stable/c/86d8ddc74124c3fdfc139f246ba6da15e45e86e3"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "tags": [
              "Patch"
            ],
            "url": "https://git.kernel.org/stable/c/9467397f417dd7b5d0db91452f0474e79716a527"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Modified",
        "weaknesses": [
          {
            "description": [
              {
                "lang": "en",
                "value": "NVD-CWE-Other"
              }
            ],
            "source": "nvd@nist.gov",
            "type": "Primary"
          }
        ]
      }
    },
    "redhat_vex": {
      "aggregate_severity": "Low",
      "current_release_date": "2026-08-04T22:56:18+00:00",
      "cve": "CVE-2023-52981",
      "id": "CVE-2023-52981",
      "initial_release_date": "2023-01-01T00:00:00+00:00",
      "product_status:fixed": "120",
      "product_status:known_affected": "124",
      "product_status:known_not_affected": "118",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: drm/i915: Fix request ref counting during error capture \u0026 debugfs dump",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2023/cve-2023-52981.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-09-11T02:23:46Z",
      "cve": "CVE-2023-52981",
      "id": "CVE-2023-52981",
      "initial_release_date": "2025-03-28T03:38:32Z",
      "product_status:known_affected": "430",
      "product_status:known_not_affected": "334",
      "product_status:recommended": "144",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2023-52981",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2023-52981.json",
      "version": "23"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

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.

Loading…

Detection rules are retrieved from Rulezet.

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.


Loading…