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

Reply via email to