loader: fix memory handling errors in module.c
file_loadraw(): check for file_alloc() and strdup() results. we leak 'name'. mod_load() does leak 'filename'. mod_loadkld() does not need to check fp, file_discard() does check.
This commit is contained in:
parent
82d7bf6b1b
commit
b17868a211
@ -499,7 +499,14 @@ file_loadraw(const char *fname, char *type, int insert)
|
|||||||
|
|
||||||
/* Looks OK so far; create & populate control structure */
|
/* Looks OK so far; create & populate control structure */
|
||||||
fp = file_alloc();
|
fp = file_alloc();
|
||||||
fp->f_name = strdup(name);
|
if (fp == NULL) {
|
||||||
|
snprintf(command_errbuf, sizeof (command_errbuf),
|
||||||
|
"no memory to load %s", name);
|
||||||
|
free(name);
|
||||||
|
close(fd);
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
fp->f_name = name;
|
||||||
fp->f_type = strdup(type);
|
fp->f_type = strdup(type);
|
||||||
fp->f_args = NULL;
|
fp->f_args = NULL;
|
||||||
fp->f_metadata = NULL;
|
fp->f_metadata = NULL;
|
||||||
@ -507,6 +514,13 @@ file_loadraw(const char *fname, char *type, int insert)
|
|||||||
fp->f_addr = loadaddr;
|
fp->f_addr = loadaddr;
|
||||||
fp->f_size = laddr - loadaddr;
|
fp->f_size = laddr - loadaddr;
|
||||||
|
|
||||||
|
if (fp->f_type == NULL) {
|
||||||
|
snprintf(command_errbuf, sizeof (command_errbuf),
|
||||||
|
"no memory to load %s", name);
|
||||||
|
free(name);
|
||||||
|
close(fd);
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
/* recognise space consumption */
|
/* recognise space consumption */
|
||||||
loadaddr = laddr;
|
loadaddr = laddr;
|
||||||
|
|
||||||
@ -552,6 +566,7 @@ mod_load(char *modname, struct mod_depend *verinfo, int argc, char *argv[])
|
|||||||
return (ENOENT);
|
return (ENOENT);
|
||||||
}
|
}
|
||||||
err = mod_loadkld(filename, argc, argv);
|
err = mod_loadkld(filename, argc, argv);
|
||||||
|
free(filename);
|
||||||
return (err);
|
return (err);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -607,7 +622,7 @@ mod_loadkld(const char *kldname, int argc, char *argv[])
|
|||||||
snprintf(command_errbuf, sizeof(command_errbuf),
|
snprintf(command_errbuf, sizeof(command_errbuf),
|
||||||
"don't know how to load module '%s'", filename);
|
"don't know how to load module '%s'", filename);
|
||||||
}
|
}
|
||||||
if (err && fp)
|
if (err)
|
||||||
file_discard(fp);
|
file_discard(fp);
|
||||||
free(filename);
|
free(filename);
|
||||||
return (err);
|
return (err);
|
||||||
|
Loading…
Reference in New Issue
Block a user