{
    "dataType": "CVE_RECORD",
    "dataVersion": "5.2",
    "cveMetadata": {
        "cveId": "CVE-2024-58091",
        "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "state": "PUBLISHED",
        "assignerShortName": "Linux",
        "dateReserved": "2025-03-06T15:52:09.188Z",
        "datePublished": "2025-03-27T14:57:03.560Z",
        "dateUpdated": "2026-08-05T11:47:40.556Z"
    },
    "containers": {
        "cna": {
            "providerMetadata": {
                "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
                "shortName": "Linux",
                "dateUpdated": "2026-08-05T11:47:40.556Z"
            },
            "descriptions": [
                {
                    "lang": "en",
                    "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndrm/fbdev-dma: Add shadow buffering for deferred I/O\n\nDMA areas are not necessarily backed by struct page, so we cannot\nrely on it for deferred I/O. Allocate a shadow buffer for drivers\nthat require deferred I/O and use it as framebuffer memory.\n\nFixes driver errors about being \"Unable to handle kernel NULL pointer\ndereference at virtual address\" or \"Unable to handle kernel paging\nrequest at virtual address\".\n\nThe patch splits drm_fbdev_dma_driver_fbdev_probe() in an initial\nallocation, which creates the DMA-backed buffer object, and a tail\nthat sets up the fbdev data structures. There is a tail function for\ndirect memory mappings and a tail function for deferred I/O with\nthe shadow buffer.\n\nIt is no longer possible to use deferred I/O without shadow buffer.\nIt can be re-added if there exists a reliably test for usable struct\npage in the allocated DMA-backed buffer object."
                }
            ],
            "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 - Exploitation requires opening and mmap()ing the local `/dev/fb0` character device; there is no remote or adjacent-network path to the fbdev deferred-I/O fault handler.\nAC:L - On an affected system the attacker simply mmaps the framebuffer and touches the mapping, deterministically entering `fb_deferred_io_fault()` with a non-struct-page DMA address; no race or uncontrollable precondition is involved.\nPR:L - `fb_open()`/`fb_mmap()` perform no capability checks — only `/dev/fb0` file permissions apply, and on the embedded/Raspberry Pi-class systems running the affected SPI-panel and LCDC drivers the ordinary console user is in the `video` group.\nUI:N - The attacker performs the mmap and the write to its own mapping; no action by another user or administrator is needed.\nS:U - The corruption and crash occur within the kernel of the same machine and security authority; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - The fault handler hands a fabricated `struct page` (from an unbacked physical frame) to the VM layer and installs it in the attacker's page tables, so mismanaged/aliased page metadata can expose kernel-owned or reserved physical memory contents to userspace.\nI:H - Before crashing, the path writes through the bogus page pointer — refcount increment, `page->mapping`, `page->index` set to the attacker-controlled `pgoff`, and `PG_locked` — and the fake page can later be released into the buddy allocator, giving page-metadata corruption that is leverageable for further memory corruption.\nA:H - The documented and reproducible outcome is an immediate kernel oops (\"Unable to handle kernel NULL pointer dereference\"/\"Unable to handle kernel paging request\"), a full denial of service triggerable at will."
                        }
                    ]
                }
            ],
            "affected": [
                {
                    "product": "Linux",
                    "vendor": "Linux",
                    "defaultStatus": "unaffected",
                    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                    "programFiles": [
                        "drivers/gpu/drm/drm_fbdev_dma.c"
                    ],
                    "versions": [
                        {
                            "version": "5ab91447aa13b8b98bc11f5326f33500b0ee2c48",
                            "lessThan": "0d087de947babf7ed70029d042abcc6ed06ff415",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "5ab91447aa13b8b98bc11f5326f33500b0ee2c48",
                            "lessThan": "cdc581169942de3b9e2648cfbd98c5ff9111c2c8",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "5ab91447aa13b8b98bc11f5326f33500b0ee2c48",
                            "lessThan": "3603996432997f7c88da37a97062a46cda01ac9d",
                            "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/drm_fbdev_dma.c"
                    ],
                    "versions": [
                        {
                            "version": "6.11",
                            "status": "affected"
                        },
                        {
                            "version": "0",
                            "lessThan": "6.11",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.12.36",
                            "lessThanOrEqual": "6.12.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.13.6",
                            "lessThanOrEqual": "6.13.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.14",
                            "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": "6.11",
                                    "versionEndExcluding": "6.12.36"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.11",
                                    "versionEndExcluding": "6.13.6"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.11",
                                    "versionEndExcluding": "6.14"
                                }
                            ]
                        }
                    ]
                }
            ],
            "references": [
                {
                    "url": "https://git.kernel.org/stable/c/0d087de947babf7ed70029d042abcc6ed06ff415"
                },
                {
                    "url": "https://git.kernel.org/stable/c/cdc581169942de3b9e2648cfbd98c5ff9111c2c8"
                },
                {
                    "url": "https://git.kernel.org/stable/c/3603996432997f7c88da37a97062a46cda01ac9d"
                }
            ],
            "title": "drm/fbdev-dma: Add shadow buffering for deferred I/O",
            "x_generator": {
                "engine": "bippy-1.2.0"
            }
        }
    }
}