svn commit: r346002 - head/stand/common
Toomas Soome
tsoome at FreeBSD.org
Sun Apr 7 12:20:18 UTC 2019
Author: tsoome
Date: Sun Apr 7 12:20:17 2019
New Revision: 346002
URL: https://svnweb.freebsd.org/changeset/base/346002
Log:
loader: mod_loadkld() error: we previously assumed 'last_file' could be null
The last_file variable is used to reset the loadaddr variable back to original
value; however, it is possible the last_file is NULL, so we can not blindly
trust it. But then again, we can just save the original loadaddr and use
the saved value for recovery.
MFC after: 1w
Modified:
head/stand/common/module.c
Modified: head/stand/common/module.c
==============================================================================
--- head/stand/common/module.c Sun Apr 7 12:10:19 2019 (r346001)
+++ head/stand/common/module.c Sun Apr 7 12:20:17 2019 (r346002)
@@ -559,9 +559,10 @@ mod_load(char *modname, struct mod_depend *verinfo, in
int
mod_loadkld(const char *kldname, int argc, char *argv[])
{
- struct preloaded_file *fp, *last_file;
- int err;
+ struct preloaded_file *fp;
+ int err;
char *filename;
+ vm_offset_t loadaddr_saved;
/*
* Get fully qualified KLD name
@@ -582,22 +583,19 @@ mod_loadkld(const char *kldname, int argc, char *argv[
free(filename);
return (0);
}
- for (last_file = preloaded_files;
- last_file != NULL && last_file->f_next != NULL;
- last_file = last_file->f_next)
- ;
do {
err = file_load(filename, loadaddr, &fp);
if (err)
break;
fp->f_args = unargv(argc, argv);
+ loadaddr_saved = loadaddr;
loadaddr = fp->f_addr + fp->f_size;
file_insert_tail(fp); /* Add to the list of loaded files */
if (file_load_dependencies(fp) != 0) {
err = ENOENT;
last_file->f_next = NULL;
- loadaddr = last_file->f_addr + last_file->f_size;
+ loadaddr = loadaddr_saved;
fp = NULL;
break;
}
More information about the svn-src-head
mailing list