lkml.org 
[lkml]   [2008]   [Sep]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 05/42] binfmt_misc: fix false -ENOEXEC when coupled with other binary handlers
    2.6.26-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Pavel Emelyanov <xemul@openvz.org>

    commit ff9bc512f198eb47204f55b24c6fe3d36ed89592 upstream

    Date: Wed, 20 Aug 2008 14:09:10 -0700
    Subject: [patch 05/42] binfmt_misc: fix false -ENOEXEC when coupled with other binary handlers

    In case the binfmt_misc binary handler is registered *before* the e.g.
    script one (when for example being compiled as a module) the following
    situation may occur:

    1. user launches a script, whose interpreter is a misc binary;
    2. the load_misc_binary sets the misc_bang and returns -ENOEVEC,
    since the binary is a script;
    3. the load_script_binary loads one and calls for search_binary_hander
    to run the interpreter;
    4. the load_misc_binary is called again, but refuses to load the
    binary due to misc_bang bit set.

    The fix is to move the misc_bang setting lower - prior to the actual
    call to the search_binary_handler.

    Caused by the commit 3a2e7f47 (binfmt_misc.c: avoid potential kernel
    stack overflow)

    Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
    Reported-by: Kirill A. Shutemov <kirill@shutemov.name>
    Tested-by: Kirill A. Shutemov <kirill@shutemov.name>
    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_misc.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/fs/binfmt_misc.c
    +++ b/fs/binfmt_misc.c
    @@ -119,8 +119,6 @@ static int load_misc_binary(struct linux
    if (bprm->misc_bang)
    goto _ret;

    - bprm->misc_bang = 1;
    -
    /* to keep locking time low, we copy the interpreter string */
    read_lock(&entries_lock);
    fmt = check_file(bprm);
    @@ -198,6 +196,8 @@ static int load_misc_binary(struct linux
    if (retval < 0)
    goto _error;

    + bprm->misc_bang = 1;
    +
    retval = search_binary_handler (bprm, regs);
    if (retval < 0)
    goto _error;
    --


    \
     
     \ /
      Last update: 2008-09-03 19:37    [W:0.022 / U:0.500 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site