svn commit: trunk/uClibc/test/malloc
vapier at uclibc.org
vapier at uclibc.org
Tue Apr 17 11:58:38 UTC 2007
Author: vapier
Date: 2007-04-17 04:58:35 -0700 (Tue, 17 Apr 2007)
New Revision: 18468
Log:
catch a small overflow in malloc-standard
Added:
trunk/uClibc/test/malloc/malloc-standard-alignment.c
Changeset:
Added: trunk/uClibc/test/malloc/malloc-standard-alignment.c
===================================================================
--- trunk/uClibc/test/malloc/malloc-standard-alignment.c (rev 0)
+++ trunk/uClibc/test/malloc/malloc-standard-alignment.c 2007-04-17 11:58:35 UTC (rev 18468)
@@ -0,0 +1,42 @@
+/* exercise a bug found in malloc-standard when alignment
+ * values are out of whack and cause a small overflow into
+ * actual user data.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+
+#define ok(p) ((void*)p > (void*)0x1000)
+#define x \
+ do { \
+ printf("%i: phead = %p, phead->link @ %p = %p %s\n", \
+ __LINE__, phead, \
+ ok(phead) ? &phead->link : 0, \
+ ok(phead) ? phead->link : 0, \
+ ok(phead) ? phead->link == 0 ? "" : "!!!!!!!!!!!" : ""); \
+ if (phead->link != NULL) exit(1); \
+ } while (0);
+
+struct llist_s {
+ void *data;
+ struct llist_s *link;
+} *phead;
+
+int main()
+{
+ char *line, *reg;
+
+ setbuf(stdout, NULL);
+ setbuf(stderr, NULL);
+
+ phead = malloc(sizeof(*phead));
+ phead->link = NULL;
+
+x line = malloc(80);
+x line = realloc(line, 2);
+x reg = malloc(32);
+x free(line);
+
+x return 0;
+}
More information about the uClibc-cvs
mailing list