insmod: check for module read errors
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
10ee20b58b
commit
094cc51e50
@ -674,6 +674,8 @@ extern char *xmalloc_reads(int fd, char *pfx, size_t *maxsz_p) FAST_FUNC;
|
|||||||
extern void *xmalloc_read(int fd, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
|
extern void *xmalloc_read(int fd, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
|
||||||
/* Returns NULL if file can't be opened (default max size: INT_MAX - 4095) */
|
/* Returns NULL if file can't be opened (default max size: INT_MAX - 4095) */
|
||||||
extern void *xmalloc_open_read_close(const char *filename, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
|
extern void *xmalloc_open_read_close(const char *filename, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
|
||||||
|
/* Never returns NULL */
|
||||||
|
extern void *xmalloc_xopen_read_close(const char *filename, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
|
||||||
/* Autodetects gzip/bzip2 formats. fd may be in the middle of the file! */
|
/* Autodetects gzip/bzip2 formats. fd may be in the middle of the file! */
|
||||||
#if ENABLE_FEATURE_SEAMLESS_LZMA \
|
#if ENABLE_FEATURE_SEAMLESS_LZMA \
|
||||||
|| ENABLE_FEATURE_SEAMLESS_BZ2 \
|
|| ENABLE_FEATURE_SEAMLESS_BZ2 \
|
||||||
@ -686,8 +688,6 @@ extern void setup_unzip_on_fd(int fd /*, int fail_if_not_detected*/) FAST_FUNC;
|
|||||||
/* Autodetects .gz etc */
|
/* Autodetects .gz etc */
|
||||||
extern int open_zipped(const char *fname) FAST_FUNC;
|
extern int open_zipped(const char *fname) FAST_FUNC;
|
||||||
extern void *xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
|
extern void *xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
|
||||||
/* Never returns NULL */
|
|
||||||
extern void *xmalloc_xopen_read_close(const char *filename, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
|
|
||||||
|
|
||||||
extern ssize_t safe_write(int fd, const void *buf, size_t count) FAST_FUNC;
|
extern ssize_t safe_write(int fd, const void *buf, size_t count) FAST_FUNC;
|
||||||
// NB: will return short write on error, not -1,
|
// NB: will return short write on error, not -1,
|
||||||
|
@ -205,6 +205,7 @@ static void parse_module(module_info *info, const char *pathname)
|
|||||||
/* Read (possibly compressed) module */
|
/* Read (possibly compressed) module */
|
||||||
len = 64 * 1024 * 1024; /* 64 Mb at most */
|
len = 64 * 1024 * 1024; /* 64 Mb at most */
|
||||||
module_image = xmalloc_open_zipped_read_close(pathname, &len);
|
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
|
//TODO: optimize redundant module body reads
|
||||||
|
|
||||||
/* "alias1 symbol:sym1 alias2 symbol:sym2" */
|
/* "alias1 symbol:sym1 alias2 symbol:sym2" */
|
||||||
@ -845,6 +846,8 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
|
|
||||||
len = MAXINT(ssize_t);
|
len = MAXINT(ssize_t);
|
||||||
map = xmalloc_open_zipped_read_close(*argv, &len);
|
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 (init_module(map, len,
|
||||||
IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(options ? options : "")
|
IF_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE(options ? options : "")
|
||||||
IF_NOT_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE("")
|
IF_NOT_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE("")
|
||||||
|
Loading…
Reference in New Issue
Block a user