]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
memxor-test: Use valgrind client requests.
authorNiels Möller <nisse@lysator.liu.se>
Sat, 4 Jan 2014 21:55:26 +0000 (22:55 +0100)
committerNiels Möller <nisse@lysator.liu.se>
Sat, 4 Jan 2014 21:55:26 +0000 (22:55 +0100)
ChangeLog
testsuite/memxor-test.c

index 0e16bd9909657ec1c32d7ead05184b6c951ca513..a1d28c6434c2a7d6e384199b7b110ed6f9d69e55 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2014-01-04  Niels Möller  <nisse@lysator.liu.se>
 
+       * testsuite/memxor-test.c [HAVE_VALGRIND_MEMCHECK_H] (test_mark):
+       New function.
+       (test_memxor, test_memxor3): Use test_mark to tell valgrind the
+       start and end of src and destination areas.
+
        * configure.ac: Check for valgrind/memcheck.h.
 
        * testsuite/Makefile.in (VALGRIND): Added --partial-loads-ok=yes,
index 33194330b0308749f924db40556289fa8f892178..82681a5b9164150bcd04e3cc225461a3f75ffb0d 100644 (file)
@@ -4,6 +4,31 @@
 #define MAX_SIZE 256
 #define ALIGN_SIZE 16
 
+#if HAVE_VALGRIND_MEMCHECK_H
+# include <valgrind/memcheck.h>
+# define ROUND_DOWN(x) ((x) & (-ALIGN_SIZE))
+# define ROUND_UP(x) ROUND_DOWN((x)+(ALIGN_SIZE-1))
+enum mark_type { MARK_SRC, MARK_DST };
+
+static void
+test_mark (enum mark_type type,
+          const uint8_t *block, size_t block_size,
+          const uint8_t *p, size_t size)
+{
+  VALGRIND_MAKE_MEM_NOACCESS(block, p - block);
+  if (type == MARK_DST)
+    VALGRIND_MAKE_MEM_UNDEFINED(p, size);
+  VALGRIND_MAKE_MEM_NOACCESS(p + size,
+                            (block + block_size) - (p + size));
+}
+
+#define test_unmark(block, size) \
+  VALGRIND_MAKE_MEM_DEFINED((block), (size))
+#else
+# define test_mark(type, block, block_size, start, size)
+# define test_unmark(block, size)
+#endif
+
 static uint8_t *
 set_align(uint8_t *buf, unsigned align)
 {
@@ -39,9 +64,14 @@ test_memxor (const uint8_t *a, const uint8_t *b, const uint8_t *c,
   dst[size] = 17;
 
   memcpy (src, b, size);
-  memxor (dst, src, size);
+  test_mark (MARK_SRC, src_buf, sizeof (src_buf), src, size);
+  test_mark (MARK_SRC, dst_buf, sizeof (dst_buf), dst, size);
 
+  memxor (dst, src, size);
   ASSERT (MEMEQ (size, dst, c));
+  
+  test_unmark(src_buf, sizeof (src_buf));
+  test_unmark(dst_buf, sizeof (src_buf));
   ASSERT (dst[-1] == 17);
   ASSERT (dst[size] == 17);
 }
@@ -68,9 +98,17 @@ test_memxor3 (const uint8_t *ain, const uint8_t *bin, const uint8_t *c,
 
   memcpy (a, ain, size);
   memcpy (b, bin, size);
-  memxor3 (dst, a, b, size);
+  test_mark (MARK_SRC, a_buf, sizeof(a_buf), a, size);
+  test_mark (MARK_SRC, b_buf, sizeof(b_buf), b, size);
+  test_mark (MARK_DST, dst_buf, sizeof(dst_buf), dst, size);
 
+  memxor3 (dst, a, b, size);
   ASSERT (MEMEQ (size, dst, c));
+
+  test_unmark (a_buf, sizeof(a_buf));
+  test_unmark (b_buf, sizeof(b_buf));
+  test_unmark (dst_buf, sizeof(dst_buf));
+
   ASSERT (dst[-1] == 17);
   ASSERT (dst[size] == 17);
 }