{"api_version":"1","generated_at":"2026-08-18T11:35:48+00:00","cve":"CVE-2026-74449","urls":{"html":"https://cve.report/CVE-2026-74449","api":"https://cve.report/api/cve/CVE-2026-74449.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-74449","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-74449"},"summary":{"title":"drm/amd/display: Fix divide-by-zero in calculate_mcache_setting on zero viewport","description":"In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/amd/display: Fix divide-by-zero in calculate_mcache_setting on zero viewport\n\nIf a plane reaches calculate_mcache_setting with a zero-area viewport,\ncalculate_mcache_setting exits early with num_mcaches == 0 and\nmvmpg_width/height == 0. This will cause a divide-by-zero panic and can\nalso cause an underflow on num_mcaches.\n\nFix this by changing calculate_mcache_setting to bool and adding guards\nafter each calculate_mcache_row_bytes call. If num_mcaches or\nmvmpg_width/height is zero, return a false. Callers will propagate the\nfailure as a rejected mode, which prevents the panic.\n\n(cherry picked from commit 29c0f7c655f47bcbd575ff75e58480df6ec3c9da)","state":"PUBLISHED","assigner":"Linux","published_at":"2026-08-15 13:17:49","updated_at":"2026-08-18 07:16:54"},"problem_types":[],"metrics":[{"version":"3.1","source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","type":"Secondary","score":"7.8","severity":"HIGH","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","data":{"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","attackVector":"LOCAL","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"HIGH"}},{"version":"3.1","source":"CNA","type":"DECLARED","score":"7.8","severity":"HIGH","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","data":{"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"}}],"references":[{"url":"https://git.kernel.org/stable/c/f327e389c07cfc3a2f6ff54f6214e1a52d457edc","name":"https://git.kernel.org/stable/c/f327e389c07cfc3a2f6ff54f6214e1a52d457edc","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/1f93537881fd22712732a60ad12572a3fd40c0ec","name":"https://git.kernel.org/stable/c/1f93537881fd22712732a60ad12572a3fd40c0ec","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-74449","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-74449","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 70839da6360500a82e4d5f78499284474cbed7c1 1f93537881fd22712732a60ad12572a3fd40c0ec git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 70839da6360500a82e4d5f78499284474cbed7c1 f327e389c07cfc3a2f6ff54f6214e1a52d457edc git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 6.11","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.11 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.1.8 7.1.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.2 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":{"cve_year":"2026","cve_id":"74449","cve":"CVE-2026-74449","epss":"0.001200000","percentile":"0.022030000","score_date":"2026-08-17","updated_at":"2026-08-18 00:11:46"},"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"defaultStatus":"unaffected","product":"Linux","programFiles":["drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn4_calcs.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"lessThan":"1f93537881fd22712732a60ad12572a3fd40c0ec","status":"affected","version":"70839da6360500a82e4d5f78499284474cbed7c1","versionType":"git"},{"lessThan":"f327e389c07cfc3a2f6ff54f6214e1a52d457edc","status":"affected","version":"70839da6360500a82e4d5f78499284474cbed7c1","versionType":"git"}]},{"defaultStatus":"affected","product":"Linux","programFiles":["drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn4_calcs.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":"7.1.*","status":"unaffected","version":"7.1.8","versionType":"semver"},{"lessThanOrEqual":"*","status":"unaffected","version":"7.2","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.1.8","versionStartIncluding":"6.11","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.2","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/amd/display: Fix divide-by-zero in calculate_mcache_setting on zero viewport\n\nIf a plane reaches calculate_mcache_setting with a zero-area viewport,\ncalculate_mcache_setting exits early with num_mcaches == 0 and\nmvmpg_width/height == 0. This will cause a divide-by-zero panic and can\nalso cause an underflow on num_mcaches.\n\nFix this by changing calculate_mcache_setting to bool and adding guards\nafter each calculate_mcache_row_bytes call. If num_mcaches or\nmvmpg_width/height is zero, return a false. Callers will propagate the\nfailure as a rejected mode, which prevents the panic.\n\n(cherry picked from commit 29c0f7c655f47bcbd575ff75e58480df6ec3c9da)"}],"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 bug is reached during DRM atomic display validation on AMDGPU DCN4.x (dml21 path): userspace ioctl → amdgpu_dm atomic commit → dc_validate_global_state/dc_validate_with_context → dcn401/dcn42_validate_bandwidth → dml2_validate → dml21_validate → dml2_check_mode_supported → dml2_core_calcs_mode_support_ex → calculate_mcache_setting; no network or physical bus is involved.\nAC:L - An attacker with DRM card access can submit atomic commits that configure DCC-enabled planes and repeatedly probe scaler/viewport edge cases (including degenerate zero-area viewports or zero mvmpg dimensions) to reach calculate_mcache_setting; once triggered, num_mcaches==0 deterministically underflows loop bounds and causes divide-by-zero without races or uncontrollable heap layout.\nPR:L - Exploitation requires only standard local DRM display privileges to perform atomic modeset ioctl on /dev/dri/card* (typical for session-owning desktop users in the video/render group), not init-namespace root/CAP_SYS_ADMIN; user namespaces do not grant independent access to the host GPU display stack.\nUI:N - No victim interaction is required beyond the attacker issuing their own DRM atomic commit to configure a plane with DCC compression enabled; the kernel panic/corruption occurs during in-kernel DML bandwidth validation, not from another user opening files or mounting filesystems.\nS:U - The vulnerability corrupts kernel memory and can enable local privilege escalation within the same host kernel running the AMDGPU display driver; it does not cross a VM, IOMMU, or sandbox boundary such as KVM guest-to-host escape.\nC:H - When num_mcaches is zero, unsigned underflow in loop bounds (n < *num_mcaches_l - 1) and indexing (mcache_offsets_l[*num_mcaches_l - 1]) performs massive out-of-bounds reads/writes past the fixed-size mcache_offsets arrays in kernel DML state, enabling disclosure of adjacent kernel heap memory rather than a pure crash with no data exposure.\nI:H - The same num_mcaches underflow drives unbounded out-of-bounds writes into mode_lib mcache offset arrays and related DML structures during calculate_mcache_setting, providing attacker-influenced kernel memory corruption primitives that could be leveraged for control-flow hijacking beyond a simple denial-of-service fault.\nA:H - The vulnerable path performs integer divide-by-zero on zero mvmpg_access_width/num_mcaches and executes out-of-bounds mcache offset writes, either of which can immediately trigger a kernel oops or panic during display mode validation, denying service to all users on affected AMD DCN4.x systems until reboot."}]}],"providerMetadata":{"dateUpdated":"2026-08-18T06:56:35.806Z","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux"},"references":[{"url":"https://git.kernel.org/stable/c/1f93537881fd22712732a60ad12572a3fd40c0ec"},{"url":"https://git.kernel.org/stable/c/f327e389c07cfc3a2f6ff54f6214e1a52d457edc"}],"title":"drm/amd/display: Fix divide-by-zero in calculate_mcache_setting on zero viewport","x_generator":{"engine":"bippy-1.2.0"}}},"cveMetadata":{"assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","assignerShortName":"Linux","cveId":"CVE-2026-74449","datePublished":"2026-08-15T12:26:54.519Z","dateReserved":"2026-08-15T05:44:03.899Z","dateUpdated":"2026-08-18T06:56:35.806Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-08-15 13:17:49","lastModifiedDate":"2026-08-18 07:16:54","problem_types":[],"metrics":{"cvssMetricV31":[{"source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","type":"Secondary","cvssData":{"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","attackVector":"LOCAL","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"HIGH"},"exploitabilityScore":1.8,"impactScore":5.9}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"74449","Ordinal":"1","Title":"drm/amd/display: Fix divide-by-zero in calculate_mcache_setting ","CVE":"CVE-2026-74449","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"74449","Ordinal":"1","NoteData":"In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/amd/display: Fix divide-by-zero in calculate_mcache_setting on zero viewport\n\nIf a plane reaches calculate_mcache_setting with a zero-area viewport,\ncalculate_mcache_setting exits early with num_mcaches == 0 and\nmvmpg_width/height == 0. This will cause a divide-by-zero panic and can\nalso cause an underflow on num_mcaches.\n\nFix this by changing calculate_mcache_setting to bool and adding guards\nafter each calculate_mcache_row_bytes call. If num_mcaches or\nmvmpg_width/height is zero, return a false. Callers will propagate the\nfailure as a rejected mode, which prevents the panic.\n\n(cherry picked from commit 29c0f7c655f47bcbd575ff75e58480df6ec3c9da)","Type":"Description","Title":"drm/amd/display: Fix divide-by-zero in calculate_mcache_setting "}]}}}