7110157e94
getentropy is originally an OpenBSD-ism, where it was in <unistd.h> from day one: https://man.openbsd.org/OpenBSD-5.6/getentropy FreeBSD's and Linux's current man pages also document it this way: https://man7.org/linux/man-pages/man3/getentropy.3.html https://man.freebsd.org/cgi/man.cgi?query=getentropy&sektion=3&format=html The man7.org URL is even cited by bionic itself in the comments, though glibc originally put it in <sys/random.h> and added to <unistd.h> very shortly afterwards: https://sourceware.org/bugzilla/show_bug.cgi?id=17252#c9 The cited man page (maintained separately from glibc) originally documented <sys/random.h>... https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/commit/man3/getentropy.3?id=b0265728162cdcafb8e7d7f1372e8de1a4c963ed But similarly fixed it to <unistd.h> three months later: https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/commit/man3/getentropy.3?id=9cf011f94b56e8832c5a5d8cf66d4a115d34b9cc musl matches the BSDs in putting it in <unistd.h>, but not <sys/random.h>. https://git.musl-libc.org/cgit/musl/tree/include/unistd.h?id=25e6fee27f4a293728dd15b659170e7b9c7db9bc#n183 POSIX will likely place it there too: https://www.austingroupbugs.net/view.php?id=1134 macOS and Fuchsia place it in <sys/random.h> and not <unistd.h>, though given the rest of this precedent, they're clearly outliers. (Note iOS does *not* have getentropy, just macOS. The system has it, but it's not exposed as public API. See https://dev.gnupg.org/T5375 and https://github.com/openssl/openssl/pull/15924.) Use the more standard location in bionic and put getentropy in <unistd.h>. This will improve portability and avoid needing workarounds in BoringSSL. For compatibility, keep it also available in <sys/random.h> by using a <bits/getentropy.h> header. BYPASS_INCLUSIVE_LANGUAGE_REASON=Above URLs are not hosted by Android and reference the name of a command-line utility, short for 'manual', as in instruction manual Bug: 290898063 Test: treehugger Change-Id: Id2d6b6ea09d814e5ba2cb117a7af2c74861148fb
57 lines
2 KiB
C
57 lines
2 KiB
C
/*
|
|
* Copyright (C) 2017 The Android Open Source Project
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in
|
|
* the documentation and/or other materials provided with the
|
|
* distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
/**
|
|
* @file sys/random.h
|
|
* @brief The getentropy() and getrandom() functions.
|
|
*/
|
|
|
|
#include <sys/cdefs.h>
|
|
#include <sys/types.h>
|
|
|
|
#include <linux/random.h>
|
|
|
|
#include <bits/getentropy.h>
|
|
|
|
__BEGIN_DECLS
|
|
|
|
/**
|
|
* [getrandom(2)](http://man7.org/linux/man-pages/man2/getrandom.2.html) fills the given buffer
|
|
* with random bytes.
|
|
*
|
|
* Returns the number of bytes copied on success, and returns -1 and sets `errno` on failure.
|
|
*
|
|
* Available since API level 28.
|
|
*
|
|
* See also arc4random_buf() which is available in all API levels.
|
|
*/
|
|
ssize_t getrandom(void* _Nonnull __buffer, size_t __buffer_size, unsigned int __flags) __wur __INTRODUCED_IN(28);
|
|
|
|
__END_DECLS
|