Re: [patch 0/3] no MAX_ARG_PAGES -v2

Ollie Wild
2007-06-14T20:59:21Z

> @@ -1385,6 +1401,10 @@ int do_execve(char * filename,
> goto out;
> bprm->argv_len = env_p - bprm->p;
>
> + retval = expand_arg_vma(bprm);
> + if (retval < 0)
> + goto out;
> +
> retval = search_binary_handler(bprm,regs);
> if (retval >= 0) {
> /* execve success */

At this point bprm->argc hasn't been finalized yet. For example, the
script binfmt reads the script header and adds additional arguments.
The flush_old_exec() function is a better place to call this.

I'm not 100% sure this is the right way to handle this, though. The
problem isn't as simple as ensuring the stack doesn't overflow during
argument allocation. We also need to ensure the program has
sufficient stack space to run subsequently. Otherwise, the observable
behavior is identical. Since we can't realistically predict
acceptable stack availability requirements, some amount of uncertainty
is always going to exist. A good heuristic, though, might be to limit
argument size to a percentage (say 25%) of maximum stack size and
validate this inside copy_strings().

Ollie