⬢ DragonFlyBSD Kernel Audit
DF-5718 / fix.diff
← back to finding ↓ download raw
--- a/sys/netgraph/netgraph/ng_parse.c	2026-06-29 12:51:19.000000000 +0000
+++ b/sys/netgraph/netgraph/ng_parse.c	2026-10-10 14:50:03.426033369 +0000
@@ -1569,7 +1569,9 @@
 			int x, k;
 			char *v;
 
-			strcpy(p, p + 1);
+			/* DF-5718: src and dst overlap - strcpy violates the
+			 * restrict contract; use the overlap-safe memmove. */
+			memmove(p, p + 1, strlen(p + 1) + 1);
 			v = p;
 			switch (*p) {
 			case 't':
@@ -1618,7 +1620,8 @@
 			default:
 				continue;
 			}
-			strcpy(p, v);
+			/* DF-5718: overlap-safe memmove (see above). */
+			memmove(p, v, strlen(v) + 1);
 		}
 	}
 	return (NULL);		/* no closing quote */
--- a/sys/netgraph7/netgraph/ng_parse.c	2026-07-16 12:08:30.390805146 +0000
+++ b/sys/netgraph7/netgraph/ng_parse.c	2026-10-10 14:50:03.438033215 +0000
@@ -1761,7 +1761,9 @@
 			int x, k;
 			char *v;
 
-			strcpy(p, p + 1);
+			/* DF-5718: src and dst overlap - strcpy violates the
+			 * restrict contract; use the overlap-safe memmove. */
+			memmove(p, p + 1, strlen(p + 1) + 1);
 			v = p;
 			switch (*p) {
 			case 't':
@@ -1810,7 +1812,8 @@
 			default:
 				continue;
 			}
-			strcpy(p, v);
+			/* DF-5718: overlap-safe memmove (see above). */
+			memmove(p, v, strlen(v) + 1);
 		}
 	}
 	kfree(cbuf, M_NETGRAPH_PARSE);