]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - kernel/kmod.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris...
[karo-tx-linux.git] / kernel / kmod.c
index d45c96073afbaf09f6734065ac438fadcc131f69..563f97e2be3618574f523e2e96442c80ae7bc882 100644 (file)
@@ -20,6 +20,8 @@
 */
 #include <linux/module.h>
 #include <linux/sched.h>
+#include <linux/sched/task.h>
+#include <linux/binfmts.h>
 #include <linux/syscalls.h>
 #include <linux/unistd.h>
 #include <linux/kmod.h>
@@ -516,7 +518,7 @@ static void helper_unlock(void)
  * Function must be runnable in either a process context or the
  * context in which call_usermodehelper_exec is called.
  */
-struct subprocess_info *call_usermodehelper_setup(char *path, char **argv,
+struct subprocess_info *call_usermodehelper_setup(const char *path, char **argv,
                char **envp, gfp_t gfp_mask,
                int (*init)(struct subprocess_info *info, struct cred *new),
                void (*cleanup)(struct subprocess_info *info),
@@ -528,7 +530,12 @@ struct subprocess_info *call_usermodehelper_setup(char *path, char **argv,
                goto out;
 
        INIT_WORK(&sub_info->work, call_usermodehelper_exec_work);
+
+#ifdef CONFIG_STATIC_USERMODEHELPER
+       sub_info->path = CONFIG_STATIC_USERMODEHELPER_PATH;
+#else
        sub_info->path = path;
+#endif
        sub_info->argv = argv;
        sub_info->envp = envp;
 
@@ -566,6 +573,15 @@ int call_usermodehelper_exec(struct subprocess_info *sub_info, int wait)
                retval = -EBUSY;
                goto out;
        }
+
+       /*
+        * If there is no binary for us to call, then just return and get out of
+        * here.  This allows us to set STATIC_USERMODEHELPER_PATH to "" and
+        * disable all call_usermodehelper() calls.
+        */
+       if (strlen(sub_info->path) == 0)
+               goto out;
+
        /*
         * Set the completion pointer only if there is a waiter.
         * This makes it possible to use umh_complete to free
@@ -613,7 +629,7 @@ EXPORT_SYMBOL(call_usermodehelper_exec);
  * This function is the equivalent to use call_usermodehelper_setup() and
  * call_usermodehelper_exec().
  */
-int call_usermodehelper(char *path, char **argv, char **envp, int wait)
+int call_usermodehelper(const char *path, char **argv, char **envp, int wait)
 {
        struct subprocess_info *info;
        gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? GFP_ATOMIC : GFP_KERNEL;