diff options
author | Darren Tucker <dtucker@dtucker.net> | 2022-11-23 03:18:54 +0100 |
---|---|---|
committer | Darren Tucker <dtucker@dtucker.net> | 2022-11-23 03:24:53 +0100 |
commit | 15a01cf15f396f87c6d221c5a6af98331c818962 (patch) | |
tree | c84aff014fa6bd2cf2319547faff71c01f4bfb4a | |
parent | If we haven't found it yet, recheck for sys/stat.h. (diff) | |
download | openssh-15a01cf15f396f87c6d221c5a6af98331c818962.tar.xz openssh-15a01cf15f396f87c6d221c5a6af98331c818962.zip |
Add fallback for old platforms w/out MAP_ANON.
-rw-r--r-- | openbsd-compat/arc4random.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/openbsd-compat/arc4random.h b/openbsd-compat/arc4random.h index 2b57611f0..01629752d 100644 --- a/openbsd-compat/arc4random.h +++ b/openbsd-compat/arc4random.h @@ -63,6 +63,7 @@ _rs_forkdetect(void) static inline int _rs_allocate(struct _rs **rsp, struct _rsx **rsxp) { +#if defined(MAP_ANON) && defined(MAP_PRIVATE) if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) return (-1); @@ -73,6 +74,15 @@ _rs_allocate(struct _rs **rsp, struct _rsx **rsxp) *rsp = NULL; return (-1); } +#else + if ((*rsp = malloc(sizeof(**rsp))) == NULL) + return (-1); + if ((*rsxp = malloc(sizeof(**rsxp))) == NULL) { + free(*rsp); + *rsp = NULL; + return (-1); + } +#endif _ARC4_ATFORK(_rs_forkhandler); return (0); |