{"id":"CVE-2026-53401","state":"PUBLISHED","title":"fbdev: omap2: fix use-after-free in omapfb_mmap","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nfbdev: omap2: fix use-after-free in omapfb_mmap\n\nomapfb_mmap() has a race condition with OMAPFB_SETUP_PLANE ioctl that\ncan lead to use-after-free:\n\nThe fb_mmap() entry point holds mm_lock but not lock (fb_info->lock),\nwhile ioctl handlers like OMAPFB_SETUP_PLANE hold lock but not mm_lock.\nThis allows concurrent execution.\n\nIn omapfb_mmap():\n1. rg = omapfb_get_mem_region(ofbi->region);      // Get old region ref\n2. start = omapfb_get_region_paddr(ofbi);          // Read from NEW region\n3. len = fix->smem_len;                             // Read from NEW region\n4. vm_iomap_memory(vma, start, len);               // Map NEW region memory\n5. atomic_inc(&rg->map_count);                      // Increment OLD region!\n\nConcurrently, OMAPFB_SETUP_PLANE can:\n- Reassign ofbi->region = new_rg\n- Update fix->smem_len\n- OMAPFB_SETUP_MEM then checks NEW region's map_count (0!) and frees it\n\nThis leaves userspace with a mapping to freed physical memory.\n\nThe fix is to read all required values (start, len) from the same\nregion reference (rg) that will have its map_count incremented,\npreventing the region from being freed while still mapped.","publishedAt":"2026-07-19T12:02:01.209Z","updatedAt":"2026-10-30T12:27:07.510Z","severity":{"score":7.8,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"078ff546a806b2c2ab74c25c8edd4c6d4680656a","status":"affected","lessThan":"a1a00f664a409b3412f9e1408c12890cffe50362","versionType":"git"},{"version":"078ff546a806b2c2ab74c25c8edd4c6d4680656a","status":"affected","lessThan":"5e10b1747547c3815e90d28166e92144835e065f","versionType":"git"},{"version":"078ff546a806b2c2ab74c25c8edd4c6d4680656a","status":"affected","lessThan":"986d5fafb73b8b866651399934b66d690f49135a","versionType":"git"},{"version":"078ff546a806b2c2ab74c25c8edd4c6d4680656a","status":"affected","lessThan":"8363c219d88e78daaee5665117a0380442989338","versionType":"git"},{"version":"078ff546a806b2c2ab74c25c8edd4c6d4680656a","status":"affected","lessThan":"6eb6ebcc8590007ad59ddccc8b5f9201655b33f8","versionType":"git"},{"version":"078ff546a806b2c2ab74c25c8edd4c6d4680656a","status":"affected","lessThan":"7958e67375aa111522086286bba13cfc0816ce8d","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/video/fbdev/omap2/omapfb/omapfb-main.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"2.6.36","status":"affected"},{"version":"0","status":"unaffected","lessThan":"2.6.36","versionType":"semver"},{"version":"6.1.191","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.160","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.114","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.57","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.1.3","status":"unaffected","lessThanOrEqual":"7.1.*","versionType":"semver"},{"version":"7.2","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/video/fbdev/omap2/omapfb/omapfb-main.c"]}],"references":["https://git.kernel.org/stable/c/a1a00f664a409b3412f9e1408c12890cffe50362","https://git.kernel.org/stable/c/5e10b1747547c3815e90d28166e92144835e065f","https://git.kernel.org/stable/c/986d5fafb73b8b866651399934b66d690f49135a","https://git.kernel.org/stable/c/8363c219d88e78daaee5665117a0380442989338","https://git.kernel.org/stable/c/6eb6ebcc8590007ad59ddccc8b5f9201655b33f8","https://git.kernel.org/stable/c/7958e67375aa111522086286bba13cfc0816ce8d"],"weaknesses":[],"ingestedAt":"2026-10-30T12:44:04.813Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/53xxx/CVE-2026-53401.json","commit":"db8103c5921aac81d5d90efcf3745980dafabf49","baselineCommit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-53401","state":"PUBLISHED","datePublished":"2026-07-19T12:02:01.209Z","dateUpdated":"2026-10-30T12:27:07.510Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-06-09T07:44:35.403Z"},"containers":{"cna":{"title":"fbdev: omap2: fix use-after-free in omapfb_mmap","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nfbdev: omap2: fix use-after-free in omapfb_mmap\n\nomapfb_mmap() has a race condition with OMAPFB_SETUP_PLANE ioctl that\ncan lead to use-after-free:\n\nThe fb_mmap() entry point holds mm_lock but not lock (fb_info->lock),\nwhile ioctl handlers like OMAPFB_SETUP_PLANE hold lock but not mm_lock.\nThis allows concurrent execution.\n\nIn omapfb_mmap():\n1. rg = omapfb_get_mem_region(ofbi->region);      // Get old region ref\n2. start = omapfb_get_region_paddr(ofbi);          // Read from NEW region\n3. len = fix->smem_len;                             // Read from NEW region\n4. vm_iomap_memory(vma, start, len);               // Map NEW region memory\n5. atomic_inc(&rg->map_count);                      // Increment OLD region!\n\nConcurrently, OMAPFB_SETUP_PLANE can:\n- Reassign ofbi->region = new_rg\n- Update fix->smem_len\n- OMAPFB_SETUP_MEM then checks NEW region's map_count (0!) and frees it\n\nThis leaves userspace with a mapping to freed physical memory.\n\nThe fix is to read all required values (start, len) from the same\nregion reference (rg) that will have its map_count incremented,\npreventing the region from being freed while still mapped."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"078ff546a806b2c2ab74c25c8edd4c6d4680656a","status":"affected","lessThan":"a1a00f664a409b3412f9e1408c12890cffe50362","versionType":"git"},{"version":"078ff546a806b2c2ab74c25c8edd4c6d4680656a","status":"affected","lessThan":"5e10b1747547c3815e90d28166e92144835e065f","versionType":"git"},{"version":"078ff546a806b2c2ab74c25c8edd4c6d4680656a","status":"affected","lessThan":"986d5fafb73b8b866651399934b66d690f49135a","versionType":"git"},{"version":"078ff546a806b2c2ab74c25c8edd4c6d4680656a","status":"affected","lessThan":"8363c219d88e78daaee5665117a0380442989338","versionType":"git"},{"version":"078ff546a806b2c2ab74c25c8edd4c6d4680656a","status":"affected","lessThan":"6eb6ebcc8590007ad59ddccc8b5f9201655b33f8","versionType":"git"},{"version":"078ff546a806b2c2ab74c25c8edd4c6d4680656a","status":"affected","lessThan":"7958e67375aa111522086286bba13cfc0816ce8d","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/video/fbdev/omap2/omapfb/omapfb-main.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"2.6.36","status":"affected"},{"version":"0","status":"unaffected","lessThan":"2.6.36","versionType":"semver"},{"version":"6.1.191","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.160","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.114","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.57","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.1.3","status":"unaffected","lessThanOrEqual":"7.1.*","versionType":"semver"},{"version":"7.2","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/video/fbdev/omap2/omapfb/omapfb-main.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/a1a00f664a409b3412f9e1408c12890cffe50362"},{"url":"https://git.kernel.org/stable/c/5e10b1747547c3815e90d28166e92144835e065f"},{"url":"https://git.kernel.org/stable/c/986d5fafb73b8b866651399934b66d690f49135a"},{"url":"https://git.kernel.org/stable/c/8363c219d88e78daaee5665117a0380442989338"},{"url":"https://git.kernel.org/stable/c/6eb6ebcc8590007ad59ddccc8b5f9201655b33f8"},{"url":"https://git.kernel.org/stable/c/7958e67375aa111522086286bba13cfc0816ce8d"}],"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 local syscalls (mmap and OMAPFB ioctls) against /dev/fb*; there is no network, adjacent-wireless, or physical-device insertion path to this driver code.\nAC:L - The attacker fully controls both sides of the race by opening /dev/fb and running concurrent mmap and OMAPFB_SETUP_PLANE/OMAPFB_SETUP_MEM ioctl threads, with no conditions outside attacker influence required for success.\nPR:L - Exploitation requires only the ability to open the framebuffer character device and issue its ioctls, which on OMAP embedded/kiosk deployments is typically granted to a local application user (video group or equivalent), not real root.\nUI:N - No victim interaction is required; the attacker triggers the race entirely through their own threads operating on a framebuffer device they can already open.\nS:U - Impact is confined to escalating within the same OS security boundary (userspace gaining read/write access to freed kernel/DMA physical memory), not a VM escape or cross-guest boundary crossing.\nC:H - The use-after-free leaves userspace mapped to freed physical pages that can be reallocated with sensitive kernel or DMA data, enabling arbitrary memory disclosure.\nI:H - The stale userspace mapping provides writable access to freed physical memory, enabling corruption of subsequently allocated kernel or DMA buffers and potential control-flow hijacking.\nA:H - Use-after-free of DMA framebuffer memory can cause kernel oopses or panics when freed pages are reused, and the UAF itself constitutes a high availability impact even before full exploitation."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-10-30T12:27:07.510Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.36","versionEndExcluding":"6.1.191"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.36","versionEndExcluding":"6.6.160"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.36","versionEndExcluding":"6.12.114"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.36","versionEndExcluding":"6.18.57"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.36","versionEndExcluding":"7.1.3"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.36","versionEndExcluding":"7.2"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}}}}}