[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <41c73be0-8d9a-4d81-bc51-933ec0bbcbc5@arm.com>
Date: Wed, 6 Nov 2024 11:27:42 +0000
From: Steven Price <steven.price@....com>
To: Jann Horn <jannh@...gle.com>,
Boris Brezillon <boris.brezillon@...labora.com>,
Liviu Dudau <liviu.dudau@....com>
Cc: dri-devel@...ts.freedesktop.org, linux-kernel@...r.kernel.org,
stable@...r.kernel.org
Subject: Re: [PATCH] drm/panthor: Be stricter about IO mapping flags
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@...r.kernel.org
> Fixes: 5fe909cae118 ("drm/panthor: Add the device logical block")
> Signed-off-by: Jann Horn <jannh@...gle.com>
Reviewed-by: Steven Price <steven.price@....com>
Thanks,
Steve
Powered by blists - more mailing lists