On 12 April 2012 18:49, John Baldwin <j...@freebsd.org> wrote: > Author: jhb > Date: Thu Apr 12 14:49:25 2012 > New Revision: 234186 > URL: http://svn.freebsd.org/changeset/base/234186 > > Log: > If a linker file contains at least one module, but all of the modules > fail to load (the MOD_LOAD event fails) during a kldload(2), unload the > linker file and fail the kldload(2) with ENOEXEC. > > Reported by: gcooper > MFC after: 1 week > > Modified: > head/sys/kern/kern_linker.c > > Modified: head/sys/kern/kern_linker.c > ============================================================================== > --- head/sys/kern/kern_linker.c Thu Apr 12 14:06:05 2012 (r234185) > +++ head/sys/kern/kern_linker.c Thu Apr 12 14:49:25 2012 (r234186) > @@ -380,7 +380,7 @@ linker_load_file(const char *filename, l > { > linker_class_t lc; > linker_file_t lf; > - int foundfile, error; > + int foundfile, error, modules; > > /* Refuse to load modules if securelevel raised */ > if (prison0.pr_securelevel > 0) > @@ -419,11 +419,22 @@ linker_load_file(const char *filename, l > linker_file_unload(lf, LINKER_UNLOAD_FORCE); > return (error); > } > + modules = !TAILQ_EMPTY(&lf->modules); > KLD_UNLOCK(); > linker_file_register_sysctls(lf); > linker_file_sysinit(lf); > KLD_LOCK(); > lf->flags |= LINKER_FILE_LINKED; > + > + /* > + * If all of the modules in this file failed > + * to load, unload the file and return an > + * error of ENOEXEC. > + */ > + if (modules && TAILQ_EMPTY(&lf->modules)) { > + linker_file_unload(lf, LINKER_UNLOAD_FORCE); > + return (ENOEXEC); > + } > *result = lf; > return (0); > } > @@ -627,7 +638,7 @@ linker_file_unload(linker_file_t file, i > > /* > * Inform any modules associated with this file that they are > - * being be unloaded. > + * being unloaded. > */ > MOD_XLOCK; > for (mod = TAILQ_FIRST(&file->modules); mod; mod = next) {
Thanks. I have had exactly this change in my local tree, but I didn't commit it for some reasons I don't recall... -- wbr, pluknet _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"