crypto/sec_mem.c: fix anonymous mmap on legacy systems.
Reviewed-by: Kurt Roeckx <kurt@openssl.org>
This commit is contained in:
parent
9d0e4dc635
commit
27186da715
1 changed files with 18 additions and 2 deletions
|
@ -19,8 +19,11 @@
|
|||
# include <string.h>
|
||||
# include <assert.h>
|
||||
# include <unistd.h>
|
||||
# include <sys/types.h>
|
||||
# include <sys/mman.h>
|
||||
# include <sys/param.h>
|
||||
# include <sys/stat.h>
|
||||
# include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#define LOCK() CRYPTO_w_lock(CRYPTO_LOCK_MALLOC)
|
||||
|
@ -336,8 +339,21 @@ static int sh_init(size_t size, int minsize)
|
|||
pgsize = PAGE_SIZE;
|
||||
#endif
|
||||
sh.map_size = pgsize + sh.arena_size + pgsize;
|
||||
sh.map_result = mmap(NULL, sh.map_size,
|
||||
PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);
|
||||
if (1) {
|
||||
#ifdef MAP_ANON
|
||||
sh.map_result = mmap(NULL, sh.map_size,
|
||||
PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);
|
||||
} else {
|
||||
#endif
|
||||
int fd;
|
||||
|
||||
sh.map_result = MAP_FAILED;
|
||||
if ((fd = open("/dev/zero", O_RDWR)) >= 0) {
|
||||
sh.map_result = mmap(NULL, sh.map_size,
|
||||
PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
OPENSSL_assert(sh.map_result != MAP_FAILED);
|
||||
if (sh.map_result == MAP_FAILED)
|
||||
goto err;
|
||||
|
|
Loading…
Reference in a new issue