summaryrefslogtreecommitdiff
path: root/libs/libsodium/src/sodium
diff options
context:
space:
mode:
authoraunsane <aunsane@gmail.com>2018-07-18 00:06:49 +0300
committeraunsane <aunsane@gmail.com>2018-07-18 00:17:42 +0300
commit5a8dadd96ca13797f67c39079ba5c4889ef8c421 (patch)
tree0532b9a3c21feb03a6a3be810f559ebf0af45947 /libs/libsodium/src/sodium
parent39d52f0ab12ecf2a3a5f48bf7af140db282a13a6 (diff)
updated libsodium
Diffstat (limited to 'libs/libsodium/src/sodium')
-rw-r--r--libs/libsodium/src/sodium/core.c2
-rw-r--r--libs/libsodium/src/sodium/runtime.c11
-rw-r--r--libs/libsodium/src/sodium/utils.c12
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