* Pedro Falcato <pedro.falcato@xxxxxxxxx> [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 <pedro.falcato@xxxxxxxxx> Reviewed-by: Liam R. Howlett <Liam.Howlett@xxxxxxxxxx> > --- > 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 >