DragonFlyBSD Kernel Audit
DF-0111 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/kern/subr_scanf.c b/sys/kern/subr_scanf.c
--- a/sys/kern/subr_scanf.c
+++ b/sys/kern/subr_scanf.c
@@ -305,10 +305,13 @@
 				}
 				nread += sum;
 			} else {
-				bcopy(inp, __va_arg(ap, char *), width);
-				inr -= width;
-				inp += width;
-				nread += width;
+				size_t copylen = width;
+				if (copylen > inr)
+					copylen = inr;
+				bcopy(inp, __va_arg(ap, char *), copylen);
+				inr -= copylen;
+				inp += copylen;
+				nread += copylen;
 				nassigned++;
 			}
 			nconversions++;