mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
vfio/cdx: prevent read-only region mappings from becoming writable
vfio_cdx_mmap() rejects writable mappings of regions without the WRITE flag, but leaves VM_MAYWRITE set. Userspace can map such a region read-only and then upgrade the mapping to writable with mprotect(), writing to MMIO regions the device marks read-only. Clear VM_MAYWRITE for regions without the WRITE flag, as i915 does for its read-only objects and as fixed in drm/vc4 (CVE-2026-68445), drm/panthor (CVE-2024-53071) and commita5edadbae5("ptp: vmclock: prevent read-only mappings from becoming writable"). Note this is defensive hardening: no in-tree cdx device currently publishes a region without the WRITE flag. The guard costs nothing and keeps the mmap() interface honest if a read-only region ever appears. Fixes:234489ac56("vfio/cdx: add support for CDX bus") Signed-off-by: Abdifatah Suruur <suruurism@gmail.com> Link: https://lore.kernel.org/r/20260929094848.7439-4-suruurism@gmail.com Signed-off-by: Alex Williamson <alex@shazbot.org>
This commit is contained in:
parent
25fd8b27ee
commit
9c5cd385d2
|
|
@ -281,9 +281,13 @@ static int vfio_cdx_mmap(struct vfio_device *core_vdev,
|
|||
(vma->vm_flags & VM_READ))
|
||||
return -EPERM;
|
||||
|
||||
if (!(vdev->regions[index].flags & VFIO_REGION_INFO_FLAG_WRITE) &&
|
||||
(vma->vm_flags & VM_WRITE))
|
||||
return -EPERM;
|
||||
/* Prevent read-only region mappings from being upgraded with mprotect() */
|
||||
if (!(vdev->regions[index].flags & VFIO_REGION_INFO_FLAG_WRITE)) {
|
||||
if (vma->vm_flags & VM_WRITE)
|
||||
return -EPERM;
|
||||
|
||||
vm_flags_clear(vma, VM_MAYWRITE);
|
||||
}
|
||||
|
||||
return vfio_cdx_mmap_mmio(vdev->regions[index], vma);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user