[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <202104121306.3A73BEB0A5@keescook>
Date: Mon, 12 Apr 2021 13:08:38 -0700
From: Kees Cook <keescook@...omium.org>
To: Peter Zijlstra <peterz@...radead.org>
Cc: akpm@...ux-foundation.org, linux-kernel@...r.kernel.org,
boris.ostrovsky@...cle.com, jgross@...e.com,
sstabellini@...nel.org, x86@...nel.org,
jani.nikula@...ux.intel.com, joonas.lahtinen@...ux.intel.com,
rodrigo.vivi@...el.com, chris@...is-wilson.co.uk,
intel-gfx@...ts.freedesktop.org, linux-mm@...ck.org, hch@....de
Subject: Re: [PATCH 6/7] i915: Convert to verify_page_range()
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@...radead.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);
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
Powered by blists - more mailing lists