summaryrefslogtreecommitdiff
path: root/openbsd-compat
diff options
context:
space:
mode:
authorDarren Tucker <dtucker@dtucker.net>2022-11-23 13:18:54 +1100
committerDarren Tucker <dtucker@dtucker.net>2022-11-23 13:24:53 +1100
commit15a01cf15f396f87c6d221c5a6af98331c818962 (patch)
treec84aff014fa6bd2cf2319547faff71c01f4bfb4a /openbsd-compat
parent6b9bbbfe8b26db6e9a30a7e08c223e85421aed98 (diff)
downloadopenssh-git-15a01cf15f396f87c6d221c5a6af98331c818962.tar.gz
Add fallback for old platforms w/out MAP_ANON.
Diffstat (limited to 'openbsd-compat')
-rw-r--r--openbsd-compat/arc4random.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/openbsd-compat/arc4random.h b/openbsd-compat/arc4random.h
index 2b57611f..01629752 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);