DragonFlyBSD Kernel Audit
DF-0298 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/netgraph/netgraph/ng_base.c b/sys/netgraph/netgraph/ng_base.c
--- a/sys/netgraph/netgraph/ng_base.c
+++ b/sys/netgraph/netgraph/ng_base.c
@@ -395,8 +395,10 @@
 		return (ENOMEM);
 	}
 	node->type = type;
+	crit_enter();
 	node->refs++;				/* note reference */
 	type->refs++;
+	crit_exit();
 
 	/* Link us into the node linked list */
 	LIST_INSERT_HEAD(&nodelist, node, nodes);
@@ -1769,7 +1771,9 @@
 		/* Call type specific code */
 		if (type->mod_event != NULL)
 			if ((error = (*type->mod_event)(mod, event, data))) {
-				type->refs--;	/* undo it */
+				crit_enter();
+		type->refs--;	/* undo it */
+		crit_exit();
 				LIST_REMOVE(type, types);
 			}
 		crit_exit();