⬢ DragonFlyBSD Kernel Audit
DF-3474 / fix.diff
← back to finding ↓ download raw
--- a/sys/netgraph7/netgraph/ng_base.c
+++ b/sys/netgraph7/netgraph/ng_base.c
@@ -3063,7 +3063,10 @@
 	    NG_HOOK_NOT_VALID(hook) ||
 	    NG_HOOK_NOT_VALID(peer = NG_HOOK_PEER(hook)) ||
 	    NG_NODE_NOT_VALID(peernode = NG_PEER_NODE(hook))) {
-		NG_FREE_ITEM(item);
+		if (item->refs == 0)
+			ng_free_item(item);
+		else
+			NG_FREE_ITEM(item);
 		TRAP_ERROR();
 		return (ENETDOWN);
 	}
@@ -3093,7 +3096,10 @@
 	 */
 	error = ng_path2noderef(here, address, &dest, &hook);
 	if (error) {
-		NG_FREE_ITEM(item);
+		if (item->refs == 0)
+			ng_free_item(item);
+		else
+			NG_FREE_ITEM(item);
 		return (error);
 	}
 	NGI_SET_NODE(item, dest);
@@ -3116,7 +3122,10 @@
 	 */
 	dest = ng_ID2noderef(ID); /* GETS REFERENCE! */
 	if (dest == NULL) {
-		NG_FREE_ITEM(item);
+		if (item->refs == 0)
+			ng_free_item(item);
+		else
+			NG_FREE_ITEM(item);
 		TRAP_ERROR();
 		return(EINVAL);
 	}