svn commit: r234186 - head/sys/kern
Sergey Kandaurov
pluknet at freebsd.org
Thu Apr 12 15:06:58 UTC 2012
On 12 April 2012 18:49, John Baldwin <jhb at 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
More information about the svn-src-all
mailing list