* Pedro Falcato <[email protected]> [240816 20:19]:
> Avoid taking an extra trip down the mmap tree by checking the vmas
> directly. mprotect (per POSIX) tolerates partial failure.
> 
> Signed-off-by: Pedro Falcato <[email protected]>

Reviewed-by: Liam R. Howlett <[email protected]>

> ---
>  mm/mprotect.c | 12 +++---------
>  1 file changed, 3 insertions(+), 9 deletions(-)
> 
> diff --git a/mm/mprotect.c b/mm/mprotect.c
> index 446f8e5f10d9..0c5d6d06107d 100644
> --- a/mm/mprotect.c
> +++ b/mm/mprotect.c
> @@ -611,6 +611,9 @@ mprotect_fixup(struct vma_iterator *vmi, struct 
> mmu_gather *tlb,
>       unsigned long charged = 0;
>       int error;
>  
> +     if (!can_modify_vma(vma))
> +             return -EPERM;
> +
>       if (newflags == oldflags) {
>               *pprev = vma;
>               return 0;
> @@ -769,15 +772,6 @@ static int do_mprotect_pkey(unsigned long start, size_t 
> len,
>               }
>       }
>  
> -     /*
> -      * checking if memory is sealed.
> -      * can_modify_mm assumes we have acquired the lock on MM.
> -      */
> -     if (unlikely(!can_modify_mm(current->mm, start, end))) {
> -             error = -EPERM;
> -             goto out;
> -     }
> -
>       prev = vma_prev(&vmi);
>       if (start > vma->vm_start)
>               prev = vma;
> 
> -- 
> 2.46.0
> 

Reply via email to