Message ID | 20210412080611.902470568@infradead.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mm: Unexport apply_to_page_range() | expand |
Looks good,
Reviewed-by: Christoph Hellwig <hch@lst.de>
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@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); 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);
On Mon, Apr 12, 2021 at 01:08:38PM -0700, Kees Cook wrote: > On Mon, Apr 12, 2021 at 10:00:18AM +0200, Peter Zijlstra wrote: > > @@ -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); OK, lemme try that.
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@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...)
--- 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); } static int check_absent(unsigned long addr, unsigned long len) { - return apply_to_page_range(current->mm, addr, len, - check_absent_pte, (void *)addr); + return verify_page_range(current->mm, addr, len, + check_absent_pte, (void *)addr); } static int prefault_range(u64 start, u64 len)
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@infradead.org> --- drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)