Module Name:    src
Committed By:   christos
Date:           Mon Oct 15 17:55:28 UTC 2018

Modified Files:
        src/tests/lib/libc/string: Makefile t_memmem.c

Log Message:
simple memmem test to show buffer overrun.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/tests/lib/libc/string/Makefile
cvs rdiff -u -r1.3 -r1.4 src/tests/lib/libc/string/t_memmem.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/lib/libc/string/Makefile
diff -u src/tests/lib/libc/string/Makefile:1.10 src/tests/lib/libc/string/Makefile:1.11
--- src/tests/lib/libc/string/Makefile:1.10	Thu May 25 21:24:19 2017
+++ src/tests/lib/libc/string/Makefile	Mon Oct 15 13:55:28 2018
@@ -1,8 +1,9 @@
-# $NetBSD: Makefile,v 1.10 2017/05/26 01:24:19 perseant Exp $
+# $NetBSD: Makefile,v 1.11 2018/10/15 17:55:28 christos Exp $
 
 .include <bsd.own.mk>
 
 TESTSDIR=	${TESTSBASE}/lib/libc/string
+DBG=-g
 
 TESTS_C+=	t_bm
 TESTS_C+=	t_memchr

Index: src/tests/lib/libc/string/t_memmem.c
diff -u src/tests/lib/libc/string/t_memmem.c:1.3 src/tests/lib/libc/string/t_memmem.c:1.4
--- src/tests/lib/libc/string/t_memmem.c:1.3	Wed Jan 11 13:07:37 2017
+++ src/tests/lib/libc/string/t_memmem.c	Mon Oct 15 13:55:28 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_memmem.c,v 1.3 2017/01/11 18:07:37 christos Exp $ */
+/*	$NetBSD: t_memmem.c,v 1.4 2018/10/15 17:55:28 christos Exp $ */
 
 /*-
  * Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -34,6 +34,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/mman.h>
 
 char p0[] = "";
 int lp0 = 0;
@@ -94,10 +95,40 @@ ATF_TC_BODY(memmem_basic, tc)
 	expect(memmem(b2, lb2, p8, lp8) == NULL);
 }
 
+ATF_TC(memmem_oob);
+ATF_TC_HEAD(memmem_oob, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Test memmem out of bounds read");
+}
+
+ATF_TC_BODY(memmem_oob, tc)
+{
+	static const char str[] = "abcde";
+	size_t pg = getpagesize();
+	char *src = mmap(NULL, pg, PROT_READ|PROT_WRITE,
+	    MAP_ANON|MAP_PRIVATE, -1, (off_t)0);
+	ATF_CHECK(src != MAP_FAILED); 
+	char *guard = mmap(src + pg, pg,
+	    PROT_NONE, MAP_ANON|MAP_PRIVATE|MAP_FIXED, -1, (off_t)0);
+	for (size_t i = 2; i < 5; i++) {
+		char *search = src + pg - i;
+		char match[sizeof(str)];
+		search[-1] = str[0];
+		search[0] = str[0];
+		search[1] = str[0];
+		memcpy(match, str, i);
+		ATF_CHECK(memmem(search, i, match, i) != search);
+	}
+	munmap(guard, pg);
+	munmap(src, pg);
+}
+
+
 ATF_TP_ADD_TCS(tp)
 {
 
 	ATF_TP_ADD_TC(tp, memmem_basic);
+	ATF_TP_ADD_TC(tp, memmem_oob);
 
 	return atf_no_error();
 }

Reply via email to