Messages in this thread | | | Date | Sat, 01 Mar 2008 09:21:13 -0500 | From | Carlos O'Donell <> | Subject | Re: [RFC/PATCH] RLIMIT_ARG_MAX |
| |
Linus Torvalds wrote: > On Fri, 29 Feb 2008, Linus Torvalds wrote: >> I do agree that we should at least make the "MAX(stacksize/4, 128k)" >> change for backwards compatibility. > > How about something like this?
This is perfect. As the original submitter of the bug my primary interest is in having the regression fixed.
> The alternative is to just remove that size check entirely, and depend on > get_user_pages() doing the stack limit check (among all the *other* checks > it does when it does the acct_stack_growth() thing). > > I'd almost prefer that simpler approach, but I don't have any really > strong preferences. Anybody? > > Linus > > --- > fs/exec.c | 10 +++++++++- > 1 files changed, 9 insertions(+), 1 deletions(-) > > diff --git a/fs/exec.c b/fs/exec.c > index a44b142..e91f9cb 100644 > --- a/fs/exec.c > +++ b/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 of argument > + * strings even with small stacks > + */ > + if (size <= 32*PAGE_SIZE) > + return page;
Could you use ARG_MAX as defined in include/linux/limits.h?
> > /* > * 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;
Cheers, Carlos. -- Carlos O'Donell CodeSourcery carlos@codesourcery.com (650) 331-3385 x716
| |