X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=kernel%2Fkmod.c;h=9fcb53a11f872e958c95bcf37f8558e9bb148d77;hb=850bc73ffcc99cddfb52bc23217c60810c508853;hp=385c31a1bdbf3118b3d82d44b6720af727738bcb;hpb=a9d90c81b536cc0567bdf22a8aaefe180a5b0f7a;p=linux-2.6-block.git diff --git a/kernel/kmod.c b/kernel/kmod.c index 385c31a1bdbf..9fcb53a11f87 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c @@ -37,6 +37,8 @@ #include #include +#include + extern int max_threads; static struct workqueue_struct *khelper_wq; @@ -78,6 +80,10 @@ int __request_module(bool wait, const char *fmt, ...) #define MAX_KMOD_CONCURRENT 50 /* Completely arbitrary value - KAO */ static int kmod_loop_msg; + ret = security_kernel_module_request(); + if (ret) + return ret; + va_start(args, fmt); ret = vsnprintf(module_name, MODULE_NAME_LEN, fmt, args); va_end(args); @@ -108,6 +114,8 @@ int __request_module(bool wait, const char *fmt, ...) return -ENOMEM; } + trace_module_request(module_name, wait, _RET_IP_); + ret = call_usermodehelper(modprobe_path, argv, envp, wait ? UMH_WAIT_PROC : UMH_WAIT_EXEC); atomic_dec(&kmod_concurrent); @@ -462,6 +470,7 @@ int call_usermodehelper_exec(struct subprocess_info *sub_info, int retval = 0; BUG_ON(atomic_read(&sub_info->cred->usage) != 1); + validate_creds(sub_info->cred); helper_lock(); if (sub_info->path[0] == '\0')