diff options
Diffstat (limited to 'fs/exec.c')
| -rw-r--r-- | fs/exec.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/exec.c b/fs/exec.c index 6fcfb3f7b137..4e497b9ee71e 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -191,6 +191,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;  #ifdef CONFIG_STACK_GROWSUP  	if (write) { @@ -199,12 +200,16 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,  			return NULL;  	}  #endif + +	if (write) +		gup_flags |= FOLL_WRITE; +  	/*  	 * We are doing an exec().  'current' is the process  	 * doing the exec and bprm->mm is the new process's mm.  	 */ -	ret = get_user_pages_remote(current, bprm->mm, pos, 1, write, -			1, &page, NULL); +	ret = get_user_pages_remote(current, bprm->mm, pos, 1, gup_flags, +			&page, NULL);  	if (ret <= 0)  		return NULL;  | 
