Author: mturk Date: Sun Aug 16 17:16:10 2009 New Revision: 804722 URL: http://svn.apache.org/viewvc?rev=804722&view=rev Log: Use secure version of memzero
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_sbuf.h commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h commons/sandbox/runtime/trunk/src/main/native/shared/md5.c commons/sandbox/runtime/trunk/src/main/native/shared/sbuf.c commons/sandbox/runtime/trunk/src/main/native/shared/sha1.c commons/sandbox/runtime/trunk/src/main/native/shared/sha2.c Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_sbuf.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_sbuf.h?rev=804722&r1=804721&r2=804722&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/include/acr_sbuf.h (original) +++ commons/sandbox/runtime/trunk/src/main/native/include/acr_sbuf.h Sun Aug 16 17:16:10 2009 @@ -82,6 +82,7 @@ int acr_sbuf_putc(acr_sbuf_t *, int); int acr_sbuf_rtrim(acr_sbuf_t *); char *acr_sbuf_ltrim(acr_sbuf_t *); +char *acr_sbuf_trim(acr_sbuf_t *); int acr_sbuf_overflowed(acr_sbuf_t *); void acr_sbuf_finish(acr_sbuf_t *); char *acr_sbuf_data(acr_sbuf_t *); Modified: commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h?rev=804722&r1=804721&r2=804722&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h (original) +++ commons/sandbox/runtime/trunk/src/main/native/include/arch/unix/acr_arch.h Sun Aug 16 17:16:10 2009 @@ -109,6 +109,23 @@ } /** + * Secure version of zero memory + * It should force compiler to always set the + * memory to zero + */ +static ACR_FORCEINLINE void *x_memzero(void *p, size_t len) +{ + volatile char *ptr = (volatile char *)p; + + while (len) { + *ptr = 0; + ptr++; + len--; + } + return p; +} + +/** * Read the content of a txt file, up to the ACR_MAX_FREAD_LEN * and remove all trailing space and control characters. * @param name The file name to read. Modified: commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h?rev=804722&r1=804721&r2=804722&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h (original) +++ commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h Sun Aug 16 17:16:10 2009 @@ -300,6 +300,24 @@ #define ACR_IOH_FLAGS(H) acr_ioh_tab[(H) & acr_ioh_mask].flags #define ACR_IOH(H) acr_ioh_tab[(H) & acr_ioh_mask].h +static ACR_INLINE void FileTimeToAprTime(acr_time_t *result, LPFILETIME input) +{ + /* Convert FILETIME one 64 bit number so we can work with it. */ + *result = ((LARGE_INTEGER *)input)->QuadPart; + /* Convert from 100 nano-sec periods to micro-seconds. */ + *result /= 10; + /* Convert from Windows epoch to Unix epoch */ + *result -= ACR_DELTA_EPOCH_IN_USEC; + return; +} + + +static ACR_INLINE void AprTimeToFileTime(LPFILETIME result, acr_time_t t) +{ + ((LARGE_INTEGER *)result)->QuadPart = (t + ACR_DELTA_EPOCH_IN_USEC) * 10; + return; +} + static ACR_INLINE void x_free(void *p) { if (p != NULL) { @@ -312,7 +330,7 @@ if (size > 0 && size < INT_MAX) return calloc(1, size); else { - SetLastError(ERROR_NOT_ENOUGH_MEMORY); + errno = ENOMEM; return NULL; } } @@ -322,27 +340,26 @@ if (size > 0 && size < INT_MAX) return calloc(1, size); else { - SetLastError(ERROR_NOT_ENOUGH_MEMORY); + errno = ENOMEM; return NULL; } } -static ACR_INLINE void FileTimeToAprTime(acr_time_t *result, LPFILETIME input) -{ - /* Convert FILETIME one 64 bit number so we can work with it. */ - *result = ((LARGE_INTEGER *)input)->QuadPart; - /* Convert from 100 nano-sec periods to micro-seconds. */ - *result /= 10; - /* Convert from Windows epoch to Unix epoch */ - *result -= ACR_DELTA_EPOCH_IN_USEC; - return; -} - - -static ACR_INLINE void AprTimeToFileTime(LPFILETIME result, acr_time_t t) +/** + * Secure version of zero memory + * It should force compiler to always set the + * memory to zero + */ +static ACR_FORCEINLINE void *x_memzero(void *p, size_t len) { - ((LARGE_INTEGER *)result)->QuadPart = (t + ACR_DELTA_EPOCH_IN_USEC) * 10; - return; + volatile char *ptr = (volatile char *)p; + + while (len) { + *ptr = 0; + ptr++; + len--; + } + return p; } struct dirent { Modified: commons/sandbox/runtime/trunk/src/main/native/shared/md5.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/md5.c?rev=804722&r1=804721&r2=804722&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/shared/md5.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/shared/md5.c Sun Aug 16 17:16:10 2009 @@ -32,6 +32,7 @@ */ #include "acr.h" +#include "acr_arch.h" #include "acr_private.h" #include "acr_error.h" #include "acr_string.h" @@ -280,7 +281,7 @@ if (digest != NULL) { for (i = 0; i < 4; i++) PUT_32BIT_LE(digest + i * 4, ctx->state[i]); - memset(ctx, 0, sizeof(*ctx)); + x_memzero(ctx, sizeof(*ctx)); } } @@ -302,7 +303,7 @@ } out[x] = '\0'; - memset(digest, 0, sizeof(digest)); + x_memzero(digest, sizeof(digest)); return out; } @@ -324,7 +325,7 @@ } out[x] = L'\0'; - memset(digest, 0, sizeof(digest)); + x_memzero(digest, sizeof(digest)); return out; } Modified: commons/sandbox/runtime/trunk/src/main/native/shared/sbuf.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/sbuf.c?rev=804722&r1=804721&r2=804722&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/shared/sbuf.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/shared/sbuf.c Sun Aug 16 17:16:10 2009 @@ -418,6 +418,24 @@ } /* + * Trim the sbuf. + */ +char * +acr_sbuf_trim(acr_sbuf_t *s) +{ + + char *p = s->s_buf; + + acr_sbuf_rtrim(s); + acr_sbuf_finish(s); + + while (*p && acr_isspace(*p)) + p++; + + return p; +} + +/* * Check if an sbuf overflowed */ int Modified: commons/sandbox/runtime/trunk/src/main/native/shared/sha1.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/sha1.c?rev=804722&r1=804721&r2=804722&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/shared/sha1.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/shared/sha1.c Sun Aug 16 17:16:10 2009 @@ -34,6 +34,7 @@ */ #include "acr.h" +#include "acr_arch.h" #include "acr_private.h" #include "acr_error.h" #include "acr_string.h" @@ -212,7 +213,7 @@ digest[i] = (acr_byte_t) ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); } - memset(context, 0, sizeof(*context)); + x_memzero(context, sizeof(*context)); } } @@ -234,7 +235,7 @@ } out[x] = '\0'; - memset(digest, 0, sizeof(digest)); + x_memzero(digest, sizeof(digest)); return out; } @@ -258,7 +259,7 @@ } out[x] = L'\0'; - memset(digest, 0, sizeof(digest)); + x_memzero(digest, sizeof(digest)); return out; } Modified: commons/sandbox/runtime/trunk/src/main/native/shared/sha2.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/sha2.c?rev=804722&r1=804721&r2=804722&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/shared/sha2.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/shared/sha2.c Sun Aug 16 17:16:10 2009 @@ -39,6 +39,7 @@ */ #include "acr.h" +#include "acr_arch.h" #include "acr_private.h" #include "acr_error.h" #include "acr_string.h" @@ -854,7 +855,7 @@ #else memcpy(digest, context->state.st64, ACR_SHA512_DIGEST_LENGTH); #endif - memset(context, 0, sizeof(*context)); + x_memzero(context, sizeof(*context)); } } @@ -876,7 +877,7 @@ } out[x] = '\0'; - memset(digest, 0, sizeof(digest)); + x_memzero(digest, sizeof(digest)); return out; } @@ -900,7 +901,7 @@ } out[x] = L'\0'; - memset(digest, 0, sizeof(digest)); + x_memzero(digest, sizeof(digest)); return out; }