Messages in this thread | | | Subject | Re: [PATCH 2/2] mm/hmm: hmm_range_fault() infinite loop | From | Ralph Campbell <> | Date | Tue, 27 Aug 2019 13:16:13 -0700 |
| |
On 8/27/19 11:41 AM, Jason Gunthorpe wrote: > On Fri, Aug 23, 2019 at 03:17:53PM -0700, Ralph Campbell wrote: > >> Signed-off-by: Ralph Campbell <rcampbell@nvidia.com> >> mm/hmm.c | 3 +++ >> 1 file changed, 3 insertions(+) >> >> diff --git a/mm/hmm.c b/mm/hmm.c >> index 29371485fe94..4882b83aeccb 100644 >> +++ b/mm/hmm.c >> @@ -292,6 +292,9 @@ static int hmm_vma_walk_hole_(unsigned long addr, unsigned long end, >> hmm_vma_walk->last = addr; >> i = (addr - range->start) >> PAGE_SHIFT; >> >> + if (write_fault && walk->vma && !(walk->vma->vm_flags & VM_WRITE)) >> + return -EPERM; > > Can walk->vma be NULL here? hmm_vma_do_fault() touches it > unconditionally. > > Jason > walk->vma can be NULL. hmm_vma_do_fault() no longer touches it unconditionally, that is what the preceding patch fixes. I suppose I could change hmm_vma_walk_hole_() to check for NULL and fill in the pfns[] array, I just chose to handle it in hmm_vma_do_fault().
| |