Module Name: src
Committed By: pooka
Date: Wed Mar 3 17:58:37 UTC 2010
Modified Files:
src/sys/kern: kern_module.c
Log Message:
Replace unsafe use of TAILQ_FOREACH: as the comment says, the
structures are pulled off the list in the loop and it's anyone's
guess where they go after that.
To generate a diff of this commit:
cvs rdiff -u -r1.57 -r1.58 src/sys/kern/kern_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.57 src/sys/kern/kern_module.c:1.58
--- src/sys/kern/kern_module.c:1.57 Tue Jan 19 15:23:14 2010
+++ src/sys/kern/kern_module.c Wed Mar 3 17:58:36 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_module.c,v 1.57 2010/01/19 15:23:14 pooka Exp $ */
+/* $NetBSD: kern_module.c,v 1.58 2010/03/03 17:58:36 pooka 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.57 2010/01/19 15:23:14 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_module.c,v 1.58 2010/03/03 17:58:36 pooka Exp $");
#define _MODULE_INTERNAL
@@ -247,7 +247,7 @@
{
__link_set_decl(modules, modinfo_t);
modinfo_t *const *mip, *mi;
- module_t *mod;
+ module_t *mod, *mod_next;
mutex_enter(&module_lock);
/*
@@ -268,7 +268,8 @@
* list as we call module_do_load();
*/
do {
- TAILQ_FOREACH(mod, &module_bootlist, mod_chain) {
+ for (mod = TAILQ_FIRST(&module_bootlist); mod; mod = mod_next) {
+ mod_next = TAILQ_NEXT(mod, mod_chain);
mi = mod->mod_info;
if (class != MODULE_CLASS_ANY &&
class != mi->mi_class)