xref: /illumos-gate/usr/src/lib/libc/port/gen/getentropy.c (revision de6af22ae73ba8d72672288621ff50b88f2cf5fd)
19d12795fSRobert Mustacchi /*
29d12795fSRobert Mustacchi  * This file and its contents are supplied under the terms of the
39d12795fSRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
49d12795fSRobert Mustacchi  * You may only use this file in accordance with the terms of version
59d12795fSRobert Mustacchi  * 1.0 of the CDDL.
69d12795fSRobert Mustacchi  *
79d12795fSRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
89d12795fSRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
99d12795fSRobert Mustacchi  * http://www.illumos.org/license/CDDL.
109d12795fSRobert Mustacchi  */
119d12795fSRobert Mustacchi 
129d12795fSRobert Mustacchi /*
13*de6af22aSJason King  * Copyright (c) 2018, Joyent, Inc.
149d12795fSRobert Mustacchi  */
159d12795fSRobert Mustacchi 
169d12795fSRobert Mustacchi /*
179d12795fSRobert Mustacchi  * getentropy(3C) is an OpenBSD compatible wrapper around getrandom(2).
189d12795fSRobert Mustacchi  */
199d12795fSRobert Mustacchi 
209d12795fSRobert Mustacchi #include <errno.h>
219d12795fSRobert Mustacchi #include <sys/random.h>
229d12795fSRobert Mustacchi 
239d12795fSRobert Mustacchi int
getentropy(void * buf,size_t buflen)249d12795fSRobert Mustacchi getentropy(void *buf, size_t buflen)
259d12795fSRobert Mustacchi {
26*de6af22aSJason King 	ssize_t ret;
279d12795fSRobert Mustacchi 
289d12795fSRobert Mustacchi 	if (buflen > 256) {
299d12795fSRobert Mustacchi 		errno = EIO;
309d12795fSRobert Mustacchi 		return (-1);
319d12795fSRobert Mustacchi 	}
329d12795fSRobert Mustacchi 
339d12795fSRobert Mustacchi 	ret = getrandom(buf, buflen, 0);
349d12795fSRobert Mustacchi 	if (ret == -1 || ret != buflen) {
359d12795fSRobert Mustacchi 		if (errno != EFAULT)
369d12795fSRobert Mustacchi 			errno = EIO;
379d12795fSRobert Mustacchi 		return (-1);
389d12795fSRobert Mustacchi 	}
399d12795fSRobert Mustacchi 
409d12795fSRobert Mustacchi 	return (0);
419d12795fSRobert Mustacchi }
42