The patch to implement kernel module blacklist using kernel command line. Use modprobe.blacklist=mod1,mod2 to blacklist modules. It's compatible to original modprobe.
Signed-off-by: Serj Kalichev <[email protected]> --- modutils/Config.src | 13 +++++++++++++ modutils/modprobe.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/modutils/Config.src b/modutils/Config.src index 0b11832..e94f00b 100644 --- a/modutils/Config.src +++ b/modutils/Config.src @@ -108,6 +108,19 @@ config FEATURE_MODPROBE_BLACKLIST hardware autodetection scripts to load modules like evdev, frame buffer drivers etc. +config FEATURE_MODPROBE_KCMDLINE_BLACKLIST + bool "Kernel cmdline blacklist support" + default n + depends on MODPROBE + select PLATFORM_LINUX + help + Say 'y' here to enable support for the 'modprobe.blacklist' in + kernel command line. This feature is used to disable buggy + kernel modules. Use 'modprobe.blacklist=<mname1>,<mname2>' in + kernel command line to blacklist modules with names <mname1>, + <mname2>. The separator is comma. This feature is compatible with + original modprobe utility. + config DEPMOD bool "depmod" default n diff --git a/modutils/modprobe.c b/modutils/modprobe.c index 8130c40..9adafde 100644 --- a/modutils/modprobe.c +++ b/modutils/modprobe.c @@ -366,6 +366,32 @@ static char *parse_and_add_kcmdline_module_options(char *options, const char *mo return options; } +#if ENABLE_FEATURE_MODPROBE_KCMDLINE_BLACKLIST +static void parse_kcmdline_blacklist(void) +{ + char *kcmdline_buf; + char *kcmdline; + char *kptr; + + kcmdline_buf = xmalloc_open_read_close("/proc/cmdline", NULL); + if (!kcmdline_buf) + return; + + kcmdline = kcmdline_buf; + while ((kptr = strsep_quotes(&kcmdline)) != NULL) { + char *mline; + char *after_modulename = is_prefixed_with(kptr, "modprobe.blacklist="); + if (!after_modulename || !*after_modulename) + continue; + mline = after_modulename; + while ((kptr = strsep(&mline, ",")) != NULL) { + get_or_add_modentry(kptr)->flags |= MODULE_FLAG_BLACKLISTED; + } + } + free(kcmdline_buf); +} +#endif + /* Return: similar to bb_init_module: * 0 on success, * -errno on open/read error, @@ -621,6 +647,11 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv) load_modules_dep(); } +#if ENABLE_FEATURE_MODPROBE_KCMDLINE_BLACKLIST + /* Get blacklist from kernel cmdline */ + parse_kcmdline_blacklist(); +#endif + rc = 0; while ((me = llist_pop(&G.probes)) != NULL) { if (me->realnames == NULL) { -- 1.9.1 _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
