From 5aa2b913f41d638c54e9b9dc9a9fd2d1e78422a7 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 11 Dec 2017 23:15:15 +0100 Subject: [PATCH] Immediately allocate all required memory in argon2/scrypt --- .../crypto_pwhash/argon2/argon2-core.c | 12 +++++++----- .../scryptsalsa208sha256/scrypt_platform.c | 17 ++++++++++------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/libsodium/crypto_pwhash/argon2/argon2-core.c b/src/libsodium/crypto_pwhash/argon2/argon2-core.c index 2c8a8ebf..c69ed710 100644 --- a/src/libsodium/crypto_pwhash/argon2/argon2-core.c +++ b/src/libsodium/crypto_pwhash/argon2/argon2-core.c @@ -34,6 +34,12 @@ #if !defined(MAP_ANON) && defined(MAP_ANONYMOUS) # define MAP_ANON MAP_ANONYMOUS #endif +#ifndef MAP_NOCORE +# define MAP_NOCORE 0 +#endif +#ifndef MAP_POPULATE +# define MAP_POPULATE 0 +#endif static fill_segment_fn fill_segment = fill_segment_ref; @@ -88,11 +94,7 @@ allocate_memory(block_region **region, uint32_t m_cost) #if defined(MAP_ANON) && defined(HAVE_MMAP) if ((base = mmap(NULL, memory_size, PROT_READ | PROT_WRITE, -#ifdef MAP_NOCORE - MAP_ANON | MAP_PRIVATE | MAP_NOCORE, -#else - MAP_ANON | MAP_PRIVATE, -#endif + MAP_ANON | MAP_PRIVATE | MAP_NOCORE | MAP_POPULATE, -1, 0)) == MAP_FAILED) { base = NULL; /* LCOV_EXCL_LINE */ } /* LCOV_EXCL_LINE */ diff --git a/src/libsodium/crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c b/src/libsodium/crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c index 3261c4ed..139a7df2 100644 --- a/src/libsodium/crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c +++ b/src/libsodium/crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c @@ -28,7 +28,13 @@ #include "runtime.h" #if !defined(MAP_ANON) && defined(MAP_ANONYMOUS) -#define MAP_ANON MAP_ANONYMOUS +# define MAP_ANON MAP_ANONYMOUS +#endif +#ifndef MAP_NOCORE +# define MAP_NOCORE 0 +#endif +#ifndef MAP_POPULATE +# define MAP_POPULATE 0 #endif void * @@ -37,13 +43,10 @@ alloc_region(escrypt_region_t *region, size_t size) uint8_t *base, *aligned; #if defined(MAP_ANON) && defined(HAVE_MMAP) if ((base = (uint8_t *) mmap(NULL, size, PROT_READ | PROT_WRITE, -#ifdef MAP_NOCORE - MAP_ANON | MAP_PRIVATE | MAP_NOCORE, -#else - MAP_ANON | MAP_PRIVATE, -#endif - -1, 0)) == MAP_FAILED) + MAP_ANON | MAP_PRIVATE | MAP_NOCORE | MAP_POPULATE, + -1, 0)) == MAP_FAILED) { base = NULL; /* LCOV_EXCL_LINE */ + } /* LCOV_EXCL_LINE */ aligned = base; #elif defined(HAVE_POSIX_MEMALIGN) if ((errno = posix_memalign((void **) &base, 64, size)) != 0) {