On 12 April 2012 19:06, Sergey Kandaurov <pluk...@freebsd.org> wrote: > 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...
Doh, I have had something different.. Sorry. -- 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"