• Luis R. Rodriguez's avatar
    kmod: fix wait on recursive loop · 2ba293c9
    Luis R. Rodriguez authored
    Recursive loops with module loading were previously handled in kmod by
    restricting the number of modprobe calls to 50 and if that limit was
    breached request_module() would return an error and a user would see the
    following on their kernel dmesg:
    
      request_module: runaway loop modprobe binfmt-464c
      Starting init:/sbin/init exists but couldn't execute it (error -8)
    
    This issue could happen for instance when a 64-bit kernel boots a 32-bit
    userspace on some architectures and has no 32-bit binary format
    hanlders.  This is visible, for instance, when a CONFIG_MODULES enabled
    64-bit MIPS kernel boots a into o32 root filesystem and the binfmt
    handler for o32 binaries is not built-in.
    
    After commit 6d7964a7 ("kmod: throttle kmod thread limit") we now
    don't have any visible signs of an error and the kernel just waits for
    the loop to end somehow.
    
    Although this *particular* recursive loop could also be addressed by
    doing a sanity check on search_binary_handler() and disallowing a
    modular binfmt to be required for modprobe, a generic solution for any
    recursive kernel kmod issues is still needed.
    
    This should catch these loops.  We can investigate each loop and address
    each one separately as they come in, this however puts a stop gap for
    them as before.
    
    Link: http://lkml.kernel.org/r/20170809234635.13443-3-mcgrof@kernel.org
    Fixes: 6d7964a7 ("kmod: throttle kmod thread limit")
    Signed-off-by: default avatarLuis R. Rodriguez <mcgrof@kernel.org>
    Reported-by: default avatarMatt Redfearn <matt.redfearn@imgtec.com>
    Tested-by: default avatarMatt Redfearn <matt.redfearn@imgetc.com>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Cc: Colin Ian King <colin.king@canonical.com>
    Cc: Dan Carpenter <dan.carpenter@oracle.com>
    Cc: Daniel Mentz <danielmentz@google.com>
    Cc: David Binderman <dcb314@hotmail.com>
    Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jessica Yu <jeyu@redhat.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Michal Marek <mmarek@suse.com>
    Cc: Miroslav Benes <mbenes@suse.cz>
    Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: Rusty Russell <rusty@rustcorp.com.au>
    Cc: Shuah Khan <shuah@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    2ba293c9
kmod.c 20.1 KB