diff options
Diffstat (limited to 'src/lib/libcrypto/mem_clr.c')
-rw-r--r-- | src/lib/libcrypto/mem_clr.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/lib/libcrypto/mem_clr.c b/src/lib/libcrypto/mem_clr.c index e4b7f540b0..add1f78020 100644 --- a/src/lib/libcrypto/mem_clr.c +++ b/src/lib/libcrypto/mem_clr.c | |||
@@ -64,12 +64,14 @@ unsigned char cleanse_ctr = 0; | |||
64 | void OPENSSL_cleanse(void *ptr, size_t len) | 64 | void OPENSSL_cleanse(void *ptr, size_t len) |
65 | { | 65 | { |
66 | unsigned char *p = ptr; | 66 | unsigned char *p = ptr; |
67 | size_t loop = len; | 67 | size_t loop = len, ctr = cleanse_ctr; |
68 | while(loop--) | 68 | while(loop--) |
69 | { | 69 | { |
70 | *(p++) = cleanse_ctr; | 70 | *(p++) = (unsigned char)ctr; |
71 | cleanse_ctr += (17 + (unsigned char)((int)p & 0xF)); | 71 | ctr += (17 + ((size_t)p & 0xF)); |
72 | } | 72 | } |
73 | if(memchr(ptr, cleanse_ctr, len)) | 73 | p=memchr(ptr, (unsigned char)ctr, len); |
74 | cleanse_ctr += 63; | 74 | if(p) |
75 | ctr += (63 + (size_t)p); | ||
76 | cleanse_ctr = (unsigned char)ctr; | ||
75 | } | 77 | } |