CVE-2026-98522: drm/imagination: Propagate map failures correctly from pvr_mmu_map_sgl()
In the Linux kernel, the following vulnerability has been resolved:
drm/imagination: Propagate map failures correctly from pvrmmumapsgl()
Map failure from pvrmmumapsgl() interface was not returned correctly to pvrmmumap() interface. This resulted in pvrmmumap() interface to continue instead of returning an error to caller. Fix it by returning a proper error code from pvrmmumapsgl() interface.
Call stack for crash: [ 1179.286237] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008 [ 1179.295067] Mem abort info: [ 1179.297877] ESR = 0x0000000096000004 [ 1179.301656] EC = 0x25: DABT (current EL), IL = 32 bits [ 1179.306987] SET = 0, FnV = 0 [ 1179.310048] EA = 0, S1PTW = 0 [ 1179.313198] FSC = 0x04: level 0 translation fault [ 1179.318096] Data abort info: [ 1179.320993] ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000 [ 1179.326483] CM = 0, WnR = 0, TnD = 0, TagAccess = 0 [ 1179.331546] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0 [ 1179.336895] user pgtable: 4k pages, 48-bit VAs, pgdp=000000009822a000 [ 1179.343402] [0000000000000008] pgd=0000000000000000, p4d=0000000000000000 [ 1179.350243] Internal error: Oops: 0000000096000004 [#2] SMP [ 1179.355908] Modules linked in: powervr gpusched drmshmemhelper drmgpuvm drmexec xhciplathcd xhcihcd dwc3 usbcore usbcommon sndsocsimplecard sndsocsimplecardutils dwc3am62 at24 sa2ul sha512 libsha512 sha256 authenc schfqcodel fuse dmmod ipv6 [ 1179.378992] CPU: 1 UID: 1000 PID: 680 Comm: deqp-vk Tainted: G D 6.17.0 #1 PREEMPT [ 1179.388120] Tainted: [D]=DIE [ 1179.390994] Hardware name: Texas Instruments AM625 SK (DT) [ 1179.396467] pstate: 00000005 (nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 1179.403415] pc : pvrmmuopcontextunmapcurrpage+0x6c/0x134 [powervr] [ 1179.410140] lr : pvrmmuopcontextunmapcurrpage+0x58/0x134 [powervr] [ 1179.416848] sp : ffff8000839ab8c0 [ 1179.420153] x29: ffff8000839ab8c0 x28: 0000000000000001 x27: 000000008f386000 [ 1179.427283] x26: ffff000016d1df98 x25: 0000000000247000 x24: 00000000000001e6 [ 1179.434413] x23: 0000000000000002 x22: 000000000000ffff x21: 0000000000000247 [ 1179.441540] x20: 0000000000000245 x19: ffff000016d1df60 x18: 0000000000000002 [ 1179.448668] x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000001 [ 1179.455793] x14: 0000000000060810 x13: ffff80007fffffff x12: ffff000004190480 [ 1179.462921] x11: ffff8000853f7000 x10: ffff8000811ae000 x9 : ffff0000041900b8 [ 1179.470051] x8 : 0000000000000000 x7 : 00000000990c4001 x6 : 0000000000000007 [ 1179.477177] x5 : ffff000016d1df60 x4 : 0000000000000000 x3 : ffff00000a7d8000 [ 1179.484306] x2 : 00000000000001ff x1 : 0000000000000000 x0 : 0000000000000000 [ 1179.491433] Call trace: [ 1179.493872] pvrmmuopcontextunmapcurrpage+0x6c/0x134 [powervr] (P) [ 1179.500582] pvrmmumap+0x31c/0x388 [powervr] [ 1179.505027] pvrvmgpuvamap+0x40/0x88 [powervr] [ 1179.509732] drmgpuvmsmmap+0x250/0x44c [drmgpuvm] [ 1179.514952] drmgpuvmsmmap+0x48/0x5c [drmgpuvm] [ 1179.519822] pvrvmbindopexec+0x64/0x70 [powervr] [ 1179.524785] pvrvmmap+0x1f8/0x2a8 [powervr] [ 1179.529142] pvrioctlvmmap+0x12c/0x188 [powervr] [ 1179.534018] drmioctlkernel+0xb8/0x128 [ 1179.537941] drmioctl+0x21c/0x4ec [ 1179.541337] arm64sysioctl+0xac/0x108 [ 1179.545344] invokesyscall+0x44/0x100 [ 1179.549091] el0svccommon.constprop.0+0x40/0xe0 [ 1179.553790] doel0svc+0x1c/0x28 [ 1179.557106] el0svc+0x34/0xf0 [ 1179.560159] el0t64synchandler+0xd0/0xe4 [ 1179.564334] el0t64sync+0x198/0x19c [ 1179.567996] Code: 54000300 35000360 f9402261 79409a62 (f9400421) [ 1179.574081] ---[ end trace 0000000000000000 ]---
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
ubuntu/linux-hwe-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42~24.04.1 - Upgrade
Upgrade
ubuntu/linux-riscv-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1~24.04.1 - Upgrade
Upgrade
ubuntu/linuxto a version that resolves this vulnerability.Fixed in 7.0.0-42.42 - Upgrade
Upgrade
ubuntu/linux-awsto a version that resolves this vulnerability.Fixed in 7.0.0-1016.17 - Upgrade
Upgrade
ubuntu/linux-gcpto a version that resolves this vulnerability.Fixed in 7.0.0-1016.18 - Upgrade
Upgrade
ubuntu/linux-ibmto a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oem-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oracleto a version that resolves this vulnerability.Fixed in 7.0.0-1015.16 - Upgrade
Upgrade
ubuntu/linux-riscvto a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1 - Upgrade
Upgrade
linux/Kernelto a version that resolves this vulnerability.Fixed in 6.12.112 - Upgrade
Upgrade
linux/Kernelto a version that resolves this vulnerability.Fixed in 6.18.55 - Upgrade
Upgrade
linux/Kernelto a version that resolves this vulnerability.Fixed in 7.2.9 - Compensating control
Update pvr_mmu_map_sgl() to return map failures correctly to pvr_mmu_map(), so pvr_mmu_map() stops and returns an error to its caller instead of continuing.
Event History
Frequently Asked Questions
What condition triggers the crash?
The crash can occur when pvr_mmu_map_sgl() fails to map memory but does not propagate that failure to pvr_mmu_map(). The caller then continues execution after a failed mapping, which can lead to a kernel NULL pointer dereference.
How can I determine whether a system has encountered this issue?
Look for a kernel Oops reporting an "Unable to handle kernel NULL pointer dereference" at virtual address 0000000000000008. The supplied crash trace identifies a level 0 translation fault and an internal error with ESR 0x0000000096000004.
What is the effect of the fix?
The fix causes pvr_mmu_map_sgl() to return an appropriate error when mapping fails. This allows pvr_mmu_map() to stop and return an error to its caller rather than continuing with an unsuccessful mapping.