Changeset View
Changeset View
Standalone View
Standalone View
lib/libc/gen/arc4random.h
Show First 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | _rs_allocate(struct _rs **rsp, struct _rsx **rsxp) | ||||
struct { | struct { | ||||
struct _rs rs; | struct _rs rs; | ||||
struct _rsx rsx; | struct _rsx rsx; | ||||
} *p; | } *p; | ||||
if ((p = mmap(NULL, sizeof(*p), PROT_READ|PROT_WRITE, | if ((p = mmap(NULL, sizeof(*p), PROT_READ|PROT_WRITE, | ||||
MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) | MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) | ||||
return (-1); | return (-1); | ||||
/* Allow bootstrapping arc4random.c on Linux/macOS */ | |||||
#ifdef INHERIT_ZERO | |||||
if (minherit(p, sizeof(*p), INHERIT_ZERO) == -1) { | if (minherit(p, sizeof(*p), INHERIT_ZERO) == -1) { | ||||
munmap(p, sizeof(*p)); | munmap(p, sizeof(*p)); | ||||
return (-1); | return (-1); | ||||
} | } | ||||
#endif | |||||
*rsp = &p->rs; | *rsp = &p->rs; | ||||
*rsxp = &p->rsx; | *rsxp = &p->rsx; | ||||
return (0); | return (0); | ||||
} | } | ||||
static inline void | static inline void | ||||
_rs_forkdetect(void) | _rs_forkdetect(void) | ||||
{ | { | ||||
} | } |