[PATCH] drm/panthor: Be stricter about IO mapping flags
Steven Price
steven.price at arm.com
Wed Nov 6 11:27:42 UTC 2024
On 04/11/2024 23:17, Jann Horn wrote:
> The current panthor_device_mmap_io() implementation has two issues:
>
> 1. For mapping DRM_PANTHOR_USER_FLUSH_ID_MMIO_OFFSET,
> panthor_device_mmap_io() bails if VM_WRITE is set, but does not clear
> VM_MAYWRITE. That means userspace can use mprotect() to make the mapping
> writable later on. This is a classic Linux driver gotcha.
> I don't think this actually has any impact in practice:
> When the GPU is powered, writes to the FLUSH_ID seem to be ignored; and
> when the GPU is not powered, the dummy_latest_flush page provided by the
> driver is deliberately designed to not do any flushes, so the only thing
> writing to the dummy_latest_flush could achieve would be to make *more*
> flushes happen.
>
> 2. panthor_device_mmap_io() does not block MAP_PRIVATE mappings (which are
> mappings without the VM_SHARED flag).
> MAP_PRIVATE in combination with VM_MAYWRITE indicates that the VMA has
> copy-on-write semantics, which for VM_PFNMAP are semi-supported but
> fairly cursed.
> In particular, in such a mapping, the driver can only install PTEs
> during mmap() by calling remap_pfn_range() (because remap_pfn_range()
> wants to **store the physical address of the mapped physical memory into
> the vm_pgoff of the VMA**); installing PTEs later on with a fault
> handler (as panthor does) is not supported in private mappings, and so
> if you try to fault in such a mapping, vmf_insert_pfn_prot() splats when
> it hits a BUG() check.
>
> Fix it by clearing the VM_MAYWRITE flag (userspace writing to the FLUSH_ID
> doesn't make sense) and requiring VM_SHARED (copy-on-write semantics for
> the FLUSH_ID don't make sense).
>
> Reproducers for both scenarios are in the notes of my patch on the mailing
> list; I tested that these bugs exist on a Rock 5B machine.
>
> Note that I only compile-tested the patch, I haven't tested it; I don't
> have a working kernel build setup for the test machine yet. Please test it
> before applying it.
>
> Cc: stable at vger.kernel.org
> Fixes: 5fe909cae118 ("drm/panthor: Add the device logical block")
> Signed-off-by: Jann Horn <jannh at google.com>
Reviewed-by: Steven Price <steven.price at arm.com>
Thanks,
Steve
More information about the dri-devel
mailing list