1/* BEGIN_HEADER */
2
3/* Test some parts of the test framework. */
4
5#include <test/helpers.h>
6#include <test/memory.h>
7
8/* END_HEADER */
9
10/* BEGIN_DEPENDENCIES */
11
12/* END_DEPENDENCIES */
13
14/* BEGIN_CASE depends_on:MBEDTLS_TEST_MEMORY_CAN_POISON */
15/* Test that poison+unpoison leaves the memory accessible. */
16/* We can't test that poisoning makes the memory inaccessible:
17 * there's no sane way to catch an Asan/Valgrind complaint.
18 * That negative testing is done in programs/test/metatest.c. */
19void memory_poison_unpoison(int align, int size)
20{
21    unsigned char *buf = NULL;
22    const size_t buffer_size = align + size;
23    TEST_CALLOC(buf, buffer_size);
24
25    for (size_t i = 0; i < buffer_size; i++) {
26        buf[i] = (unsigned char) (i & 0xff);
27    }
28
29    const unsigned char *start = buf == NULL ? NULL : buf + align;
30    mbedtls_test_memory_poison(start, (size_t) size);
31    mbedtls_test_memory_unpoison(start, (size_t) size);
32
33    for (size_t i = 0; i < buffer_size; i++) {
34        TEST_EQUAL(buf[i], (unsigned char) (i & 0xff));
35    }
36
37exit:
38    mbedtls_free(buf);
39}
40/* END_CASE */
41