From a9c3f320c8fce7025ca784804eef78827d35c610 Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Fri, 16 Jun 2023 13:55:11 -0400 Subject: [PATCH] attempt 2 Signed-off-by: Liam R. Howlett --- mm/memory.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index 44d10fa417be..a9b587633878 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -5349,19 +5349,14 @@ struct vm_area_struct *lock_mm_and_find_vma(struct mm_struct *mm, return NULL; } err = expand_stack(vma, addr, false); - if (unlikely(err)){ - if (err != -EAGAIN) { - mmap_read_unlock(mm); - return NULL; - } + if (err == -EAGAIN){ if (!upgrade_mmap_lock_carefully(mm, regs)) return NULL; - vma = find_vma(mm, addr); - if (!vma || expand_stack(vma, addr, true)) { - mmap_write_unlock(mm); - return NULL; - } + vma = find_extend_vma_locked(mm, addr, true); mmap_write_downgrade(mm); + } else if (err) { + mmap_read_unlock(mm); + return NULL; } return vma; } @@ -5416,9 +5411,7 @@ struct vm_area_struct *find_extend_vma_locked(struct mm_struct *mm, return vma; start = vma->vm_start; err = expand_stack(vma, addr, write_locked); - if (unlikely(err)) { - if (err != -EAGAIN) - return NULL; + if (err == -EAGAIN) { if (!upgrade_mmap_lock_carefully(mm, NULL)) return NULL; vma = find_vma(mm, addr); @@ -5427,6 +5420,8 @@ struct vm_area_struct *find_extend_vma_locked(struct mm_struct *mm, return NULL; } mmap_write_downgrade(mm); + } else if (err) { + return NULL; } if (vma->vm_flags & VM_LOCKED) populate_vma_page_range(vma, addr, start, NULL); -- 2.49.0