From e50645e774a02395f5bc3e3291327cd63cf4ee63 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Mon, 3 Mar 2008 10:12:14 -0800 Subject: [PATCH] --- yaml --- r: 86627 b: refs/heads/master c: a64e715fc74b1a7dcc5944f848acc38b2c4d4ee2 h: refs/heads/master i: 86625: 51954f2eccac61ea87ac6a26d63efa678e858320 86623: 18b8436cd799bcd496ad498a86837d4c6538189e v: v3 --- [refs] | 2 +- trunk/fs/exec.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index cc356aa60023..9fb7f3390aa7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a345b4ba2086bacc63884e5d72268415a97bcbff +refs/heads/master: a64e715fc74b1a7dcc5944f848acc38b2c4d4ee2 diff --git a/trunk/fs/exec.c b/trunk/fs/exec.c index a44b142fb460..54a0a557b678 100644 --- a/trunk/fs/exec.c +++ b/trunk/fs/exec.c @@ -173,8 +173,15 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos, return NULL; if (write) { - struct rlimit *rlim = current->signal->rlim; unsigned long size = bprm->vma->vm_end - bprm->vma->vm_start; + struct rlimit *rlim; + + /* + * We've historically supported up to 32 pages (ARG_MAX) + * of argument strings even with small stacks + */ + if (size <= ARG_MAX) + return page; /* * Limit to 1/4-th the stack size for the argv+env strings. @@ -183,6 +190,7 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos, * - the program will have a reasonable amount of stack left * to work from. */ + rlim = current->signal->rlim; if (size > rlim[RLIMIT_STACK].rlim_cur / 4) { put_page(page); return NULL;