diff options
author | Martin Willi <martin@revosec.ch> | 2011-05-24 10:00:57 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2011-05-24 11:49:20 +0200 |
commit | d45b242b6041d21e1cae3add18b7c69f5e45b940 (patch) | |
tree | 5e0d12f6c7e4bd36efea591babd4d0dbafb0e03f | |
parent | 8c1bfe6545f477f89a70b4dfbfedd4ab2e36d30b (diff) | |
download | strongswan-d45b242b6041d21e1cae3add18b7c69f5e45b940.tar.bz2 strongswan-d45b242b6041d21e1cae3add18b7c69f5e45b940.tar.xz |
Fix memwipe() of leading unaligned bytes
-rw-r--r-- | src/libstrongswan/utils.h | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/libstrongswan/utils.h b/src/libstrongswan/utils.h index a334954ae..bef6f6638 100644 --- a/src/libstrongswan/utils.h +++ b/src/libstrongswan/utils.h @@ -347,17 +347,20 @@ void memwipe_noinline(void *ptr, size_t n); static inline void memwipe_inline(void *ptr, size_t n) { volatile char *c = (volatile char*)ptr; - int m, i; + size_t m, i; /* byte wise until long aligned */ - for (i = 0; (uintptr_t)&c % sizeof(long) && i < n; i++) + for (i = 0; (uintptr_t)&c[i] % sizeof(long) && i < n; i++) { c[i] = 0; } - /* word wize */ - for (m = n - sizeof(long); i <= m; i += sizeof(long)) + /* word wise */ + if (n >= sizeof(long)) { - *(volatile long*)&c[i] = 0; + for (m = n - sizeof(long); i <= m; i += sizeof(long)) + { + *(volatile long*)&c[i] = 0; + } } /* byte wise of the rest */ for (; i < n; i++) |