exec: Remove FOLL_FORCE for stack setup

Message ID 20221118003410.never.653-kees@kernel.org
State New
Headers
Series exec: Remove FOLL_FORCE for stack setup |

Commit Message

Kees Cook Nov. 18, 2022, 12:34 a.m. UTC
  It does not appear that FOLL_FORCE should be needed for setting up the
stack pages. They are allocated using the nascent brpm->vma, which was
newly created with VM_STACK_FLAGS, which an arch can override, but they
all appear to include VM_WRITE | VM_MAYWRITE. Remove FOLL_FORCE.

Cc: Eric Biederman <ebiederm@xmission.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Cc: linux-mm@kvack.org
Link: https://lore.kernel.org/lkml/202211171439.CDE720EAD@keescook/
Signed-off-by: Kees Cook <keescook@chromium.org>
---
 fs/exec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

David Hildenbrand Nov. 18, 2022, 8:57 a.m. UTC | #1
On 18.11.22 01:34, Kees Cook wrote:
> It does not appear that FOLL_FORCE should be needed for setting up the
> stack pages. They are allocated using the nascent brpm->vma, which was
> newly created with VM_STACK_FLAGS, which an arch can override, but they
> all appear to include VM_WRITE | VM_MAYWRITE. Remove FOLL_FORCE.
> 
> Cc: Eric Biederman <ebiederm@xmission.com>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: Linus Torvalds <torvalds@linux-foundation.org>
> Cc: Alexander Viro <viro@zeniv.linux.org.uk>
> Cc: linux-fsdevel@vger.kernel.org
> Cc: linux-mm@kvack.org
> Link: https://lore.kernel.org/lkml/202211171439.CDE720EAD@keescook/
> Signed-off-by: Kees Cook <keescook@chromium.org>

Thanks for looking into this!

Reviewed-by: David Hildenbrand <david@redhat.com>
  

Patch

diff --git a/fs/exec.c b/fs/exec.c
index 9585bc1bc970..870a707b5d3b 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -200,7 +200,7 @@  static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
 {
 	struct page *page;
 	int ret;
-	unsigned int gup_flags = FOLL_FORCE;
+	unsigned int gup_flags = 0;
 
 #ifdef CONFIG_STACK_GROWSUP
 	if (write) {