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) <pet...@infradead.org>
> ---
>  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

Reply via email to