cmdline module options can be disabled on "big" modutils
authorKang-Che Sung <explorer09@gmail.com>
Tue, 31 Jan 2017 13:09:17 +0000 (21:09 +0800)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 1 Feb 2017 09:14:05 +0000 (10:14 +0100)
Allow module options on command line to be disabled on "big" modutils.

Config FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is renamed to
FEATURE_CMDLINE_MODULE_OPTIONS and no longer depends on !MODPROBE_SMALL

(I'm not sure if disabling this is useful on "big" modutils, but at
least the macro can serve as a marker and ensure both implementations
of same feature have consistent behavior.)

Signed-off-by: Kang-Che Sung <explorer09@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
modutils/Config.src
modutils/insmod.c
modutils/modprobe-small.c
modutils/modprobe.c
modutils/modutils.c
modutils/modutils.h

index f2448c9145f2b580bea24788673bef6dbbbed8be..a15cce518b4a457df213805f6aeb585eb2bdf369 100644 (file)
@@ -37,6 +37,14 @@ INSERT
 
 comment "Options common to multiple modutils"
 
+config FEATURE_CMDLINE_MODULE_OPTIONS
+       bool "Accept module options on modprobe command line"
+       default y
+       depends on INSMOD || MODPROBE
+       help
+         Allow insmod and modprobe take module options from the applets'
+         command line.
+
 config FEATURE_2_4_MODULES
        bool "Support version 2.2/2.4 Linux kernels"
        default n
index f2c70e16fe5d9019ef8d7451110908e28617e1c4..8526979ebe32bbfe12e713b7ac38693e3fa62eb5 100644 (file)
@@ -27,9 +27,9 @@
 
 //usage:#if !ENABLE_MODPROBE_SMALL
 //usage:#define insmod_trivial_usage
-//usage:       IF_FEATURE_2_4_MODULES("[OPTIONS] MODULE ")
-//usage:       IF_NOT_FEATURE_2_4_MODULES("FILE ")
-//usage:       "[SYMBOL=VALUE]..."
+//usage:       IF_FEATURE_2_4_MODULES("[OPTIONS] MODULE")
+//usage:       IF_NOT_FEATURE_2_4_MODULES("FILE")
+//usage:       IF_FEATURE_CMDLINE_MODULE_OPTIONS(" [SYMBOL=VALUE]...")
 //usage:#define insmod_full_usage "\n\n"
 //usage:       "Load kernel module"
 //usage:       IF_FEATURE_2_4_MODULES( "\n"
index 325f8376bc5ded1be2b0c7cd94c6c8d1dc2bf4fb..04242634b83da4cd1b71644666cc841f8d5e92f5 100644 (file)
 
 /* config MODPROBE_SMALL is defined in Config.src to ensure better "make config" order */
 
-//config:config FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE
-//config:      bool "Accept module options on modprobe command line"
-//config:      default y
-//config:      depends on MODPROBE_SMALL && (INSMOD || MODPROBE)
-//config:      help
-//config:        Allow insmod and modprobe take module options from command line.
-//config:
 //config:config FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED
 //config:      bool "Skip loading of already loaded modules"
 //config:      default y
@@ -690,7 +683,7 @@ static int rmmod(const char *filename)
  * NB: also called by depmod with bogus name "/",
  * just in order to force modprobe.dep.bb creation.
 */
-#if !ENABLE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE
+#if !ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
 #define process_module(a,b) process_module(a)
 #define cmdline_options ""
 #endif
@@ -735,7 +728,7 @@ static int process_module(char *name, const char *cmdline_options)
                options = xmalloc_open_read_close(opt_filename, NULL);
                if (options)
                        replace(options, '\n', ' ');
-#if ENABLE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE
+#if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
                if (cmdline_options) {
                        /* NB: cmdline_options always have one leading ' '
                         * (see main()), we remove it here */
@@ -910,7 +903,7 @@ The following options are useful for people managing distributions:
 //usage:#define depmod_full_usage ""
 
 //usage:#define insmod_trivial_usage
-//usage:       "FILE" IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(" [SYMBOL=VALUE]...")
+//usage:       "FILE" IF_FEATURE_CMDLINE_MODULE_OPTIONS(" [SYMBOL=VALUE]...")
 //usage:#define insmod_full_usage "\n\n"
 //usage:       "Load kernel module"
 
@@ -920,7 +913,7 @@ The following options are useful for people managing distributions:
 //usage:       "Unload kernel modules"
 
 //usage:#define modprobe_trivial_usage
-//usage:       "[-rq] MODULE" IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(" [SYMBOL=VALUE]...")
+//usage:       "[-rq] MODULE" IF_FEATURE_CMDLINE_MODULE_OPTIONS(" [SYMBOL=VALUE]...")
 //usage:#define modprobe_full_usage "\n\n"
 //usage:       "       -r      Remove MODULE"
 //usage:     "\n       -q      Quiet"
@@ -934,7 +927,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
        int exitcode;
 #endif
        struct utsname uts;
-       IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(char *options = NULL;)
+       IF_FEATURE_CMDLINE_MODULE_OPTIONS(char *options = NULL;)
 
        INIT_G();
 
@@ -998,7 +991,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
                if (!ONLY_APPLET)
                        option_mask32 |= OPT_r;
        } else if (!ENABLE_MODPROBE || !(option_mask32 & OPT_r)) {
-# if ENABLE_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE
+# if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
        /* If not rmmod/-r, parse possible module options given on command line.
         * insmod/modprobe takes one module name, the rest are parameters. */
                char **arg = argv;
@@ -1023,7 +1016,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
                if (!map)
                        bb_perror_msg_and_die("can't read '%s'", *argv);
                if (init_module(map, len,
-                       (IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(options ? options : ) "")
+                       (IF_FEATURE_CMDLINE_MODULE_OPTIONS(options ? options : ) "")
                        ) != 0
                ) {
                        bb_error_msg_and_die("can't insert '%s': %s",
@@ -1045,7 +1038,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
        } while (*++argv);
 
        if (ENABLE_FEATURE_CLEAN_UP) {
-               IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(free(options);)
+               IF_FEATURE_CMDLINE_MODULE_OPTIONS(free(options);)
        }
        return exitcode;
 #endif /* MODPROBE || INSMOD || RMMOD */
index cbec43888e1fe544a1d9df7f8bc1912d2686a5b6..a6224fa63354d74c8a9f64a0bbefee2010e5ab33 100644 (file)
 //usage:
 //usage:#define modprobe_trivial_usage
 //usage:       "[-alrqvsD" IF_FEATURE_MODPROBE_BLACKLIST("b") "]"
-//usage:       " MODULE [SYMBOL=VALUE]..."
+//usage:       " MODULE" IF_FEATURE_CMDLINE_MODULE_OPTIONS(" [SYMBOL=VALUE]...")
 //usage:#define modprobe_full_usage "\n\n"
 //usage:       "       -a      Load multiple MODULEs"
 //usage:     "\n       -l      List (MODULE is a pattern)"
@@ -174,7 +174,9 @@ static const char modprobe_longopts[] ALIGN1 =
 
 struct globals {
        llist_t *probes; /* MEs of module(s) requested on cmdline */
+#if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
        char *cmdline_mopts; /* module options from cmdline */
+#endif
        int num_unresolved_deps;
        /* bool. "Did we have 'symbol:FOO' requested on cmdline?" */
        smallint need_symbols;
@@ -458,8 +460,10 @@ static int do_modprobe(struct module_entry *m)
                options = m2->options;
                m2->options = NULL;
                options = parse_and_add_kcmdline_module_options(options, m2->modname);
+#if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
                if (m == m2)
                        options = gather_options_str(options, G.cmdline_mopts);
+#endif
 
                if (option_mask32 & OPT_SHOW_DEPS) {
                        printf(options ? "insmod %s/%s/%s %s\n"
@@ -626,7 +630,9 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
                /* First argument is module name, rest are parameters */
                DBG("probing just module %s", *argv);
                add_probe(argv[0]);
+#if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
                G.cmdline_mopts = parse_cmdline_module_options(argv, /*quote_spaces:*/ 1);
+#endif
        }
 
        /* Happens if all requested modules are already loaded */
index 4204f06fe1f3e9d5de2bf24cbad340043d5686f1..dae623ee4f9ecbaa956f44d10f099f155025bf27 100644 (file)
@@ -120,6 +120,7 @@ char* FAST_FUNC filename2modname(const char *filename, char *modname)
        return modname;
 }
 
+#if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
 char* FAST_FUNC parse_cmdline_module_options(char **argv, int quote_spaces)
 {
        char *options;
@@ -155,6 +156,7 @@ char* FAST_FUNC parse_cmdline_module_options(char **argv, int quote_spaces)
        /* if (optlen != 0) options[optlen-1] = '\0'; */
        return options;
 }
+#endif
 
 #if ENABLE_FEATURE_INSMOD_TRY_MMAP
 void* FAST_FUNC try_to_mmap_module(const char *filename, size_t *image_size_p)
index 2cbd1448a0c38570416f31de8ff6acbc46c2b37d..76ce242ba88743790078442c8befe1ab3150207b 100644 (file)
@@ -51,7 +51,11 @@ void replace(char *s, char what, char with) FAST_FUNC;
 char *replace_underscores(char *s) FAST_FUNC;
 int string_to_llist(char *string, llist_t **llist, const char *delim) FAST_FUNC;
 char *filename2modname(const char *filename, char *modname) FAST_FUNC;
+#if ENABLE_FEATURE_CMDLINE_MODULE_OPTIONS
 char *parse_cmdline_module_options(char **argv, int quote_spaces) FAST_FUNC;
+#else
+# define parse_cmdline_module_options(argv, quote_spaces) ""
+#endif
 
 /* insmod for 2.4 and modprobe's options (insmod 2.6 has no options at all): */
 #define INSMOD_OPTS \