diff options
author | aunsane <aunsane@gmail.com> | 2018-07-18 00:06:49 +0300 |
---|---|---|
committer | aunsane <aunsane@gmail.com> | 2018-07-18 00:17:42 +0300 |
commit | 5a8dadd96ca13797f67c39079ba5c4889ef8c421 (patch) | |
tree | 0532b9a3c21feb03a6a3be810f559ebf0af45947 /libs/libsodium/src/sodium | |
parent | 39d52f0ab12ecf2a3a5f48bf7af140db282a13a6 (diff) |
updated libsodium
Diffstat (limited to 'libs/libsodium/src/sodium')
-rw-r--r-- | libs/libsodium/src/sodium/core.c | 2 | ||||
-rw-r--r-- | libs/libsodium/src/sodium/runtime.c | 11 | ||||
-rw-r--r-- | libs/libsodium/src/sodium/utils.c | 12 |
3 files changed, 16 insertions, 9 deletions
diff --git a/libs/libsodium/src/sodium/core.c b/libs/libsodium/src/sodium/core.c index 1ac29d09c8..d667312f19 100644 --- a/libs/libsodium/src/sodium/core.c +++ b/libs/libsodium/src/sodium/core.c @@ -21,7 +21,7 @@ #include "private/implementations.h" #include "private/mutex.h" -#if !defined(_MSC_VER) && 0 +#if !defined(_MSC_VER) && 1 # warning *** This is unstable, untested, development code. # warning It might not compile. It might not work as expected. # warning It might be totally insecure. diff --git a/libs/libsodium/src/sodium/runtime.c b/libs/libsodium/src/sodium/runtime.c index ba1000f4dc..f5c805cf55 100644 --- a/libs/libsodium/src/sodium/runtime.c +++ b/libs/libsodium/src/sodium/runtime.c @@ -153,10 +153,21 @@ _sodium_runtime_intel_cpu_features(CPUFeatures * const cpu_features) (defined(_MSC_VER) && defined(_XCR_XFEATURE_ENABLED_MASK) && _MSC_FULL_VER >= 160040219) xcr0 = (uint32_t) _xgetbv(0); # elif defined(_MSC_VER) && defined(_M_IX86) + /* + * Visual Studio documentation states that eax/ecx/edx don't need to + * be preserved in inline assembly code. But that doesn't seem to + * always hold true on Visual Studio 2010. + */ __asm { + push eax + push ecx + push edx xor ecx, ecx _asm _emit 0x0f _asm _emit 0x01 _asm _emit 0xd0 mov xcr0, eax + pop edx + pop ecx + pop eax } # elif defined(HAVE_AVX_ASM) __asm__ __volatile__(".byte 0x0f, 0x01, 0xd0" /* XGETBV */ diff --git a/libs/libsodium/src/sodium/utils.c b/libs/libsodium/src/sodium/utils.c index 85aad29200..3a5f835b9f 100644 --- a/libs/libsodium/src/sodium/utils.c +++ b/libs/libsodium/src/sodium/utils.c @@ -25,7 +25,7 @@ # ifdef HAVE_ALLOCA_H # include <alloca.h> # elif !defined(alloca) -# if defined(__GNUC__) +# if defined(__clang__) || defined(__GNUC__) # define alloca __builtin_alloca # elif defined _AIX # define alloca __alloca @@ -113,8 +113,8 @@ sodium_memzero(void *const pnt, const size_t len) #elif HAVE_WEAK_SYMBOLS memset(pnt, 0, len); _sodium_dummy_symbol_to_prevent_memzero_lto(pnt, len); -# ifdef HAVE_AMD64_ASM - __asm__ __volatile__ ("" : : "p"(pnt)); +# ifdef HAVE_INLINE_ASM + __asm__ __volatile__ ("" : : "r"(pnt) : "memory"); # endif #else volatile unsigned char *volatile pnt_ = @@ -573,15 +573,11 @@ sodium_malloc(const size_t size) __attribute__((malloc)) void * sodium_allocarray(size_t count, size_t size) { - size_t total_size; - if (count > (size_t) 0U && size >= (size_t) SIZE_MAX / count) { errno = ENOMEM; return NULL; } - total_size = count * size; - - return sodium_malloc(total_size); + return sodium_malloc(count * size); } #ifndef HAVE_ALIGNED_MALLOC |