Page MenuHomeFreeBSD

D53938.id167150.diff
No OneTemporary

D53938.id167150.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
@@ -687,6 +687,7 @@
modlist_t ml, nextml;
struct common_symbol *cp;
int error, i;
+ bool linked;
/* Refuse to unload modules if securelevel raised. */
if (prison0.pr_securelevel > 0)
@@ -703,9 +704,11 @@
/* Give eventhandlers a chance to prevent the unload. */
error = 0;
- EVENTHANDLER_INVOKE(kld_unload_try, file, &error);
- if (error != 0)
- return (EBUSY);
+ if ((file->flags & LINKER_FILE_LINKED) != 0) {
+ EVENTHANDLER_INVOKE(kld_unload_try, file, &error);
+ if (error != 0)
+ return (EBUSY);
+ }
KLD_DPF(FILE, ("linker_file_unload: file is unloading,"
" informing modules\n"));
@@ -768,7 +771,8 @@
* Don't try to run SYSUNINITs if we are unloaded due to a
* link error.
*/
- if (file->flags & LINKER_FILE_LINKED) {
+ linked = (file->flags & LINKER_FILE_LINKED) != 0;
+ if (linked) {
file->flags &= ~LINKER_FILE_LINKED;
linker_file_unregister_sysctls(file);
linker_file_sysuninit(file);
@@ -788,8 +792,10 @@
LINKER_UNLOAD(file);
- EVENTHANDLER_INVOKE(kld_unload, file->filename, file->address,
- file->size);
+ if (linked) {
+ EVENTHANDLER_INVOKE(kld_unload, file->filename, file->address,
+ file->size);
+ }
if (file->filename) {
free(file->filename, M_LINKER);

File Metadata

Mime Type
text/plain
Expires
Wed, Sep 9, 8:35 PM (20 h, 59 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38609983
Default Alt Text
D53938.id167150.diff (1 KB)

Event Timeline