On Mon, Apr 12, 2021 at 10:00:18AM +0200, Peter Zijlstra wrote: > check_{present,absent}() only need R/O access, use verify_page_range() > instead to remove modular use of apply_to_page_range(). > > Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c > @@ -1225,9 +1225,9 @@ static int igt_mmap_gpu(void *arg) > return 0; > } > > -static int check_present_pte(pte_t *pte, unsigned long addr, void *data) > +static int check_present_pte(pte_t pte, unsigned long addr, void *data) > { > - if (!pte_present(*pte) || pte_none(*pte)) { > + if (!pte_present(pte) || pte_none(pte)) { > pr_err("missing PTE:%lx\n", > (addr - (unsigned long)data) >> PAGE_SHIFT); > return -EINVAL; > @@ -1236,9 +1236,9 @@ static int check_present_pte(pte_t *pte, > return 0; > } > > -static int check_absent_pte(pte_t *pte, unsigned long addr, void *data) > +static int check_absent_pte(pte_t pte, unsigned long addr, void *data) > { > - if (pte_present(*pte) && !pte_none(*pte)) { > + if (pte_present(pte) && !pte_none(pte)) { > pr_err("present PTE:%lx; expected to be revoked\n", > (addr - (unsigned long)data) >> PAGE_SHIFT); > return -EINVAL; > @@ -1249,14 +1249,14 @@ static int check_absent_pte(pte_t *pte, > > static int check_present(unsigned long addr, unsigned long len) > { > - return apply_to_page_range(current->mm, addr, len, > - check_present_pte, (void *)addr); > + return verify_page_range(current->mm, addr, len, > + check_present_pte, (void *)addr); > } And this would be: static int check_present(unsigned long addr, unsigned long len) unsigned long fail; fail = verify_page_range(current->mm, addr, len, check_present_pte); if (fail) { pr_err("missing PTE:%lx\n", addr); return -EINVAL; } } (Oh, and I think I messed up the page shifting macro name in the earlier one...) -- Kees Cook