Checks for running off the stack
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 24 Sep 2013 21:06:02 +0000 (14:06 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jan 2014 02:10:15 +0000 (18:10 -0800)
Printing takes up a shitload of stack, esp when deep in a call stack (FS, net,
etc).  This will try to catch stack clobbers caused by calls to print that
cause print to run off the stack.

kern/src/printfmt.c

index 4ca264e..56431f5 100644 (file)
@@ -11,6 +11,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdarg.h>
+#include <kthread.h>
 
 /* Print a number (base <= 16) in reverse order,
  * using specified putch function and associated pointer putdat. */
@@ -237,6 +238,7 @@ void printfmt(void (*putch)(int, void**), void **putdat, const char *fmt, ...)
        va_start(ap, fmt);
        vprintfmt(putch, putdat, fmt, ap);
        va_end(ap);
+       check_poison("printfmt");
 }
 
 typedef struct sprintbuf {
@@ -287,7 +289,6 @@ int snprintf(char *buf, int n, const char *fmt, ...)
        rc = vsnprintf(buf, n, fmt, ap);
        va_end(ap);
 
+       check_poison("snprintf");
        return rc;
 }
-
-