]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
Allow recursion in binfmt_script and binfmt_misc
authorKirill A. Shutemov <kirill@shutemov.name>
Thu, 16 Oct 2008 05:02:39 +0000 (22:02 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sat, 13 Dec 2008 23:29:33 +0000 (15:29 -0800)
commit0993210979a0ce0b25a1949fdbeeb07782747978
tree60d448e00f9fa0462c3fe466c5dda1b3f491311f
parentf8220954306c6fdc127a5ec645e825991fc97812
Allow recursion in binfmt_script and binfmt_misc

commit bf2a9a39639b8b51377905397a5005f444e9a892 upstream.

binfmt_script and binfmt_misc disallow recursion to avoid stack overflow
using sh_bang and misc_bang.  It causes problem in some cases:

$ echo '#!/bin/ls' > /tmp/t0
$ echo '#!/tmp/t0' > /tmp/t1
$ echo '#!/tmp/t1' > /tmp/t2
$ chmod +x /tmp/t*
$ /tmp/t2
zsh: exec format error: /tmp/t2

Similar problem with binfmt_misc.

This patch introduces field 'recursion_depth' into struct linux_binprm to
track recursion level in binfmt_misc and binfmt_script.  If recursion
level more then BINPRM_MAX_RECURSION it generates -ENOEXEC.

[akpm@linux-foundation.org: make linux_binprm.recursion_depth a uint]
Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
Cc: Pavel Emelyanov <xemul@openvz.org>
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/binfmt_em86.c
fs/binfmt_misc.c
fs/binfmt_script.c
include/linux/binfmts.h