summaryrefslogtreecommitdiff
path: root/modutils
diff options
context:
space:
mode:
Diffstat (limited to 'modutils')
-rw-r--r--modutils/modprobe-small.c3
-rw-r--r--modutils/modutils.c11
2 files changed, 8 insertions, 6 deletions
diff --git a/modutils/modprobe-small.c b/modutils/modprobe-small.c
index f4f17e7..188a7f2 100644
--- a/modutils/modprobe-small.c
+++ b/modutils/modprobe-small.c
@@ -205,6 +205,7 @@ static void parse_module(module_info *info, const char *pathname)
/* Read (possibly compressed) module */
len = 64 * 1024 * 1024; /* 64 Mb at most */
module_image = xmalloc_open_zipped_read_close(pathname, &len);
+ /* module_image == NULL is ok here, find_keyword handles it */
//TODO: optimize redundant module body reads
/* "alias1 symbol:sym1 alias2 symbol:sym2" */
@@ -845,6 +846,8 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
len = MAXINT(ssize_t);
map = xmalloc_open_zipped_read_close(*argv, &len);
+ 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_NOT_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE("")
diff --git a/modutils/modutils.c b/modutils/modutils.c
index 565d0d2..415dbbe 100644
--- a/modutils/modutils.c
+++ b/modutils/modutils.c
@@ -71,12 +71,11 @@ char* FAST_FUNC parse_cmdline_module_options(char **argv)
optlen = 0;
while (*++argv) {
options = xrealloc(options, optlen + 2 + strlen(*argv) + 2);
- /* Older versions were enclosing space-containing *argv in "",
- * but both modprobe and insmod from module-init-tools 3.11.1
- * don't do this anymore. (As to extra trailing space,
- * insmod adds it but modprobe does not. We do in both cases)
- */
- optlen += sprintf(options + optlen, "%s ", *argv);
+ /* Spaces handled by "" pairs, but no way of escaping quotes */
+//TODO: module-init-tools version 3.11.1 quotes only value:
+//it generates var="val with spaces", not "var=val with spaces"
+//(and it won't quote var *name* even if it has spaces)
+ optlen += sprintf(options + optlen, (strchr(*argv, ' ') ? "\"%s\" " : "%s "), *argv);
}
return options;
}