| From: Xiu Jianfeng <xiujianfeng@huawei.com> |
| Subject: mm: remove duplicated vma->vm_flags check when expanding stack |
| Date: Wed, 6 Sep 2023 10:33:12 +0000 |
| |
| expand_upwards() and expand_downwards() will return -EFAULT if VM_GROWSUP |
| or VM_GROWSDOWN is not correctly set in vma->vm_flags, however in |
| !CONFIG_STACK_GROWSUP case, expand_stack_locked() returns -EINVAL first if |
| !(vma->vm_flags & VM_GROWSDOWN) before calling expand_downwards(), to keep |
| the consistency with CONFIG_STACK_GROWSUP case, remove this check. |
| |
| The usages of this function are as below: |
| |
| A:fs/exec.c |
| ret = expand_stack_locked(vma, stack_base); |
| if (ret) |
| ret = -EFAULT; |
| |
| or |
| |
| B:mm/memory.c mm/mmap.c |
| if (expand_stack_locked(vma, addr)) |
| return NULL; |
| |
| which means the return value will not propagate to other places, so I |
| believe there is no user-visible effects of this change, and it's |
| unnecessary to backport to earlier versions. |
| |
| Link: https://lkml.kernel.org/r/20230906103312.645712-1-xiujianfeng@huaweicloud.com |
| Fixes: f440fa1ac955 ("mm: make find_extend_vma() fail if write lock not held") |
| Signed-off-by: Xiu Jianfeng <xiujianfeng@huawei.com> |
| Cc: Liam R. Howlett <Liam.Howlett@oracle.com> |
| Cc: Matthew Wilcox (Oracle) <willy@infradead.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| mm/mmap.c | 2 -- |
| 1 file changed, 2 deletions(-) |
| |
| --- a/mm/mmap.c~mm-remove-duplicated-vma-vm_flags-check-when-expanding-stack |
| +++ a/mm/mmap.c |
| @@ -2159,8 +2159,6 @@ struct vm_area_struct *find_extend_vma_l |
| #else |
| int expand_stack_locked(struct vm_area_struct *vma, unsigned long address) |
| { |
| - if (unlikely(!(vma->vm_flags & VM_GROWSDOWN))) |
| - return -EINVAL; |
| return expand_downwards(vma, address); |
| } |
| |
| _ |