DragonFlyBSD Kernel Audit
DF-0164 / fix.diff
← back to finding ↓ download raw
diff --git a/kern/kern_module.c b/kern/kern_module.c
--- a/kern/kern_module.c
+++ b/kern/kern_module.c
@@ -345,11 +345,14 @@
 	goto out;
     }
 
-    namelen = strlen(mod->name) + 1;
-    if (namelen > MAXMODNAME)
-	namelen = MAXMODNAME;
+    namelen = strlen(mod->name);
+    if (namelen >= MAXMODNAME)
+	namelen = MAXMODNAME - 1;
     if ((error = copyout(mod->name, &stat->name[0], namelen)) != 0)
 	goto out;
+    /* Ensure NUL termination. */
+    { char zero = 0; error = copyout(&zero, &stat->name[namelen], 1); }
+	goto out;
 
     if ((error = copyout(&mod->refs, &stat->refs, sizeof(int))) != 0)
 	goto out;