Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/kern restore r1.118



details:   https://anonhg.NetBSD.org/src/rev/b4bba5bc26d0
branches:  trunk
changeset: 351051:b4bba5bc26d0
user:      maya <maya%NetBSD.org@localhost>
date:      Wed Feb 01 01:51:07 2017 +0000

description:
restore r1.118

diffstat:

 sys/kern/kern_module.c |  25 ++++++++++++++++++-------
 1 files changed, 18 insertions(+), 7 deletions(-)

diffs (55 lines):

diff -r 1f4f9f299d27 -r b4bba5bc26d0 sys/kern/kern_module.c
--- a/sys/kern/kern_module.c    Wed Feb 01 01:23:17 2017 +0000
+++ b/sys/kern/kern_module.c    Wed Feb 01 01:51:07 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: kern_module.c,v 1.119 2016/12/27 09:34:44 maya Exp $   */
+/*     $NetBSD: kern_module.c,v 1.120 2017/02/01 01:51:07 maya Exp $   */
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_module.c,v 1.119 2016/12/27 09:34:44 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_module.c,v 1.120 2017/02/01 01:51:07 maya Exp $");
 
 #define _MODULE_INTERNAL
 
@@ -570,20 +570,31 @@
 module_load(const char *filename, int flags, prop_dictionary_t props,
            modclass_t modclass)
 {
+       module_t *mod;
        int error;
 
+       /* Test if we already have the module loaded before
+        * authorizing so we have the opportunity to return EEXIST. */
+       kernconfig_lock();
+       mod = module_lookup(filename);
+       if (mod != NULL) {
+               module_print("%s module `%s' already loaded",
+                   "requested", filename);
+               error = EEXIST;
+               goto out;
+       }
+
        /* Authorize. */
        error = kauth_authorize_system(kauth_cred_get(), KAUTH_SYSTEM_MODULE,
            0, (void *)(uintptr_t)MODCTL_LOAD, NULL, NULL);
-       if (error != 0) {
-               return error;
-       }
+       if (error != 0)
+               goto out;
 
-       kernconfig_lock();
        error = module_do_load(filename, false, flags, props, NULL, modclass,
            false);
+
+out:
        kernconfig_unlock();
-
        return error;
 }
 



Home | Main Index | Thread Index | Old Index