ForceZero - align 64-bit access on Intel 64-bit

Test added to ensure ForceZero works.
pull/1567/head
Sean Parkinson 2018-05-15 10:45:11 +10:00
parent 7a4da340d4
commit d63da10c96
2 changed files with 43 additions and 0 deletions

View File

@ -201,7 +201,13 @@ STATIC INLINE void ForceZero(const void* mem, word32 len)
volatile byte* z = (volatile byte*)mem;
#if defined(WOLFSSL_X86_64_BUILD) && defined(WORD64_AVAILABLE)
volatile word64* w;
#ifndef WOLFSSL_UNALIGNED_64BIT_ACCESS
word32 l = (8 - ((size_t)z & 0x7)) & 0x7;
if (len < l) l = len;
len -= l;
while (l--) *z++ = 0;
#endif
for (w = (volatile word64*)z; len >= sizeof(*w); len -= sizeof(*w))
*w++ = 0;
z = (volatile byte*)w;

View File

@ -120,6 +120,10 @@
#include <wolfssl/wolfcrypt/port/caam/wolfcaam.h>
#endif
#define WOLFSSL_MISC_INCLUDED
#include <wolfcrypt/src/misc.c>
/* only for stack size check */
#ifdef HAVE_STACK_SIZE
#include <wolfssl/ssl.h>
@ -335,6 +339,7 @@ int memcb_test(void);
#ifdef WOLFSSL_IMX6_CAAM_BLOB
int blob_test(void);
#endif
int misc_test(void);
/* General big buffer size for many tests. */
@ -950,6 +955,11 @@ initDefaultName();
printf( "blob test passed!\n");
#endif
if ( (ret = misc_test()) != 0)
return err_sys("misc test failed!\n", ret);
else
printf( "misc test passed!\n");
#ifdef WOLFSSL_ASYNC_CRYPT
wolfAsync_DevClose(&devId);
#endif
@ -18524,6 +18534,33 @@ int blob_test(void)
}
#endif /* WOLFSSL_IMX6_CAAM_BLOB */
int misc_test(void)
{
unsigned char data[32];
unsigned int i, j, len;
/* Test ForceZero */
for (i = 0; i < sizeof(data); i++) {
for (len = 1; len < sizeof(data) - i; len++) {
for (j = 0; j < sizeof(data); j++)
data[j] = j + 1;
ForceZero(data + i, len);
for (j = 0; j < sizeof(data); j++) {
if (j < i || j >= i + len) {
if (data[j] == 0x00)
return -9000;
}
else if (data[j] != 0x00)
return -9001;
}
}
}
return 0;
}
#undef ERROR_OUT
#else