diff options
Diffstat (limited to 'kernel/kmod.c')
-rw-r--r-- | kernel/kmod.c | 9 |
1 files changed, 9 insertions, 0 deletions
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 @@ | |||
37 | #include <linux/suspend.h> | 37 | #include <linux/suspend.h> |
38 | #include <asm/uaccess.h> | 38 | #include <asm/uaccess.h> |
39 | 39 | ||
40 | #include <trace/events/module.h> | ||
41 | |||
40 | extern int max_threads; | 42 | extern int max_threads; |
41 | 43 | ||
42 | static struct workqueue_struct *khelper_wq; | 44 | static struct workqueue_struct *khelper_wq; |
@@ -78,6 +80,10 @@ int __request_module(bool wait, const char *fmt, ...) | |||
78 | #define MAX_KMOD_CONCURRENT 50 /* Completely arbitrary value - KAO */ | 80 | #define MAX_KMOD_CONCURRENT 50 /* Completely arbitrary value - KAO */ |
79 | static int kmod_loop_msg; | 81 | static int kmod_loop_msg; |
80 | 82 | ||
83 | ret = security_kernel_module_request(); | ||
84 | if (ret) | ||
85 | return ret; | ||
86 | |||
81 | va_start(args, fmt); | 87 | va_start(args, fmt); |
82 | ret = vsnprintf(module_name, MODULE_NAME_LEN, fmt, args); | 88 | ret = vsnprintf(module_name, MODULE_NAME_LEN, fmt, args); |
83 | va_end(args); | 89 | va_end(args); |
@@ -108,6 +114,8 @@ int __request_module(bool wait, const char *fmt, ...) | |||
108 | return -ENOMEM; | 114 | return -ENOMEM; |
109 | } | 115 | } |
110 | 116 | ||
117 | trace_module_request(module_name, wait, _RET_IP_); | ||
118 | |||
111 | ret = call_usermodehelper(modprobe_path, argv, envp, | 119 | ret = call_usermodehelper(modprobe_path, argv, envp, |
112 | wait ? UMH_WAIT_PROC : UMH_WAIT_EXEC); | 120 | wait ? UMH_WAIT_PROC : UMH_WAIT_EXEC); |
113 | atomic_dec(&kmod_concurrent); | 121 | atomic_dec(&kmod_concurrent); |
@@ -462,6 +470,7 @@ int call_usermodehelper_exec(struct subprocess_info *sub_info, | |||
462 | int retval = 0; | 470 | int retval = 0; |
463 | 471 | ||
464 | BUG_ON(atomic_read(&sub_info->cred->usage) != 1); | 472 | BUG_ON(atomic_read(&sub_info->cred->usage) != 1); |
473 | validate_creds(sub_info->cred); | ||
465 | 474 | ||
466 | helper_lock(); | 475 | helper_lock(); |
467 | if (sub_info->path[0] == '\0') | 476 | if (sub_info->path[0] == '\0') |