Rework the calloc buffer initialization test in selftest.c
This way it's more in line with development.
Signed-off-by: Andrzej Kurek <andrzej.kurek@arm.com>
diff --git a/programs/test/selftest.c b/programs/test/selftest.c
index 3adf2e5..be97a58 100644
--- a/programs/test/selftest.c
+++ b/programs/test/selftest.c
@@ -77,23 +77,49 @@
void *empty2 = mbedtls_calloc(0, 1);
void *buffer1 = mbedtls_calloc(1, 1);
void *buffer2 = mbedtls_calloc(1, 1);
+ unsigned int buf_size = 256;
+ unsigned char *buffer3 = mbedtls_calloc(buf_size, sizeof(unsigned char));
if (empty1 == NULL && empty2 == NULL) {
if (verbose) {
- mbedtls_printf(" CALLOC(0): passed (NULL)\n");
+ mbedtls_printf(" CALLOC(0,1): passed (NULL)\n");
}
} else if (empty1 == NULL || empty2 == NULL) {
if (verbose) {
- mbedtls_printf(" CALLOC(0): failed (mix of NULL and non-NULL)\n");
+ mbedtls_printf(" CALLOC(0,1): failed (mix of NULL and non-NULL)\n");
}
++failures;
} else if (empty1 == empty2) {
if (verbose) {
- mbedtls_printf(" CALLOC(0): passed (same non-null)\n");
+ mbedtls_printf(" CALLOC(0,1): passed (same non-null)\n");
}
} else {
if (verbose) {
- mbedtls_printf(" CALLOC(0): passed (distinct non-null)\n");
+ mbedtls_printf(" CALLOC(0,1): passed (distinct non-null)\n");
+ }
+ }
+
+ mbedtls_free(empty1);
+ mbedtls_free(empty2);
+
+ empty1 = mbedtls_calloc(1, 0);
+ empty2 = mbedtls_calloc(1, 0);
+ if (empty1 == NULL && empty2 == NULL) {
+ if (verbose) {
+ mbedtls_printf(" CALLOC(1,0): passed (NULL)\n");
+ }
+ } else if (empty1 == NULL || empty2 == NULL) {
+ if (verbose) {
+ mbedtls_printf(" CALLOC(1,0): failed (mix of NULL and non-NULL)\n");
+ }
+ ++failures;
+ } else if (empty1 == empty2) {
+ if (verbose) {
+ mbedtls_printf(" CALLOC(1,0): passed (same non-null)\n");
+ }
+ } else {
+ if (verbose) {
+ mbedtls_printf(" CALLOC(1,0): passed (distinct non-null)\n");
}
}
@@ -126,6 +152,16 @@
}
}
+ for (unsigned int i = 0; i < buf_size; i++) {
+ if (buffer3[i] != 0) {
+ ++failures;
+ if (verbose) {
+ mbedtls_printf(" CALLOC(%u): failed (memory not initialized to 0)\n", buf_size);
+ }
+ break;
+ }
+ }
+
if (verbose) {
mbedtls_printf("\n");
}
@@ -133,6 +169,7 @@
mbedtls_free(empty2);
mbedtls_free(buffer1);
mbedtls_free(buffer2);
+ mbedtls_free(buffer3);
return failures;
}
#endif /* MBEDTLS_SELF_TEST */
@@ -167,23 +204,6 @@
test_snprintf(5, "123", 3) != 0;
}
-static int run_test_mbedtls_calloc(void)
-{
- unsigned int buf_size = 256;
- unsigned char *buf;
- int ret = -1;
- buf = mbedtls_calloc(buf_size, sizeof(unsigned char));
- for (unsigned int i = 0; i < buf_size; i++) {
- if (buf[i] != 0) {
- ret = -1;
- goto exit;
- }
- }
- ret = 0;
-exit:
- mbedtls_free(buf);
- return ret;
-}
/*
* Check if a seed file is present, and if not create one for the entropy
* self-test. If this fails, we attempt the test anyway, so no error is passed
@@ -393,12 +413,6 @@
mbedtls_exit(MBEDTLS_EXIT_FAILURE);
}
- /* Make sure that mbedtls_calloc zeroizes the buffer */
- if (run_test_mbedtls_calloc() != 0) {
- mbedtls_printf("the calloc implementation does not zeroize the buffer\n");
- mbedtls_exit(MBEDTLS_EXIT_FAILURE);
- }
-
for (argp = argv + (argc >= 1 ? 1 : argc); *argp != NULL; ++argp) {
if (strcmp(*argp, "--quiet") == 0 ||
strcmp(*argp, "-q") == 0) {