提交 27186da7 编写于 作者: A Andy Polyakov

crypto/sec_mem.c: fix anonymous mmap on legacy systems.

Reviewed-by: NKurt Roeckx <kurt@openssl.org>
上级 9d0e4dc6
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册