{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2024-50187", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2024-10-21T19:36:19.967Z", "datePublished": "2024-11-08T05:38:28.194Z", "dateUpdated": "2026-08-05T11:42:22.877Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:42:22.877Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/vc4: Stop the active perfmon before being destroyed\n\nUpon closing the file descriptor, the active performance monitor is not\nstopped. Although all perfmons are destroyed in `vc4_perfmon_close_file()`,\nthe active performance monitor's pointer (`vc4->active_perfmon`) is still\nretained.\n\nIf we open a new file descriptor and submit a few jobs with performance\nmonitors, the driver will attempt to stop the active performance monitor\nusing the stale pointer in `vc4->active_perfmon`. However, this pointer\nis no longer valid because the previous process has already terminated,\nand all performance monitors associated with it have been destroyed and\nfreed.\n\nTo fix this, when the active performance monitor belongs to a given\nprocess, explicitly stop it before destroying and freeing it." } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:L - Triggering requires issuing VC4_PERFMON_CREATE and VC4_SUBMIT_CL ioctls on the local DRM device node /dev/dri/renderD128 and then closing the file descriptor. There is no network or adjacent-network path to the vc4 perfmon code.\nAC:L - The attacker fully controls every step — create perfmon, submit a job with it, submit a second job without it so the IRQ stop path is skipped, then close the fd — producing the dangling vc4->active_perfmon deterministically with no race to win and no attacker-uncontrollable precondition. Heap reuse of the freed slot is likewise attacker-driven via repeated VC4_PERFMON_CREATE allocations of the same size class.\nPR:L - All required ioctls (VC4_PERFMON_CREATE, VC4_SUBMIT_CL) are marked DRM_RENDER_ALLOW with no capability check, so any unprivileged local user holding the render node — the default for logged-in desktop users on Raspberry Pi OS and for GPU-passthrough containers/sandboxes on Pi-based edge devices — can reach it.\nUI:N - The entire sequence is performed by the attacker's own process; no action by any other user or administrator is needed.\nS:U - The freed object, the stale pointer and all resulting corruption live within the kernel's own security authority on the affected system; no VM, IOMMU or hypervisor boundary is crossed.\nC:H - A pointer to freed heap memory is retained in device-global state, which per use-after-free scoring gives an attacker-influenced read primitive over reallocated kernel memory. Concretely, when a sprayed perfmon reuses the freed address the start path is skipped so hardware counters are never re-armed, and vc4_perfmon_stop(capture=true) hands the attacker V3D performance-counter values accumulated from other processes' and the compositor's GPU workloads via VC4_PERFMON_GET_VALUES.\nI:H - This is a CWE-416 dangling pointer into the kmalloc heap held in a long-lived, cross-process structure, which per use-after-free scoring is treated as High. The stale pointer corrupts driver-global state and another process's perfmon counter data, and leaves the V3D_PCTRE hardware counter enable register in an attacker-chosen state.\nA:H - The bug drives WARN_ON_ONCE splats in vc4_perfmon_start()/stop() from IRQ context, which is an immediate kernel panic on the panic_on_warn configurations common in hardened and appliance deployments. Even without that, vc4->active_perfmon is wedged permanently non-NULL with hardware counters left running, denying the GPU perfmon path to every client until reboot." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/gpu/drm/vc4/vc4_perfmon.c" ], "versions": [ { "version": "65101d8c9108201118efa7e08f4e2c57f438deb9", "lessThan": "75452da51e2403e14be007df80d133e1443fc967", "status": "affected", "versionType": "git" }, { "version": "65101d8c9108201118efa7e08f4e2c57f438deb9", "lessThan": "937943c042503dc6087438bf3557f9057a588ba0", "status": "affected", "versionType": "git" }, { "version": "65101d8c9108201118efa7e08f4e2c57f438deb9", "lessThan": "c9adba739d5f7cdc47a7754df4a17b47b1ecf513", "status": "affected", "versionType": "git" }, { "version": "65101d8c9108201118efa7e08f4e2c57f438deb9", "lessThan": "0b2ad4f6f2bec74a5287d96cb2325a5e11706f22", "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/vc4/vc4_perfmon.c" ], "versions": [ { "version": "4.17", "status": "affected" }, { "version": "0", "lessThan": "4.17", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.113", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.57", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.11.4", "lessThanOrEqual": "6.11.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.12", "lessThanOrEqual": "*", "status": "unaffected", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.17", "versionEndExcluding": "6.1.113" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.17", "versionEndExcluding": "6.6.57" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.17", "versionEndExcluding": "6.11.4" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.17", "versionEndExcluding": "6.12" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/75452da51e2403e14be007df80d133e1443fc967" }, { "url": "https://git.kernel.org/stable/c/937943c042503dc6087438bf3557f9057a588ba0" }, { "url": "https://git.kernel.org/stable/c/c9adba739d5f7cdc47a7754df4a17b47b1ecf513" }, { "url": "https://git.kernel.org/stable/c/0b2ad4f6f2bec74a5287d96cb2325a5e11706f22" } ], "title": "drm/vc4: Stop the active perfmon before being destroyed", "x_generator": { "engine": "bippy-1.2.0" } }, "adp": [ { "metrics": [ { "cvssV3_1": { "scope": "UNCHANGED", "version": "3.1", "baseScore": 5.5, "attackVector": "LOCAL", "baseSeverity": "MEDIUM", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H", "integrityImpact": "NONE", "userInteraction": "NONE", "attackComplexity": "LOW", "availabilityImpact": "HIGH", "privilegesRequired": "LOW", "confidentialityImpact": "NONE" } }, { "other": { "type": "ssvc", "content": { "id": "CVE-2024-50187", "role": "CISA Coordinator", "options": [ { "Exploitation": "none" }, { "Automatable": "no" }, { "Technical Impact": "partial" } ], "version": "2.0.3", "timestamp": "2025-10-01T20:18:31.290381Z" } } } ], "problemTypes": [ { "descriptions": [ { "lang": "en", "type": "CWE", "description": "CWE-noinfo Not enough information" } ] } ], "title": "CISA ADP Vulnrichment", "providerMetadata": { "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP", "dateUpdated": "2025-10-01T20:27:08.997Z" } }, { "title": "CVE Program Container", "references": [ { "url": "https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html" } ], "providerMetadata": { "orgId": "af854a3a-2127-422b-91ae-364da2661108", "shortName": "CVE", "dateUpdated": "2025-11-03T22:26:40.257Z" } } ] } }