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); For example, switch to returning bad addr through verify_page_range(), or have a by-reference value, etc: unsigned long failed; failed = verify_page_range(current->mm< addr, len, check_present_pte); if (failed) { pr_err("missing PTE:%lx\n", (addr - failed) >> PAGE_SHIFT); -- Kees Cook