mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 05:04:09 +08:00
drivers/misc/open-dice: don't touch VM_MAYSHARE
A MAP_SHARED mapping always has VM_MAYSHARE set, and writable (VM_MAYWRITE) MAP_SHARED mappings have VM_SHARED set as well. To identify a MAP_SHARED mapping, it's sufficient to look at VM_MAYSHARE. We cannot have VM_MAYSHARE|VM_WRITE mappings without having VM_SHARED set. Consequently, current code will never actually end up clearing VM_MAYSHARE and that code is confusing, because nobody is supposed to mess with VM_MAYWRITE. Let's clean it up and restructure the code. No functional change intended. Link: https://lkml.kernel.org/r/20230102160856.500584-4-david@redhat.com Signed-off-by: David Hildenbrand <david@redhat.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Jens Axboe <axboe@kernel.dk> Cc: Nicolas Pitre <nico@fluxnic.net> Cc: Pavel Begunkov <asml.silence@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
b6b7a8faf0
commit
997931ce02
@ -90,15 +90,13 @@ static int open_dice_mmap(struct file *filp, struct vm_area_struct *vma)
|
||||
{
|
||||
struct open_dice_drvdata *drvdata = to_open_dice_drvdata(filp);
|
||||
|
||||
/* Do not allow userspace to modify the underlying data. */
|
||||
if ((vma->vm_flags & VM_WRITE) && (vma->vm_flags & VM_SHARED))
|
||||
return -EPERM;
|
||||
|
||||
/* Ensure userspace cannot acquire VM_WRITE + VM_SHARED later. */
|
||||
if (vma->vm_flags & VM_WRITE)
|
||||
vma->vm_flags &= ~VM_MAYSHARE;
|
||||
else if (vma->vm_flags & VM_SHARED)
|
||||
if (vma->vm_flags & VM_MAYSHARE) {
|
||||
/* Do not allow userspace to modify the underlying data. */
|
||||
if (vma->vm_flags & VM_WRITE)
|
||||
return -EPERM;
|
||||
/* Ensure userspace cannot acquire VM_WRITE later. */
|
||||
vma->vm_flags &= ~VM_MAYWRITE;
|
||||
}
|
||||
|
||||
/* Create write-combine mapping so all clients observe a wipe. */
|
||||
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
|
||||
|
Loading…
Reference in New Issue
Block a user