Page MenuHomeFreeBSD

D57607.diff
No OneTemporary

D57607.diff

diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c
--- a/sys/kern/kern_linker.c
+++ b/sys/kern/kern_linker.c
@@ -2295,22 +2295,23 @@
filename = linker_basename(pathname);
lfdep = linker_find_file_by_name(filename);
if (lfdep) {
- mod = modlist_lookup(modname, 0);
- MPASS(mod != NULL);
-
- if (modname && verinfo &&
- modlist_lookup2(modname, verinfo) == NULL) {
- /*
- * Desired module is already loaded, but the correct
- * version does not exist.
- */
- error = EXTERROR(ENOEXEC,
- "incompatible module version %jd already loaded",
- mod->version);
+ if (modname == NULL) {
+ error = EXTERROR(EEXIST, "file already loaded");
} else {
- error = EXTERROR(EEXIST,
- "module version %jd already loaded",
- mod->version);
+ mod = modlist_lookup(modname, 0);
+ if (mod == NULL) {
+ error = EXTERROR(ENOENT,
+ "module not found in already loaded file");
+ } else if (verinfo &&
+ modlist_lookup2(modname, verinfo) == NULL) {
+ error = EXTERROR(ENOEXEC,
+ "incompatible module version %jd already loaded",
+ mod->version);
+ } else {
+ error = EXTERROR(EEXIST,
+ "module version %jd already loaded",
+ mod->version);
+ }
}
} else do {
error = linker_load_file(pathname, &lfdep);
@@ -2319,9 +2320,14 @@
if (modname && verinfo &&
modlist_lookup2(modname, verinfo) == NULL) {
mod = modlist_lookup(modname, 0);
- error = EXTERROR(ENOEXEC,
+ if (mod == NULL) {
+ error = EXTERROR(ENOENT,
+ "module not found in loaded file");
+ } else {
+ error = EXTERROR(ENOEXEC,
"incompatible module version %jd already loaded",
- mod->version);
+ mod->version);
+ }
linker_file_unload(lfdep, LINKER_UNLOAD_FORCE);
break;
}

File Metadata

Mime Type
text/plain
Expires
Sun, Jun 28, 1:22 AM (11 h, 37 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34027239
Default Alt Text
D57607.diff (1 KB)

Event Timeline