xref: /titanic_41/usr/src/lib/libc/port/gen/getentropy.c (revision 28f17cb2cce2c4ba0dcda9d9f52a8935aa02e489)
1*28f17cb2SRobert Mustacchi /*
2*28f17cb2SRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*28f17cb2SRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*28f17cb2SRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*28f17cb2SRobert Mustacchi  * 1.0 of the CDDL.
6*28f17cb2SRobert Mustacchi  *
7*28f17cb2SRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*28f17cb2SRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*28f17cb2SRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*28f17cb2SRobert Mustacchi  */
11*28f17cb2SRobert Mustacchi 
12*28f17cb2SRobert Mustacchi /*
13*28f17cb2SRobert Mustacchi  * Copyright (c) 2015, Joyent, Inc.
14*28f17cb2SRobert Mustacchi  */
15*28f17cb2SRobert Mustacchi 
16*28f17cb2SRobert Mustacchi /*
17*28f17cb2SRobert Mustacchi  * getentropy(3C) is an OpenBSD compatible wrapper around getrandom(2).
18*28f17cb2SRobert Mustacchi  */
19*28f17cb2SRobert Mustacchi 
20*28f17cb2SRobert Mustacchi #include <errno.h>
21*28f17cb2SRobert Mustacchi #include <sys/random.h>
22*28f17cb2SRobert Mustacchi 
23*28f17cb2SRobert Mustacchi int
getentropy(void * buf,size_t buflen)24*28f17cb2SRobert Mustacchi getentropy(void *buf, size_t buflen)
25*28f17cb2SRobert Mustacchi {
26*28f17cb2SRobert Mustacchi 	int ret;
27*28f17cb2SRobert Mustacchi 
28*28f17cb2SRobert Mustacchi 	if (buflen > 256) {
29*28f17cb2SRobert Mustacchi 		errno = EIO;
30*28f17cb2SRobert Mustacchi 		return (-1);
31*28f17cb2SRobert Mustacchi 	}
32*28f17cb2SRobert Mustacchi 
33*28f17cb2SRobert Mustacchi 	ret = getrandom(buf, buflen, 0);
34*28f17cb2SRobert Mustacchi 	if (ret == -1 || ret != buflen) {
35*28f17cb2SRobert Mustacchi 		if (errno != EFAULT)
36*28f17cb2SRobert Mustacchi 			errno = EIO;
37*28f17cb2SRobert Mustacchi 		return (-1);
38*28f17cb2SRobert Mustacchi 	}
39*28f17cb2SRobert Mustacchi 
40*28f17cb2SRobert Mustacchi 	return (0);
41*28f17cb2SRobert Mustacchi }
42