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') |
