Module Name: src Committed By: jnemeth Date: Fri Oct 16 00:27:07 UTC 2009
Modified Files: src/sys/kern: kern_module.c sys_module.c Log Message: allow passing a NULL proplib dictionary to modctl(MODCTL_LOAD, ...) To generate a diff of this commit: cvs rdiff -u -r1.51 -r1.52 src/sys/kern/kern_module.c cvs rdiff -u -r1.9 -r1.10 src/sys/kern/sys_module.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/kern_module.c diff -u src/sys/kern/kern_module.c:1.51 src/sys/kern/kern_module.c:1.52 --- src/sys/kern/kern_module.c:1.51 Sat Oct 3 00:06:37 2009 +++ src/sys/kern/kern_module.c Fri Oct 16 00:27:07 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_module.c,v 1.51 2009/10/03 00:06:37 elad Exp $ */ +/* $NetBSD: kern_module.c,v 1.52 2009/10/16 00:27:07 jnemeth 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.51 2009/10/03 00:06:37 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_module.c,v 1.52 2009/10/16 00:27:07 jnemeth Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -1252,6 +1252,10 @@ const char *props_key; bool error; + if (new_dict == NULL) { /* nothing to merge */ + return true; + } + error = false; props_iter = prop_dictionary_iterator(new_dict); if (props_iter == NULL) { Index: src/sys/kern/sys_module.c diff -u src/sys/kern/sys_module.c:1.9 src/sys/kern/sys_module.c:1.10 --- src/sys/kern/sys_module.c:1.9 Tue Apr 28 17:57:00 2009 +++ src/sys/kern/sys_module.c Fri Oct 16 00:27:07 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_module.c,v 1.9 2009/04/28 17:57:00 skrll Exp $ */ +/* $NetBSD: sys_module.c,v 1.10 2009/10/16 00:27:07 jnemeth Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sys_module.c,v 1.9 2009/04/28 17:57:00 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_module.c,v 1.10 2009/10/16 00:27:07 jnemeth Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -63,29 +63,38 @@ if (error != 0) goto out2; - propslen = ml->ml_propslen + 1; - props = (char *)kmem_alloc(propslen, KM_SLEEP); - if (props == NULL) { - error = ENOMEM; - goto out2; - } + if (ml->ml_props != NULL) { + propslen = ml->ml_propslen + 1; + props = (char *)kmem_alloc(propslen, KM_SLEEP); + if (props == NULL) { + error = ENOMEM; + goto out2; + } - error = copyinstr(ml->ml_props, props, propslen, NULL); - if (error != 0) - goto out3; + error = copyinstr(ml->ml_props, props, propslen, NULL); + if (error != 0) + goto out3; - dict = prop_dictionary_internalize(props); - if (dict == NULL) { - error = EINVAL; - goto out3; + dict = prop_dictionary_internalize(props); + if (dict == NULL) { + error = EINVAL; + goto out3; + } + } else { + dict = NULL; + props = NULL; } error = module_load(path, ml->ml_flags, dict, MODULE_CLASS_ANY); - prop_object_release(dict); + if (dict != NULL) { + prop_object_release(dict); + } out3: - kmem_free(props, propslen); + if (props != NULL) { + kmem_free(props, propslen); + } out2: PNBUF_PUT(path); out1: