125be451aSLuis Chamberlain /* 225be451aSLuis Chamberlain * kmod - the kernel module loader 325be451aSLuis Chamberlain */ 425be451aSLuis Chamberlain #include <linux/module.h> 525be451aSLuis Chamberlain #include <linux/sched.h> 625be451aSLuis Chamberlain #include <linux/sched/task.h> 725be451aSLuis Chamberlain #include <linux/binfmts.h> 825be451aSLuis Chamberlain #include <linux/syscalls.h> 925be451aSLuis Chamberlain #include <linux/unistd.h> 1025be451aSLuis Chamberlain #include <linux/kmod.h> 1125be451aSLuis Chamberlain #include <linux/slab.h> 1225be451aSLuis Chamberlain #include <linux/completion.h> 1325be451aSLuis Chamberlain #include <linux/cred.h> 1425be451aSLuis Chamberlain #include <linux/file.h> 1525be451aSLuis Chamberlain #include <linux/fdtable.h> 1625be451aSLuis Chamberlain #include <linux/workqueue.h> 1725be451aSLuis Chamberlain #include <linux/security.h> 1825be451aSLuis Chamberlain #include <linux/mount.h> 1925be451aSLuis Chamberlain #include <linux/kernel.h> 2025be451aSLuis Chamberlain #include <linux/init.h> 2125be451aSLuis Chamberlain #include <linux/resource.h> 2225be451aSLuis Chamberlain #include <linux/notifier.h> 2325be451aSLuis Chamberlain #include <linux/suspend.h> 2425be451aSLuis Chamberlain #include <linux/rwsem.h> 2525be451aSLuis Chamberlain #include <linux/ptrace.h> 2625be451aSLuis Chamberlain #include <linux/async.h> 2725be451aSLuis Chamberlain #include <linux/uaccess.h> 2825be451aSLuis Chamberlain 2925be451aSLuis Chamberlain #include <trace/events/module.h> 3025be451aSLuis Chamberlain 3125be451aSLuis Chamberlain /* 3225be451aSLuis Chamberlain * Assuming: 3325be451aSLuis Chamberlain * 3425be451aSLuis Chamberlain * threads = div64_u64((u64) totalram_pages * (u64) PAGE_SIZE, 3525be451aSLuis Chamberlain * (u64) THREAD_SIZE * 8UL); 3625be451aSLuis Chamberlain * 3725be451aSLuis Chamberlain * If you need less than 50 threads would mean we're dealing with systems 3825be451aSLuis Chamberlain * smaller than 3200 pages. This assumes you are capable of having ~13M memory, 3925be451aSLuis Chamberlain * and this would only be an upper limit, after which the OOM killer would take 4025be451aSLuis Chamberlain * effect. Systems like these are very unlikely if modules are enabled. 4125be451aSLuis Chamberlain */ 4225be451aSLuis Chamberlain #define MAX_KMOD_CONCURRENT 50 43*25a1b5b5SLuis Chamberlain static DEFINE_SEMAPHORE(kmod_concurrent_max, MAX_KMOD_CONCURRENT); 4425be451aSLuis Chamberlain 4525be451aSLuis Chamberlain /* 4625be451aSLuis Chamberlain * This is a restriction on having *all* MAX_KMOD_CONCURRENT threads 4725be451aSLuis Chamberlain * running at the same time without returning. When this happens we 4825be451aSLuis Chamberlain * believe you've somehow ended up with a recursive module dependency 4925be451aSLuis Chamberlain * creating a loop. 5025be451aSLuis Chamberlain * 5125be451aSLuis Chamberlain * We have no option but to fail. 5225be451aSLuis Chamberlain * 5325be451aSLuis Chamberlain * Userspace should proactively try to detect and prevent these. 5425be451aSLuis Chamberlain */ 5525be451aSLuis Chamberlain #define MAX_KMOD_ALL_BUSY_TIMEOUT 5 5625be451aSLuis Chamberlain 5725be451aSLuis Chamberlain /* 5825be451aSLuis Chamberlain modprobe_path is set via /proc/sys. 5925be451aSLuis Chamberlain */ 6025be451aSLuis Chamberlain char modprobe_path[KMOD_PATH_LEN] = CONFIG_MODPROBE_PATH; 6125be451aSLuis Chamberlain 6225be451aSLuis Chamberlain static void free_modprobe_argv(struct subprocess_info *info) 6325be451aSLuis Chamberlain { 6425be451aSLuis Chamberlain kfree(info->argv[3]); /* check call_modprobe() */ 6525be451aSLuis Chamberlain kfree(info->argv); 6625be451aSLuis Chamberlain } 6725be451aSLuis Chamberlain 6825be451aSLuis Chamberlain static int call_modprobe(char *module_name, int wait) 6925be451aSLuis Chamberlain { 7025be451aSLuis Chamberlain struct subprocess_info *info; 7125be451aSLuis Chamberlain static char *envp[] = { 7225be451aSLuis Chamberlain "HOME=/", 7325be451aSLuis Chamberlain "TERM=linux", 7425be451aSLuis Chamberlain "PATH=/sbin:/usr/sbin:/bin:/usr/bin", 7525be451aSLuis Chamberlain NULL 7625be451aSLuis Chamberlain }; 7725be451aSLuis Chamberlain 7825be451aSLuis Chamberlain char **argv = kmalloc(sizeof(char *[5]), GFP_KERNEL); 7925be451aSLuis Chamberlain if (!argv) 8025be451aSLuis Chamberlain goto out; 8125be451aSLuis Chamberlain 8225be451aSLuis Chamberlain module_name = kstrdup(module_name, GFP_KERNEL); 8325be451aSLuis Chamberlain if (!module_name) 8425be451aSLuis Chamberlain goto free_argv; 8525be451aSLuis Chamberlain 8625be451aSLuis Chamberlain argv[0] = modprobe_path; 8725be451aSLuis Chamberlain argv[1] = "-q"; 8825be451aSLuis Chamberlain argv[2] = "--"; 8925be451aSLuis Chamberlain argv[3] = module_name; /* check free_modprobe_argv() */ 9025be451aSLuis Chamberlain argv[4] = NULL; 9125be451aSLuis Chamberlain 9225be451aSLuis Chamberlain info = call_usermodehelper_setup(modprobe_path, argv, envp, GFP_KERNEL, 9325be451aSLuis Chamberlain NULL, free_modprobe_argv, NULL); 9425be451aSLuis Chamberlain if (!info) 9525be451aSLuis Chamberlain goto free_module_name; 9625be451aSLuis Chamberlain 9725be451aSLuis Chamberlain return call_usermodehelper_exec(info, wait | UMH_KILLABLE); 9825be451aSLuis Chamberlain 9925be451aSLuis Chamberlain free_module_name: 10025be451aSLuis Chamberlain kfree(module_name); 10125be451aSLuis Chamberlain free_argv: 10225be451aSLuis Chamberlain kfree(argv); 10325be451aSLuis Chamberlain out: 10425be451aSLuis Chamberlain return -ENOMEM; 10525be451aSLuis Chamberlain } 10625be451aSLuis Chamberlain 10725be451aSLuis Chamberlain /** 10825be451aSLuis Chamberlain * __request_module - try to load a kernel module 10925be451aSLuis Chamberlain * @wait: wait (or not) for the operation to complete 11025be451aSLuis Chamberlain * @fmt: printf style format string for the name of the module 11125be451aSLuis Chamberlain * @...: arguments as specified in the format string 11225be451aSLuis Chamberlain * 11325be451aSLuis Chamberlain * Load a module using the user mode module loader. The function returns 11425be451aSLuis Chamberlain * zero on success or a negative errno code or positive exit code from 11525be451aSLuis Chamberlain * "modprobe" on failure. Note that a successful module load does not mean 11625be451aSLuis Chamberlain * the module did not then unload and exit on an error of its own. Callers 11725be451aSLuis Chamberlain * must check that the service they requested is now available not blindly 11825be451aSLuis Chamberlain * invoke it. 11925be451aSLuis Chamberlain * 12025be451aSLuis Chamberlain * If module auto-loading support is disabled then this function 12125be451aSLuis Chamberlain * simply returns -ENOENT. 12225be451aSLuis Chamberlain */ 12325be451aSLuis Chamberlain int __request_module(bool wait, const char *fmt, ...) 12425be451aSLuis Chamberlain { 12525be451aSLuis Chamberlain va_list args; 12625be451aSLuis Chamberlain char module_name[MODULE_NAME_LEN]; 12725be451aSLuis Chamberlain int ret; 12825be451aSLuis Chamberlain 12925be451aSLuis Chamberlain /* 13025be451aSLuis Chamberlain * We don't allow synchronous module loading from async. Module 13125be451aSLuis Chamberlain * init may invoke async_synchronize_full() which will end up 13225be451aSLuis Chamberlain * waiting for this task which already is waiting for the module 13325be451aSLuis Chamberlain * loading to complete, leading to a deadlock. 13425be451aSLuis Chamberlain */ 13525be451aSLuis Chamberlain WARN_ON_ONCE(wait && current_is_async()); 13625be451aSLuis Chamberlain 13725be451aSLuis Chamberlain if (!modprobe_path[0]) 13825be451aSLuis Chamberlain return -ENOENT; 13925be451aSLuis Chamberlain 14025be451aSLuis Chamberlain va_start(args, fmt); 14125be451aSLuis Chamberlain ret = vsnprintf(module_name, MODULE_NAME_LEN, fmt, args); 14225be451aSLuis Chamberlain va_end(args); 14325be451aSLuis Chamberlain if (ret >= MODULE_NAME_LEN) 14425be451aSLuis Chamberlain return -ENAMETOOLONG; 14525be451aSLuis Chamberlain 14625be451aSLuis Chamberlain ret = security_kernel_module_request(module_name); 14725be451aSLuis Chamberlain if (ret) 14825be451aSLuis Chamberlain return ret; 14925be451aSLuis Chamberlain 150*25a1b5b5SLuis Chamberlain ret = down_timeout(&kmod_concurrent_max, MAX_KMOD_ALL_BUSY_TIMEOUT * HZ); 151*25a1b5b5SLuis Chamberlain if (ret) { 15225be451aSLuis Chamberlain pr_warn_ratelimited("request_module: modprobe %s cannot be processed, kmod busy with %d threads for more than %d seconds now", 15325be451aSLuis Chamberlain module_name, MAX_KMOD_CONCURRENT, MAX_KMOD_ALL_BUSY_TIMEOUT); 15425be451aSLuis Chamberlain return ret; 15525be451aSLuis Chamberlain } 15625be451aSLuis Chamberlain 15725be451aSLuis Chamberlain trace_module_request(module_name, wait, _RET_IP_); 15825be451aSLuis Chamberlain 15925be451aSLuis Chamberlain ret = call_modprobe(module_name, wait ? UMH_WAIT_PROC : UMH_WAIT_EXEC); 16025be451aSLuis Chamberlain 161*25a1b5b5SLuis Chamberlain up(&kmod_concurrent_max); 16225be451aSLuis Chamberlain 16325be451aSLuis Chamberlain return ret; 16425be451aSLuis Chamberlain } 16525be451aSLuis Chamberlain EXPORT_SYMBOL(__request_module); 166