diff options
author | Elliott Hughes <enh@google.com> | 2024-04-29 23:41:39 +0000 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2024-04-29 23:41:39 +0000 |
commit | 81c54c72b36f5d92b5c5171d1a1db1835b612683 (patch) | |
tree | 6d3f5245b2330d251e626c26743c097be65213a7 | |
parent | cdbc7c75f5667c9845bfcda51c44779ab0d69670 (diff) | |
download | bionic-81c54c72b36f5d92b5c5171d1a1db1835b612683.tar.gz |
Upstream sync.
Also clean up some obsolete cruft from openbsd-compat.h...
Test: treehugger
Change-Id: I9eae0f8304e701d032045617427289002d234cd8
-rw-r--r-- | libc/upstream-openbsd/android/include/openbsd-compat.h | 17 | ||||
-rw-r--r-- | libc/upstream-openbsd/lib/libc/crypt/arc4random.c | 12 | ||||
-rw-r--r-- | libc/upstream-openbsd/lib/libc/crypt/chacha_private.h | 4 | ||||
-rw-r--r-- | libc/upstream-openbsd/lib/libc/gen/ctype_.c | 12 | ||||
-rw-r--r-- | libc/upstream-openbsd/lib/libc/net/htonl.c | 14 | ||||
-rw-r--r-- | libc/upstream-openbsd/lib/libc/net/htons.c | 14 | ||||
-rw-r--r-- | libc/upstream-openbsd/lib/libc/net/ntohl.c | 14 | ||||
-rw-r--r-- | libc/upstream-openbsd/lib/libc/net/ntohs.c | 14 | ||||
-rw-r--r-- | libc/upstream-openbsd/lib/libc/stdio/fvwrite.c | 21 |
9 files changed, 55 insertions, 67 deletions
diff --git a/libc/upstream-openbsd/android/include/openbsd-compat.h b/libc/upstream-openbsd/android/include/openbsd-compat.h index 8e6f87da8..cbc52b539 100644 --- a/libc/upstream-openbsd/android/include/openbsd-compat.h +++ b/libc/upstream-openbsd/android/include/openbsd-compat.h @@ -42,23 +42,8 @@ extern const char* __progname; #define PROTO_NORMAL(x) -/* OpenBSD's <ctype.h> uses these names, which conflicted with stlport. - * Additionally, we changed the numeric/digit type from N to D for libcxx. - */ -#define _U _CTYPE_U -#define _L _CTYPE_L -#define _N _CTYPE_D -#define _S _CTYPE_S -#define _P _CTYPE_P -#define _C _CTYPE_C -#define _X _CTYPE_X -#define _B _CTYPE_B - -/* OpenBSD has this, but we can't really implement it correctly on Linux. */ -#define issetugid() 0 - #if !defined(ANDROID_HOST_MUSL) -#define explicit_bzero(p, s) memset(p, 0, s) +#define explicit_bzero(p, s) memset_explicit(p, 0, s) #endif #if defined(ANDROID_HOST_MUSL) diff --git a/libc/upstream-openbsd/lib/libc/crypt/arc4random.c b/libc/upstream-openbsd/lib/libc/crypt/arc4random.c index 8a4ecc9e8..0737cf3fb 100644 --- a/libc/upstream-openbsd/lib/libc/crypt/arc4random.c +++ b/libc/upstream-openbsd/lib/libc/crypt/arc4random.c @@ -1,4 +1,4 @@ -/* $OpenBSD: arc4random.c,v 1.54 2015/09/13 08:31:47 guenther Exp $ */ +/* $OpenBSD: arc4random.c,v 1.58 2022/07/31 13:41:45 tb Exp $ */ /* * Copyright (c) 1996, David Mazieres <dm@uun.org> @@ -49,6 +49,8 @@ #define BLOCKSZ 64 #define RSBUFSZ (16*BLOCKSZ) +#define REKEY_BASE (1024*1024) /* NB. should be a power of 2 */ + /* Marked MAP_INHERIT_ZERO, so zero'd out in fork children. */ static struct _rs { size_t rs_have; /* valid bytes at end of rs_buf */ @@ -78,7 +80,7 @@ _rs_init(u_char *buf, size_t n) abort(); } - chacha_keysetup(&rsx->rs_chacha, buf, KEYSZ * 8, 0); + chacha_keysetup(&rsx->rs_chacha, buf, KEYSZ * 8); chacha_ivsetup(&rsx->rs_chacha, buf + KEYSZ); } @@ -86,6 +88,7 @@ static void _rs_stir(void) { u_char rnd[KEYSZ + IVSZ]; + uint32_t rekey_fuzz = 0; if (getentropy(rnd, sizeof rnd) == -1) _getentropy_fail(); @@ -100,7 +103,10 @@ _rs_stir(void) rs->rs_have = 0; memset(rsx->rs_buf, 0, sizeof(rsx->rs_buf)); - rs->rs_count = 1600000; + /* rekey interval should not be predictable */ + chacha_encrypt_bytes(&rsx->rs_chacha, (uint8_t *)&rekey_fuzz, + (uint8_t *)&rekey_fuzz, sizeof(rekey_fuzz)); + rs->rs_count = REKEY_BASE + (rekey_fuzz % REKEY_BASE); } static inline void diff --git a/libc/upstream-openbsd/lib/libc/crypt/chacha_private.h b/libc/upstream-openbsd/lib/libc/crypt/chacha_private.h index 7c3680fa6..b0427b6b3 100644 --- a/libc/upstream-openbsd/lib/libc/crypt/chacha_private.h +++ b/libc/upstream-openbsd/lib/libc/crypt/chacha_private.h @@ -4,7 +4,7 @@ D. J. Bernstein Public domain. */ -/* $OpenBSD: chacha_private.h,v 1.2 2013/10/04 07:02:27 djm Exp $ */ +/* $OpenBSD: chacha_private.h,v 1.3 2022/02/28 21:56:29 dtucker Exp $ */ typedef unsigned char u8; typedef unsigned int u32; @@ -52,7 +52,7 @@ static const char sigma[16] = "expand 32-byte k"; static const char tau[16] = "expand 16-byte k"; static void -chacha_keysetup(chacha_ctx *x,const u8 *k,u32 kbits,u32 ivbits) +chacha_keysetup(chacha_ctx *x,const u8 *k,u32 kbits) { const char *constants; diff --git a/libc/upstream-openbsd/lib/libc/gen/ctype_.c b/libc/upstream-openbsd/lib/libc/gen/ctype_.c index 897224433..9742c9f16 100644 --- a/libc/upstream-openbsd/lib/libc/gen/ctype_.c +++ b/libc/upstream-openbsd/lib/libc/gen/ctype_.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ctype_.c,v 1.12 2015/09/19 04:02:21 guenther Exp $ */ +/* $OpenBSD: ctype_.c,v 1.13 2024/02/04 13:03:18 jca Exp $ */ /* * Copyright (c) 1989 The Regents of the University of California. * All rights reserved. @@ -36,6 +36,16 @@ #include <ctype.h> #include "ctype_private.h" +/* Shorter names for the defines provided by <ctype.h> */ +#define _U _CTYPE_U +#define _L _CTYPE_L +#define _N _CTYPE_N +#define _S _CTYPE_S +#define _P _CTYPE_P +#define _C _CTYPE_C +#define _X _CTYPE_X +#define _B _CTYPE_B + const char _C_ctype_[1 + CTYPE_NUM_CHARS] = { 0, _C, _C, _C, _C, _C, _C, _C, _C, diff --git a/libc/upstream-openbsd/lib/libc/net/htonl.c b/libc/upstream-openbsd/lib/libc/net/htonl.c index 6ee6e7efb..58bfb4699 100644 --- a/libc/upstream-openbsd/lib/libc/net/htonl.c +++ b/libc/upstream-openbsd/lib/libc/net/htonl.c @@ -1,6 +1,5 @@ -/* $OpenBSD: htonl.c,v 1.7 2014/07/21 01:51:10 guenther Exp $ */ +/* $OpenBSD: htonl.c,v 1.8 2024/04/15 14:30:48 naddy Exp $ */ /* - * Written by J.T. Conklin <jtc@netbsd.org>. * Public domain. */ @@ -9,13 +8,8 @@ #undef htonl -u_int32_t -htonl(u_int32_t x) +uint32_t +htonl(uint32_t x) { -#if BYTE_ORDER == LITTLE_ENDIAN - u_char *s = (u_char *)&x; - return (u_int32_t)(s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3]); -#else - return x; -#endif + return htobe32(x); } diff --git a/libc/upstream-openbsd/lib/libc/net/htons.c b/libc/upstream-openbsd/lib/libc/net/htons.c index f48d91ee0..28b13cef9 100644 --- a/libc/upstream-openbsd/lib/libc/net/htons.c +++ b/libc/upstream-openbsd/lib/libc/net/htons.c @@ -1,6 +1,5 @@ -/* $OpenBSD: htons.c,v 1.9 2014/07/21 01:51:10 guenther Exp $ */ +/* $OpenBSD: htons.c,v 1.10 2024/04/15 14:30:48 naddy Exp $ */ /* - * Written by J.T. Conklin <jtc@netbsd.org>. * Public domain. */ @@ -9,13 +8,8 @@ #undef htons -u_int16_t -htons(u_int16_t x) +uint16_t +htons(uint16_t x) { -#if BYTE_ORDER == LITTLE_ENDIAN - u_char *s = (u_char *) &x; - return (u_int16_t)(s[0] << 8 | s[1]); -#else - return x; -#endif + return htobe16(x); } diff --git a/libc/upstream-openbsd/lib/libc/net/ntohl.c b/libc/upstream-openbsd/lib/libc/net/ntohl.c index 0d05bac78..7592398e8 100644 --- a/libc/upstream-openbsd/lib/libc/net/ntohl.c +++ b/libc/upstream-openbsd/lib/libc/net/ntohl.c @@ -1,6 +1,5 @@ -/* $OpenBSD: ntohl.c,v 1.7 2014/07/21 01:51:10 guenther Exp $ */ +/* $OpenBSD: ntohl.c,v 1.8 2024/04/15 14:30:48 naddy Exp $ */ /* - * Written by J.T. Conklin <jtc@netbsd.org>. * Public domain. */ @@ -9,13 +8,8 @@ #undef ntohl -u_int32_t -ntohl(u_int32_t x) +uint32_t +ntohl(uint32_t x) { -#if BYTE_ORDER == LITTLE_ENDIAN - u_char *s = (u_char *)&x; - return (u_int32_t)(s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3]); -#else - return x; -#endif + return be32toh(x); } diff --git a/libc/upstream-openbsd/lib/libc/net/ntohs.c b/libc/upstream-openbsd/lib/libc/net/ntohs.c index b5ea361f8..ef22ea306 100644 --- a/libc/upstream-openbsd/lib/libc/net/ntohs.c +++ b/libc/upstream-openbsd/lib/libc/net/ntohs.c @@ -1,6 +1,5 @@ -/* $OpenBSD: ntohs.c,v 1.9 2014/07/21 01:51:10 guenther Exp $ */ +/* $OpenBSD: ntohs.c,v 1.10 2024/04/15 14:30:48 naddy Exp $ */ /* - * Written by J.T. Conklin <jtc@netbsd.org>. * Public domain. */ @@ -9,13 +8,8 @@ #undef ntohs -u_int16_t -ntohs(u_int16_t x) +uint16_t +ntohs(uint16_t x) { -#if BYTE_ORDER == LITTLE_ENDIAN - u_char *s = (u_char *) &x; - return (u_int16_t)(s[0] << 8 | s[1]); -#else - return x; -#endif + return be16toh(x); } diff --git a/libc/upstream-openbsd/lib/libc/stdio/fvwrite.c b/libc/upstream-openbsd/lib/libc/stdio/fvwrite.c index d83de8845..d615245ab 100644 --- a/libc/upstream-openbsd/lib/libc/stdio/fvwrite.c +++ b/libc/upstream-openbsd/lib/libc/stdio/fvwrite.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fvwrite.c,v 1.21 2023/10/06 16:41:02 millert Exp $ */ +/* $OpenBSD: fvwrite.c,v 1.22 2024/04/28 14:28:02 millert Exp $ */ /*- * Copyright (c) 1990, 1993 * The Regents of the University of California. All rights reserved. @@ -31,6 +31,7 @@ * SUCH DAMAGE. */ +#include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -76,11 +77,12 @@ __sfvwrite(FILE *fp, struct __suio *uio) } if (fp->_flags & __SNBF) { /* - * Unbuffered: write up to BUFSIZ bytes at a time. + * Unbuffered: write up to INT_MAX bytes at a time, to not + * truncate the value of len if it is greater than 2^31 bytes. */ do { GETIOV(;); - w = (*fp->_write)(fp->_cookie, p, MIN(len, BUFSIZ)); + w = (*fp->_write)(fp->_cookie, p, MIN(len, INT_MAX)); if (w <= 0) goto err; p += w; @@ -90,7 +92,8 @@ __sfvwrite(FILE *fp, struct __suio *uio) /* * Fully buffered: fill partially full buffer, if any, * and then flush. If there is no partial buffer, write - * one _bf._size byte chunk directly (without copying). + * entire payload directly (without copying) up to a + * multiple of the buffer size. * * String output is a special case: write as many bytes * as fit, but pretend we wrote everything. This makes @@ -134,7 +137,15 @@ __sfvwrite(FILE *fp, struct __suio *uio) if (__sflush(fp)) goto err; } else if (len >= (w = fp->_bf._size)) { - /* write directly */ + /* + * Write directly up to INT_MAX or greatest + * multiple of buffer size (whichever is + * smaller), keeping in the memory buffer the + * remaining part of payload that is smaller + * than buffer size. + */ + if (w != 0) + w = MIN(w * (len / w), INT_MAX); w = (*fp->_write)(fp->_cookie, p, w); if (w <= 0) goto err; |