Make getentropy available from <unistd.h>
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
This commit is contained in:
parent
143f3cea32
commit
7110157e94
3 changed files with 56 additions and 12 deletions
53
libc/include/bits/getentropy.h
Normal file
53
libc/include/bits/getentropy.h
Normal file
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Copyright (C) 2023 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 bits/getentropy.h
|
||||
* @brief The getentropy() function.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/**
|
||||
* [getentropy(3)](http://man7.org/linux/man-pages/man3/getentropy.3.html) fills the given buffer
|
||||
* with random bytes.
|
||||
*
|
||||
* Returns 0 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.
|
||||
*/
|
||||
int getentropy(void* _Nonnull __buffer, size_t __buffer_size) __wur __INTRODUCED_IN(28);
|
||||
|
||||
__END_DECLS
|
|
@ -38,19 +38,9 @@
|
|||
|
||||
#include <linux/random.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
#include <bits/getentropy.h>
|
||||
|
||||
/**
|
||||
* [getentropy(3)](http://man7.org/linux/man-pages/man3/getentropy.3.html) fills the given buffer
|
||||
* with random bytes.
|
||||
*
|
||||
* Returns 0 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.
|
||||
*/
|
||||
int getentropy(void* _Nonnull __buffer, size_t __buffer_size) __wur __INTRODUCED_IN(28);
|
||||
__BEGIN_DECLS
|
||||
|
||||
/**
|
||||
* [getrandom(2)](http://man7.org/linux/man-pages/man2/getrandom.2.html) fills the given buffer
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include <sys/select.h>
|
||||
|
||||
#include <bits/fcntl.h>
|
||||
#include <bits/getentropy.h>
|
||||
#include <bits/getopt.h>
|
||||
#include <bits/ioctl.h>
|
||||
#include <bits/lockf.h>
|
||||
|
|
Loading…
Reference in a new issue