Kees Cook d740269867 exec: use -ELOOP for max recursion depth
To avoid an explosion of request_module calls on a chain of abusive
scripts, fail maximum recursion with -ELOOP instead of -ENOEXEC. As soon
as maximum recursion depth is hit, the error will fail all the way back
up the chain, aborting immediately.

This also has the side-effect of stopping the user's shell from attempting
to reexecute the top-level file as a shell script. As seen in the
dash source:

        if (cmd != path_bshell && errno == ENOEXEC) {
                *argv-- = cmd;
                *argv = cmd = path_bshell;
                goto repeat;
        }

The above logic was designed for running scripts automatically that lacked
the "#!" header, not to re-try failed recursion. On a legitimate -ENOEXEC,
things continue to behave as the shell expects.

Additionally, when tracking recursion, the binfmt handlers should not be
involved. The recursion being tracked is the depth of calls through
search_binary_handler(), so that function should be exclusively responsible
for tracking the depth.

Signed-off-by: Kees Cook <keescook@chromium.org>
Cc: halfdog <me@halfdog.net>
Cc: P J P <ppandit@redhat.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-12-17 17:15:23 -08:00
..
2012-11-16 11:20:42 -06:00
2012-10-09 23:33:38 -04:00
2012-10-17 09:18:38 -05:00
2012-10-09 18:35:22 -04:00
2012-10-06 03:05:31 +09:00
2012-07-14 16:34:47 +04:00
2012-11-26 16:25:36 -08:00
2012-10-09 23:33:39 -04:00
2012-10-09 23:33:39 -04:00
2012-09-07 14:57:46 -04:00
2012-10-22 08:50:37 +03:00
2012-10-29 09:00:57 -07:00
2012-10-09 15:52:31 +09:00
2012-11-28 21:49:02 -05:00
2012-12-10 16:30:43 -05:00
2012-10-09 18:35:22 -04:00
2012-07-14 16:32:48 +04:00
2012-11-29 22:17:21 -05:00
2012-09-26 21:08:52 -04:00
2012-10-09 23:33:39 -04:00