1*08735ac4Sderaadt /* $OpenBSD: arc4random.h,v 1.4 2015/01/15 06:57:18 deraadt Exp $ */
22ef411b6Sderaadt
32ef411b6Sderaadt /*
42ef411b6Sderaadt * Copyright (c) 1996, David Mazieres <dm@uun.org>
52ef411b6Sderaadt * Copyright (c) 2008, Damien Miller <djm@openbsd.org>
62ef411b6Sderaadt * Copyright (c) 2013, Markus Friedl <markus@openbsd.org>
7*08735ac4Sderaadt * Copyright (c) 2014, Theo de Raadt <deraadt@openbsd.org>
82ef411b6Sderaadt *
92ef411b6Sderaadt * Permission to use, copy, modify, and distribute this software for any
102ef411b6Sderaadt * purpose with or without fee is hereby granted, provided that the above
112ef411b6Sderaadt * copyright notice and this permission notice appear in all copies.
122ef411b6Sderaadt *
132ef411b6Sderaadt * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
142ef411b6Sderaadt * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
152ef411b6Sderaadt * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
162ef411b6Sderaadt * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
172ef411b6Sderaadt * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
182ef411b6Sderaadt * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
192ef411b6Sderaadt * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
202ef411b6Sderaadt */
212ef411b6Sderaadt
222ef411b6Sderaadt /*
232ef411b6Sderaadt * Stub functions for portability.
242ef411b6Sderaadt */
25d976644eSbcook #include <sys/mman.h>
26d976644eSbcook
27d976644eSbcook #include <signal.h>
28d976644eSbcook
29d976644eSbcook #include "thread_private.h"
30d976644eSbcook
31d976644eSbcook static inline void
_getentropy_fail(void)32d976644eSbcook _getentropy_fail(void)
33d976644eSbcook {
34d976644eSbcook raise(SIGKILL);
35d976644eSbcook }
362ef411b6Sderaadt
3740e6dbbdSderaadt static inline int
_rs_allocate(struct _rs ** rsp,struct _rsx ** rsxp)3840e6dbbdSderaadt _rs_allocate(struct _rs **rsp, struct _rsx **rsxp)
392ef411b6Sderaadt {
4040e6dbbdSderaadt struct {
4140e6dbbdSderaadt struct _rs rs;
4240e6dbbdSderaadt struct _rsx rsx;
4340e6dbbdSderaadt } *p;
442ef411b6Sderaadt
4540e6dbbdSderaadt if ((p = mmap(NULL, sizeof(*p), PROT_READ|PROT_WRITE,
462ef411b6Sderaadt MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED)
4740e6dbbdSderaadt return (-1);
4840e6dbbdSderaadt if (minherit(p, sizeof(*p), MAP_INHERIT_ZERO) == -1) {
4940e6dbbdSderaadt munmap(p, sizeof(*p));
5040e6dbbdSderaadt return (-1);
5140e6dbbdSderaadt }
5240e6dbbdSderaadt
5340e6dbbdSderaadt *rsp = &p->rs;
5440e6dbbdSderaadt *rsxp = &p->rsx;
5540e6dbbdSderaadt return (0);
562ef411b6Sderaadt }
572ef411b6Sderaadt
582ef411b6Sderaadt static inline void
_rs_forkdetect(void)592ef411b6Sderaadt _rs_forkdetect(void)
602ef411b6Sderaadt {
612ef411b6Sderaadt }
62