From f41d8bece2af731a34407fe7d742f1075ca9d986 Mon Sep 17 00:00:00 2001 From: purplerain Date: Fri, 26 Apr 2024 00:31:56 +0000 Subject: [PATCH] sync with OpenBSD -current --- distrib/sets/lists/comp/mi | 1 - lib/libcrypto/Makefile | 3 +- lib/libcrypto/pem/pem2.h | 71 -------------- regress/lib/libcrypto/Makefile | 3 +- regress/lib/libcrypto/crypto/Makefile | 12 +++ regress/lib/libcrypto/crypto/crypto_test.c | 97 ++++++++++++++++++++ sbin/iked/parse.y | 4 +- share/man/man4/softraid.4 | 7 +- sys/arch/amd64/stand/boot/boot.8 | 18 +++- sys/arch/amd64/stand/efiboot/Makefile.common | 3 +- sys/arch/amd64/stand/efiboot/cmd_i386.c | 5 +- sys/arch/amd64/stand/efiboot/conf.c | 4 +- sys/arch/amd64/stand/efiboot/efiboot.c | 74 ++++++++++++++- sys/arch/amd64/stand/efiboot/efiboot.h | 5 +- sys/dev/ic/dwqe.c | 4 +- sys/dev/ic/dwqereg.h | 44 +++++++-- sys/kern/uipc_socket2.c | 4 +- sys/kern/uipc_syscalls.c | 8 +- sys/lib/libsa/softraid.c | 6 +- usr.bin/awk/FIXES | 53 +++++++---- usr.bin/awk/README.md | 5 +- usr.bin/awk/b.c | 42 +++++---- usr.bin/awk/main.c | 4 +- usr.bin/awk/run.c | 6 +- usr.bin/vi/docs/USD.doc/vi.ref/set.opt.roff | 4 +- usr.bin/vi/vi/vs_refresh.c | 6 +- 26 files changed, 342 insertions(+), 151 deletions(-) delete mode 100644 lib/libcrypto/pem/pem2.h create mode 100644 regress/lib/libcrypto/crypto/Makefile create mode 100644 regress/lib/libcrypto/crypto/crypto_test.c diff --git a/distrib/sets/lists/comp/mi b/distrib/sets/lists/comp/mi index c965d9795..c63a18828 100644 --- a/distrib/sets/lists/comp/mi +++ b/distrib/sets/lists/comp/mi @@ -1147,7 +1147,6 @@ ./usr/include/openssl/opensslv.h ./usr/include/openssl/ossl_typ.h ./usr/include/openssl/pem.h -./usr/include/openssl/pem2.h ./usr/include/openssl/pkcs12.h ./usr/include/openssl/pkcs7.h ./usr/include/openssl/poly1305.h diff --git a/lib/libcrypto/Makefile b/lib/libcrypto/Makefile index 1e295d17e..39997b088 100644 --- a/lib/libcrypto/Makefile +++ b/lib/libcrypto/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.193 2024/04/15 15:55:01 tb Exp $ +# $OpenBSD: Makefile,v 1.194 2024/04/25 16:14:00 tb Exp $ LIB= crypto LIBREBUILD=y @@ -707,7 +707,6 @@ HDRS=\ ${LCRYPTO_SRC}/opensslv.h \ ${LCRYPTO_SRC}/ossl_typ.h \ ${LCRYPTO_SRC}/pem/pem.h \ - ${LCRYPTO_SRC}/pem/pem2.h \ ${LCRYPTO_SRC}/pkcs12/pkcs12.h \ ${LCRYPTO_SRC}/pkcs7/pkcs7.h \ ${LCRYPTO_SRC}/poly1305/poly1305.h \ diff --git a/lib/libcrypto/pem/pem2.h b/lib/libcrypto/pem/pem2.h deleted file mode 100644 index 19525b4a4..000000000 --- a/lib/libcrypto/pem/pem2.h +++ /dev/null @@ -1,71 +0,0 @@ -/* $OpenBSD: pem2.h,v 1.5 2014/06/12 15:49:30 deraadt Exp $ */ -/* ==================================================================== - * Copyright (c) 1999 The OpenSSL 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: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * licensing@OpenSSL.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED 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 OpenSSL PROJECT OR - * ITS 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. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - -/* - * This header only exists to break a circular dependency between pem and err - * Ben 30 Jan 1999. - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef HEADER_PEM_H -void ERR_load_PEM_strings(void); -#endif - -#ifdef __cplusplus -} -#endif diff --git a/regress/lib/libcrypto/Makefile b/regress/lib/libcrypto/Makefile index 871ae2093..ffe08d04b 100644 --- a/regress/lib/libcrypto/Makefile +++ b/regress/lib/libcrypto/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.56 2024/03/29 07:13:38 joshua Exp $ +# $OpenBSD: Makefile,v 1.57 2024/04/25 14:27:29 jsing Exp $ SUBDIR += aead SUBDIR += aes @@ -14,6 +14,7 @@ SUBDIR += cast SUBDIR += certs SUBDIR += chacha SUBDIR += cms +SUBDIR += crypto SUBDIR += ct SUBDIR += curve25519 SUBDIR += des diff --git a/regress/lib/libcrypto/crypto/Makefile b/regress/lib/libcrypto/crypto/Makefile new file mode 100644 index 000000000..34a4e7050 --- /dev/null +++ b/regress/lib/libcrypto/crypto/Makefile @@ -0,0 +1,12 @@ +# $OpenBSD: Makefile,v 1.1 2024/04/25 14:27:29 jsing Exp $ + +PROG = crypto_test + +DPADD+= ${LIBCRYPTO} +WARNINGS= Yes +LDFLAGS+= -lcrypto +CFLAGS+= -DLIBRESSL_INTERNAL +CFLAGS+= -Wall -Wundef -Werror +CFLAGS+= -I${.CURDIR}/../../../../lib/libcrypto + +.include diff --git a/regress/lib/libcrypto/crypto/crypto_test.c b/regress/lib/libcrypto/crypto/crypto_test.c new file mode 100644 index 000000000..38ee2d57d --- /dev/null +++ b/regress/lib/libcrypto/crypto/crypto_test.c @@ -0,0 +1,97 @@ +/* $OpenBSD: crypto_test.c,v 1.1 2024/04/25 14:27:29 jsing Exp $ */ +/* + * Copyright (c) 2024 Joel Sing + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include +#include + +#include "crypto_internal.h" + +static int +test_ct_u8(void) +{ + uint8_t i, j, mask; + int failed = 1; + + i = 0; + + do { + if ((i != 0) != crypto_ct_ne_zero_u8(i)) { + fprintf(stderr, "FAIL: crypto_ct_ne_zero_u8(%d) = %d, " + "want %d\n", i, crypto_ct_ne_zero_u8(i), i != 0); + goto failure; + } + mask = (i != 0) ? 0xff : 0x00; + if (mask != crypto_ct_ne_zero_mask_u8(i)) { + fprintf(stderr, "FAIL: crypto_ct_ne_zero_mask_u8(%d) = %x, " + "want %x\n", i, crypto_ct_ne_zero_mask_u8(i), mask); + goto failure; + } + if ((i == 0) != crypto_ct_eq_zero_u8(i)) { + fprintf(stderr, "FAIL: crypto_ct_eq_zero_u8(%d) = %d, " + "want %d\n", i, crypto_ct_ne_zero_u8(i), i != 0); + goto failure; + } + mask = (i == 0) ? 0xff : 0x00; + if (mask != crypto_ct_eq_zero_mask_u8(i)) { + fprintf(stderr, "FAIL: crypto_ct_eq_zero_mask_u8(%d) = %x, " + "want %x\n", i, crypto_ct_ne_zero_mask_u8(i), mask); + goto failure; + } + + j = 0; + + do { + if ((i != j) != crypto_ct_ne_u8(i, j)) { + fprintf(stderr, "FAIL: crypto_ct_ne_u8(%d, %d) = %d, " + "want %d\n", i, j, crypto_ct_ne_u8(i, j), i != j); + goto failure; + } + mask = (i != j) ? 0xff : 0x00; + if (mask != crypto_ct_ne_mask_u8(i, j)) { + fprintf(stderr, "FAIL: crypto_ct_ne_mask_u8(%d, %d) = %x, " + "want %x\n", i, j, crypto_ct_ne_mask_u8(i, j), mask); + goto failure; + } + if ((i == j) != crypto_ct_eq_u8(i, j)) { + fprintf(stderr, "FAIL: crypto_ct_eq_u8(%d, %d) = %d, " + "want %d\n", i, j, crypto_ct_eq_u8(i, j), i != j); + goto failure; + } + mask = (i == j) ? 0xff : 0x00; + if (mask != crypto_ct_eq_mask_u8(i, j)) { + fprintf(stderr, "FAIL: crypto_ct_eq_mask_u8(%d, %d) = %x, " + "want %x\n", i, j, crypto_ct_eq_mask_u8(i, j), mask); + goto failure; + } + } while (++j != 0); + } while (++i != 0); + + failed = 0; + + failure: + return failed; +} + +int +main(int argc, char **argv) +{ + int failed = 0; + + failed |= test_ct_u8(); + + return failed; +} diff --git a/sbin/iked/parse.y b/sbin/iked/parse.y index b9e6f4d6c..613eb8fb4 100644 --- a/sbin/iked/parse.y +++ b/sbin/iked/parse.y @@ -1,4 +1,4 @@ -/* $OpenBSD: parse.y,v 1.145 2024/04/13 15:58:10 jrick Exp $ */ +/* $OpenBSD: parse.y,v 1.146 2024/04/25 14:24:54 jsg Exp $ */ /* * Copyright (c) 2019 Tobias Heider @@ -1952,6 +1952,8 @@ parsekeyfile(char *filename, struct iked_auth *auth) err(1, "open %s", filename); if (check_file_secrecy(fd, filename) == -1) exit(1); + if (fstat(fd, &sb) == -1) + err(1, "parsekeyfile: stat %s", filename); if ((sb.st_size > KEYSIZE_LIMIT) || (sb.st_size == 0)) errx(1, "%s: key too %s", filename, sb.st_size ? "large" : "small"); diff --git a/share/man/man4/softraid.4 b/share/man/man4/softraid.4 index b52bf2d0e..b10add4a6 100644 --- a/share/man/man4/softraid.4 +++ b/share/man/man4/softraid.4 @@ -1,4 +1,4 @@ -.\" $OpenBSD: softraid.4,v 1.54 2023/04/13 10:23:21 kn Exp $ +.\" $OpenBSD: softraid.4,v 1.55 2024/04/25 07:21:43 stsp Exp $ .\" .\" Copyright (c) 2007 Todd T. Fries .\" Copyright (c) 2007 Marco Peereboom @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: April 13 2023 $ +.Dd $Mdocdate: April 25 2024 $ .Dt SOFTRAID 4 .Os .Sh NAME @@ -118,6 +118,7 @@ may be used to install in the boot storage area of the .Nm volume. +All chunks in the volume will then be bootable. Boot support is currently limited to the CRYPTO, RAID 1 disciplines on the amd64, arm64, i386, riscv64 and sparc64 platforms. amd64, arm64, riscv64 and sparc64 also have boot support for the RAID 1C discipline. @@ -221,7 +222,7 @@ for more information on configuration of RAID sets. .Pp Install .Xr boot 8 -on the RAID volume: +on the RAID volume, writing boot loaders to all 3 chunks: .Bd -literal -offset indent # installboot sd0 .Ed diff --git a/sys/arch/amd64/stand/boot/boot.8 b/sys/arch/amd64/stand/boot/boot.8 index 6b3eee8ff..cdeb55a3c 100644 --- a/sys/arch/amd64/stand/boot/boot.8 +++ b/sys/arch/amd64/stand/boot/boot.8 @@ -1,4 +1,4 @@ -.\" $OpenBSD: boot.8,v 1.34 2023/02/23 19:48:21 miod Exp $ +.\" $OpenBSD: boot.8,v 1.35 2024/04/25 18:31:49 kn Exp $ .\" .\" Copyright (c) 1997-2001 Michael Shalayeff .\" All rights reserved. @@ -25,7 +25,7 @@ .\" THE POSSIBILITY OF SUCH DAMAGE. .\" .\" -.Dd $Mdocdate: February 23 2023 $ +.Dd $Mdocdate: April 25 2024 $ .Dt BOOT 8 amd64 .Os .Sh NAME @@ -245,6 +245,19 @@ If .Ar mode is not given, a list of available modes is shown. +.It Ic idle Op Ar secs +On +.Xr efi 4 +systems, +sets the timeout in seconds to power down the machine, +if no input has been given at the +.Xr softraid 4 +passphrase prompt. +A value of 0 unsets the timeout. +If +.Ar secs +is not given, +the current timeout is shown. .It Ic memory If used without any arguments, this command will print out the memory configuration as determined through BIOS routines. @@ -426,6 +439,7 @@ option. .Xr gzip 1 , .Xr autoconf 4 , .Xr ddb 4 , +.Xr efi 4 , .Xr softraid 4 , .Xr biosboot 8 , .Xr boot_amd64 8 , diff --git a/sys/arch/amd64/stand/efiboot/Makefile.common b/sys/arch/amd64/stand/efiboot/Makefile.common index 80b36b71a..8421a2b43 100644 --- a/sys/arch/amd64/stand/efiboot/Makefile.common +++ b/sys/arch/amd64/stand/efiboot/Makefile.common @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.common,v 1.22 2021/11/14 21:51:48 guenther Exp $ +# $OpenBSD: Makefile.common,v 1.23 2024/04/25 18:31:49 kn Exp $ S= ${.CURDIR}/../../../../.. SADIR= ${.CURDIR}/../.. @@ -18,6 +18,7 @@ COPTS+= -ffreestanding -std=gnu99 COPTS+= -fshort-wchar -fPIC -mno-red-zone .if ${SOFTRAID:L} == "yes" COPTS+= -DSOFTRAID +COPTS+= -DIDLE_POWEROFF .endif COPTS+= -D_STANDALONE -nostdinc -fno-builtin diff --git a/sys/arch/amd64/stand/efiboot/cmd_i386.c b/sys/arch/amd64/stand/efiboot/cmd_i386.c index f79e2b1e0..8f6cd67f0 100644 --- a/sys/arch/amd64/stand/efiboot/cmd_i386.c +++ b/sys/arch/amd64/stand/efiboot/cmd_i386.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd_i386.c,v 1.1 2019/05/10 21:20:42 mlarkin Exp $ */ +/* $OpenBSD: cmd_i386.c,v 1.2 2024/04/25 18:31:49 kn Exp $ */ /* * Copyright (c) 1997-1999 Michael Shalayeff @@ -61,6 +61,9 @@ const struct cmd_table cmd_machine[] = { { "poweroff", CMDT_CMD, Xpoweroff_efi }, #ifdef DEBUG { "regs", CMDT_CMD, Xregs }, +#endif +#ifdef IDLE_POWEROFF + { "idle", CMDT_CMD, Xidle_efi }, #endif { NULL, 0 } }; diff --git a/sys/arch/amd64/stand/efiboot/conf.c b/sys/arch/amd64/stand/efiboot/conf.c index a7d10203b..1204987c8 100644 --- a/sys/arch/amd64/stand/efiboot/conf.c +++ b/sys/arch/amd64/stand/efiboot/conf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: conf.c,v 1.42 2023/07/22 10:11:19 jsg Exp $ */ +/* $OpenBSD: conf.c,v 1.43 2024/04/25 18:31:49 kn Exp $ */ /* * Copyright (c) 1996 Michael Shalayeff @@ -40,7 +40,7 @@ #include "efidev.h" #include "efipxe.h" -const char version[] = "3.65"; +const char version[] = "3.66"; #ifdef EFI_DEBUG int debug = 0; diff --git a/sys/arch/amd64/stand/efiboot/efiboot.c b/sys/arch/amd64/stand/efiboot/efiboot.c index 95cf92d29..b4ff85762 100644 --- a/sys/arch/amd64/stand/efiboot/efiboot.c +++ b/sys/arch/amd64/stand/efiboot/efiboot.c @@ -1,4 +1,4 @@ -/* $OpenBSD: efiboot.c,v 1.41 2023/01/02 22:41:17 kettenis Exp $ */ +/* $OpenBSD: efiboot.c,v 1.42 2024/04/25 18:31:49 kn Exp $ */ /* * Copyright (c) 2015 YASUOKA Masahiko @@ -1078,17 +1078,69 @@ u_int sleep(u_int i) { time_t t; + u_int intr = 0; /* * Loop for the requested number of seconds, polling, * so that it may handle interrupts. */ - for (t = getsecs() + i; getsecs() < t; cnischar()) + for (t = getsecs() + i; intr == 0 && getsecs() < t; intr = cnischar()) ; + return intr; +} + +#ifdef IDLE_POWEROFF +CHAR16 *idle_name = L"IdlePoweroff"; +EFI_STATUS idle_status; +/* randomly generated f948e8a9-0570-4338-ad10-29f4cf12849d */ +EFI_GUID openbsd_guid = { 0xf948e8a9, 0x0570, 0x4338, + { 0xad, 0x10, 0x29, 0xf4, 0xcf, 0x12, 0x84, 0x9d } }; +/* Non-Volatile, Boot Service Access, Runtime Service Access */ +UINT32 idle_attrs = 0x1 | 0x2 | 0x4; +UINT16 idle_secs; +UINTN idle_sz = sizeof(idle_secs); + +int +get_idle_timeout(void) +{ + idle_status = RS->GetVariable(idle_name, &openbsd_guid, NULL, + &idle_sz, &idle_secs); + if (idle_status != EFI_SUCCESS) { + if (idle_status != EFI_NOT_FOUND) { + printf("%s: %d\n", __func__, idle_status); + return 1; + } + return -1; + } return 0; } +int +set_idle_timeout(int secs) +{ + idle_secs = secs; + idle_sz = idle_secs > 0 ? sizeof(idle_secs) : 0; + idle_status = RS->SetVariable(idle_name, &openbsd_guid, idle_attrs, + idle_sz, &idle_secs); + if (idle_status != EFI_SUCCESS) { + printf("%s: %d\n", __func__, idle_status); + return -1; + } + return 0; +} + +/* see lib/libsa/softraid.c sr_crypto_passphrase_decrypt() */ +void +idle_poweroff(void) +{ + if (get_idle_timeout() == 0 && sleep(idle_secs) == 0) { + printf("\nno input after %us, powering off...\n", idle_secs); + Xpoweroff_efi(); + } +} +#endif /* IDLE_POWEROFF */ + /*********************************************************************** * Commands ***********************************************************************/ @@ -1173,3 +1225,21 @@ Xgop_efi(void) return (0); } + +#ifdef IDLE_POWEROFF +int +Xidle_efi(void) +{ + if (cmd.argc >= 2) { + int secs; + + secs = strtol(cmd.argv[1], NULL, 10); + if (0 <= secs && secs < UINT16_MAX) + set_idle_timeout(secs); + } else { + if (get_idle_timeout() == 0) + printf("Timeout = %us\n", idle_secs); + } + return 0; +} +#endif /* IDLE_POWEROFF */ diff --git a/sys/arch/amd64/stand/efiboot/efiboot.h b/sys/arch/amd64/stand/efiboot/efiboot.h index 725aebccc..8fdc5beb0 100644 --- a/sys/arch/amd64/stand/efiboot/efiboot.h +++ b/sys/arch/amd64/stand/efiboot/efiboot.h @@ -1,4 +1,4 @@ -/* $OpenBSD: efiboot.h,v 1.5 2022/07/11 19:45:02 kettenis Exp $ */ +/* $OpenBSD: efiboot.h,v 1.6 2024/04/25 18:31:49 kn Exp $ */ /* * Copyright (c) 2015 YASUOKA Masahiko @@ -37,6 +37,9 @@ void efi_makebootargs(void); void efi_setconsdev(void); int Xpoweroff_efi(void); +#ifdef IDLE_POWEROFF +int Xidle_efi(void); +#endif extern void (*run_i386)(u_long, u_long, int, int, int, int, int, int, int, int) __attribute__ ((noreturn)); diff --git a/sys/dev/ic/dwqe.c b/sys/dev/ic/dwqe.c index 4d59f1341..24987008d 100644 --- a/sys/dev/ic/dwqe.c +++ b/sys/dev/ic/dwqe.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dwqe.c,v 1.18 2024/03/29 08:19:40 stsp Exp $ */ +/* $OpenBSD: dwqe.c,v 1.19 2024/04/25 08:51:37 jmatthew Exp $ */ /* * Copyright (c) 2008, 2019 Mark Kettenis * Copyright (c) 2017, 2022 Patrick Wildt @@ -213,6 +213,8 @@ dwqe_attach(struct dwqe_softc *sc) /* Disable interrupts. */ dwqe_write(sc, GMAC_INT_EN, 0); dwqe_write(sc, GMAC_CHAN_INTR_ENA(0), 0); + dwqe_write(sc, GMAC_MMC_RX_INT_MASK, 0xffffffff); + dwqe_write(sc, GMAC_MMC_TX_INT_MASK, 0xffffffff); return 0; } diff --git a/sys/dev/ic/dwqereg.h b/sys/dev/ic/dwqereg.h index bc6de32a5..6f1753b34 100644 --- a/sys/dev/ic/dwqereg.h +++ b/sys/dev/ic/dwqereg.h @@ -1,4 +1,4 @@ -/* $OpenBSD: dwqereg.h,v 1.5 2023/11/11 16:32:56 stsp Exp $ */ +/* $OpenBSD: dwqereg.h,v 1.7 2024/04/25 11:37:39 stsp Exp $ */ /* * Copyright (c) 2008, 2019 Mark Kettenis * Copyright (c) 2017, 2022 Patrick Wildt @@ -83,6 +83,8 @@ #define GMAC_MAC_MDIO_DATA 0x0204 #define GMAC_MAC_ADDR0_HI 0x0300 #define GMAC_MAC_ADDR0_LO 0x0304 +#define GMAC_MMC_RX_INT_MASK 0x070c +#define GMAC_MMC_TX_INT_MASK 0x0710 #define GMAC_MTL_OPERATION_MODE 0x0c00 #define GMAC_MTL_FRPE (1 << 15) @@ -233,14 +235,44 @@ struct dwqe_desc { #define TDES3_FS (1 << 29) #define TDES3_OWN (1U << 31) -/* Rx bits */ +/* Rx bits (read format; host to device) */ +#define RDES3_BUF1V (1 << 24) +#define RDES3_BUF2V (1 << 25) +#define RDES3_IC (1 << 30) +#define RDES3_OWN (1U << 31) + +/* Rx bits (writeback format; device to host) */ +#define RDES1_IP_PAYLOAD_TYPE 0x7 +#define RDES1_IP_PAYLOAD_UNKNOWN 0x0 +#define RDES1_IP_PAYLOAD_UDP 0x1 +#define RDES1_IP_PAYLOAD_TCP 0x2 +#define RDES1_IP_PAYLOAD_ICMP 0x3 +#define RDES1_IP_HDR_ERROR (1 << 3) +#define RDES1_IPV4_HDR (1 << 4) +#define RDES1_IPV6_HDR (1 << 5) +#define RDES1_IP_CSUM_BYPASS (1 << 6) +#define RDES1_IP_PAYLOAD_ERROR (1 << 7) +#define RDES3_LENGTH (0x7fff << 0) #define RDES3_ES (1 << 15) +#define RDES3_LENTYPE 0x70000 +#define RDES3_LENTYPE_LENGTH (0x0 << 16) +#define RDES3_LENTYPE_TYPE (0x1 << 16) + /* 0x2 is reserved */ +#define RDES3_LENTYPE_ARP (0x3 << 16) +#define RDES3_LENTYPE_VLAN (0x4 << 16) +#define RDES3_LENTYPE_2VLAN (0x5 << 16) +#define RDES3_LENTYPE_MACCTL (0x6 << 16) +#define RDES3_LENTYPE_OAM (0x7 << 16) #define RDES3_DE (1 << 19) #define RDES3_RE (1 << 20) #define RDES3_OE (1 << 21) #define RDES3_RWT (1 << 22) +#define RDES3_GP (1 << 23) #define RDES3_CE (1 << 24) -#define RDES3_BUF1V (1 << 24) -#define RDES3_IC (1 << 30) -#define RDES3_OWN (1U << 31) -#define RDES3_LENGTH (0x7fff << 0) +#define RDES3_RDES0_VALID (1 << 25) +#define RDES3_RDES1_VALID (1 << 26) +#define RDES3_RDES2_VALID (1 << 27) +#define RDES3_LD (1 << 28) +#define RDES3_FD (1 << 29) +#define RDES3_CTXT (1 << 30) +/* Bit 31 is the OWN bit, as in "read" format. */ diff --git a/sys/kern/uipc_socket2.c b/sys/kern/uipc_socket2.c index 64eb92102..7fe3df6b1 100644 --- a/sys/kern/uipc_socket2.c +++ b/sys/kern/uipc_socket2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uipc_socket2.c,v 1.149 2024/04/11 13:32:51 mvs Exp $ */ +/* $OpenBSD: uipc_socket2.c,v 1.150 2024/04/25 17:32:53 bluhm Exp $ */ /* $NetBSD: uipc_socket2.c,v 1.11 1996/02/04 02:17:55 christos Exp $ */ /* @@ -559,7 +559,7 @@ sblock(struct socket *so, struct sockbuf *sb, int flags) while (sb->sb_flags & SB_LOCK) { sb->sb_flags |= SB_WANT; mtx_leave(&sb->sb_mtx); - error = sosleep_nsec(so, &sb->sb_flags, prio, "netlck", INFSLP); + error = sosleep_nsec(so, &sb->sb_flags, prio, "sblock", INFSLP); if (error) return (error); mtx_enter(&sb->sb_mtx); diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c index 97690f8db..1ad1b7941 100644 --- a/sys/kern/uipc_syscalls.c +++ b/sys/kern/uipc_syscalls.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uipc_syscalls.c,v 1.218 2024/03/01 14:15:01 bluhm Exp $ */ +/* $OpenBSD: uipc_syscalls.c,v 1.219 2024/04/25 17:32:53 bluhm Exp $ */ /* $NetBSD: uipc_syscalls.c,v 1.19 1996/02/09 19:00:48 christos Exp $ */ /* @@ -300,7 +300,7 @@ doaccept(struct proc *p, int sock, struct sockaddr *name, socklen_t *anamelen, break; } error = sosleep_nsec(head, &head->so_timeo, PSOCK | PCATCH, - "netcon", INFSLP); + "netacc", INFSLP); if (error) goto out_unlock; } @@ -428,7 +428,7 @@ sys_connect(struct proc *p, void *v, register_t *retval) } while ((so->so_state & SS_ISCONNECTING) && so->so_error == 0) { error = sosleep_nsec(so, &so->so_timeo, PSOCK | PCATCH, - "netcon2", INFSLP); + "netcon", INFSLP); if (error) { if (error == EINTR || error == ERESTART) interrupted = 1; @@ -1651,7 +1651,7 @@ out: error = soconnect(so, nam); while ((so->so_state & SS_ISCONNECTING) && so->so_error == 0) { error = sosleep_nsec(so, &so->so_timeo, PSOCK | PCATCH, - "netcon2", INFSLP); + "ypcon", INFSLP); if (error) break; } diff --git a/sys/lib/libsa/softraid.c b/sys/lib/libsa/softraid.c index d31c167e0..2dd078567 100644 --- a/sys/lib/libsa/softraid.c +++ b/sys/lib/libsa/softraid.c @@ -1,4 +1,4 @@ -/* $OpenBSD: softraid.c,v 1.6 2024/03/24 05:50:20 jsg Exp $ */ +/* $OpenBSD: softraid.c,v 1.7 2024/04/25 18:31:49 kn Exp $ */ /* * Copyright (c) 2012 Joel Sing @@ -150,6 +150,10 @@ sr_crypto_passphrase_decrypt(struct sr_meta_crypto *cm, for (;;) { printf("Passphrase: "); +#ifdef IDLE_POWEROFF +extern int idle_poweroff(void); + idle_poweroff(); +#endif /* IDLE_POWEROFF */ for (i = 0; i < PASSPHRASE_LENGTH - 1; i++) { c = cngetc(); if (c == '\r' || c == '\n') { diff --git a/usr.bin/awk/FIXES b/usr.bin/awk/FIXES index 3b059250d..c4eef3bd8 100644 --- a/usr.bin/awk/FIXES +++ b/usr.bin/awk/FIXES @@ -25,19 +25,33 @@ THIS SOFTWARE. This file lists all bug fixes, changes, etc., made since the second edition of the AWK book was published in September 2023. +Apr 22, 2024: + fixed regex engine gototab reallocation issue that was + introduced during the Nov 24 rewrite. Thanks to Arnold Robbins. + Fixed a scan bug in split in the case the separator is a single + character. thanks to Oguz Ismail for spotting the issue. + +Mar 10, 2024: + fixed use-after-free bug in fnematch due to adjbuf invalidating + the pointers to buf. thanks to github user caffe3 for spotting + the issue and providing a fix, and to Miguel Pineiro Jr. + for the alternative fix. + MAX_UTF_BYTES in fnematch has been replaced with awk_mb_cur_max. + thanks to Miguel Pineiro Jr. + Jan 22, 2024: Restore the ability to compile with g++. Thanks to Arnold Robbins. Dec 24, 2023: - matchop dereference after free problem fix when the first - argument is a function call. thanks to Oguz Ismail Uysal. + Matchop dereference after free problem fix when the first + argument is a function call. Thanks to Oguz Ismail Uysal. Fix inconsistent handling of --csv and FS set in the command line. Thanks to Wilbert van der Poel. - casting changes to int for is* functions. + Casting changes to int for is* functions. Nov 27, 2023: - Fix exit status of system on MacOS. update to REGRESS. + Fix exit status of system on MacOS. Update to REGRESS. Thanks to Arnold Robbins. Fix inconsistent handling of -F and --csv, and loss of csv mode when FS is set. @@ -45,7 +59,7 @@ Nov 27, 2023: Nov 24, 2023: Fix issue #199: gototab improvements to dynamically resize the table, qsort and bsearch to improve the lookup speed as the - table gets larger for multibyte input. thanks to Arnold Robbins. + table gets larger for multibyte input. Thanks to Arnold Robbins. Nov 23, 2023: Fix Issue #169, related to escape sequences in strings. @@ -54,29 +68,29 @@ Nov 23, 2023: by Miguel Pineiro Jr. Nov 20, 2023: - rewrite of fnematch to fix a number of issues, including + Rewrite of fnematch to fix a number of issues, including extraneous output, out-of-bounds access, number of bytes to push back after a failed match etc. - thanks to Miguel Pineiro Jr. + Thanks to Miguel Pineiro Jr. Nov 15, 2023: - Man page edit, regression test fixes. thanks to Arnold Robbins - consolidation of sub and gsub into dosub, removing duplicate - code. thanks to Miguel Pineiro Jr. + Man page edit, regression test fixes. Thanks to Arnold Robbins + Consolidation of sub and gsub into dosub, removing duplicate + code. Thanks to Miguel Pineiro Jr. gcc replaced with cc everywhere. Oct 30, 2023: - multiple fixes and a minor code cleanup. - disabled utf-8 for non-multibyte locales, such as C or POSIX. - fixed a bad char * cast that causes incorrect results on big-endian - systems. also fixed an out-of-bounds read for empty CCL. - fixed a buffer overflow in substr with utf-8 strings. - many thanks to Todd C Miller. + Multiple fixes and a minor code cleanup. + Disabled utf-8 for non-multibyte locales, such as C or POSIX. + Fixed a bad char * cast that causes incorrect results on big-endian + systems. Also fixed an out-of-bounds read for empty CCL. + Fixed a buffer overflow in substr with utf-8 strings. + Many thanks to Todd C Miller. Sep 24, 2023: fnematch and getrune have been overhauled to solve issues around - unicode FS and RS. also fixed gsub null match issue with unicode. - big thanks to Arnold Robbins. + unicode FS and RS. Also fixed gsub null match issue with unicode. + Big thanks to Arnold Robbins. Sep 12, 2023: Fixed a length error in u8_byte2char that set RSTART to @@ -101,9 +115,8 @@ Sep 12, 2023: of a string of 3 emojis is 3, not 12 as it would be if bytes were counted. - Regular expressions are processes as UTF-8. + Regular expressions are processed as UTF-8. Unicode literals can be written as \u followed by one to eight hexadecimal digits. These may appear in strings and regular expressions. - diff --git a/usr.bin/awk/README.md b/usr.bin/awk/README.md index e83be10d5..ea232e876 100644 --- a/usr.bin/awk/README.md +++ b/usr.bin/awk/README.md @@ -38,6 +38,7 @@ Regular expressions may include UTF-8 code points, including `\u`. The option `--csv` turns on CSV processing of input: fields are separated by commas, fields may be quoted with double-quote (`"`) characters, quoted fields may contain embedded newlines. +Double-quotes in fields have to be doubled and enclosed in quoted fields. In CSV mode, `FS` is ignored. If no explicit separator argument is provided, @@ -112,6 +113,8 @@ move this to some place like `/usr/bin/awk`. If your system does not have `yacc` or `bison` (the GNU equivalent), you need to install one of them first. +The default in the `makefile` is `bison`; you will have +to edit the `makefile` to use `yacc`. NOTE: This version uses ISO/IEC C99, as you should also. We have compiled this without any changes using `gcc -Wall` and/or local C @@ -131,4 +134,4 @@ We don't usually do releases. #### Last Updated -Mon 30 Oct 2023 12:53:07 MDT +Mon 05 Feb 2024 08:46:55 IST diff --git a/usr.bin/awk/b.c b/usr.bin/awk/b.c index bc3f06fd3..89f4918b7 100644 --- a/usr.bin/awk/b.c +++ b/usr.bin/awk/b.c @@ -1,4 +1,4 @@ -/* $OpenBSD: b.c,v 1.50 2024/01/25 16:40:51 millert Exp $ */ +/* $OpenBSD: b.c,v 1.51 2024/04/25 18:33:53 millert Exp $ */ /**************************************************************** Copyright (C) Lucent Technologies 1997 All Rights Reserved @@ -613,11 +613,11 @@ static void resize_gototab(fa *f, int state) size_t orig_size = f->gototab[state].allocated; // 2nd half of new mem is this size memset(p + orig_size, 0, orig_size * sizeof(gtte)); // clean it out - f->gototab[state].allocated = new_size; // update gotottab info + f->gototab[state].allocated = new_size; // update gototab info f->gototab[state].entries = p; } -static int get_gototab(fa *f, int state, int ch) /* hide gototab inplementation */ +static int get_gototab(fa *f, int state, int ch) /* hide gototab implementation */ { gtte key; gtte *item; @@ -644,7 +644,7 @@ static int entry_cmp(const void *l, const void *r) return left->ch - right->ch; } -static int set_gototab(fa *f, int state, int ch, int val) /* hide gototab inplementation */ +static int set_gototab(fa *f, int state, int ch, int val) /* hide gototab implementation */ { if (f->gototab[state].inuse == 0) { f->gototab[state].entries[0].ch = ch; @@ -657,8 +657,8 @@ static int set_gototab(fa *f, int state, int ch, int val) /* hide gototab inplem if (tab->inuse + 1 >= tab->allocated) resize_gototab(f, state); - f->gototab[state].entries[f->gototab[state].inuse-1].ch = ch; - f->gototab[state].entries[f->gototab[state].inuse-1].state = val; + f->gototab[state].entries[f->gototab[state].inuse].ch = ch; + f->gototab[state].entries[f->gototab[state].inuse].state = val; f->gototab[state].inuse++; return val; } else { @@ -683,9 +683,9 @@ static int set_gototab(fa *f, int state, int ch, int val) /* hide gototab inplem gtt *tab = & f->gototab[state]; if (tab->inuse + 1 >= tab->allocated) resize_gototab(f, state); - ++tab->inuse; f->gototab[state].entries[tab->inuse].ch = ch; f->gototab[state].entries[tab->inuse].state = val; + ++tab->inuse; qsort(f->gototab[state].entries, f->gototab[state].inuse, sizeof(gtte), entry_cmp); @@ -836,8 +836,6 @@ int nematch(fa *f, const char *p0) /* non-empty match, for sub */ } -#define MAX_UTF_BYTES 4 // UTF-8 is up to 4 bytes long - /* * NAME * fnematch @@ -874,16 +872,28 @@ bool fnematch(fa *pfa, FILE *f, char **pbuf, int *pbufsize, int quantum) do { /* - * Call u8_rune with at least MAX_UTF_BYTES ahead in + * Call u8_rune with at least awk_mb_cur_max ahead in * the buffer until EOF interferes. */ - if (k - j < MAX_UTF_BYTES) { - if (k + MAX_UTF_BYTES > buf + bufsize) { + if (k - j < awk_mb_cur_max) { + if (k + awk_mb_cur_max > buf + bufsize) { + char *obuf = buf; adjbuf(&buf, &bufsize, - bufsize + MAX_UTF_BYTES, + bufsize + awk_mb_cur_max, quantum, 0, "fnematch"); + + /* buf resized, maybe moved. update pointers */ + *pbufsize = bufsize; + if (obuf != buf) { + i = buf + (i - obuf); + j = buf + (j - obuf); + k = buf + (k - obuf); + *pbuf = buf; + if (patlen) + patbeg = buf + (patbeg - obuf); + } } - for (n = MAX_UTF_BYTES ; n > 0; n--) { + for (n = awk_mb_cur_max ; n > 0; n--) { *k++ = (c = getc(f)) != EOF ? c : 0; if (c == EOF) { if (ferror(f)) @@ -920,10 +930,6 @@ bool fnematch(fa *pfa, FILE *f, char **pbuf, int *pbufsize, int quantum) s = 2; } while (1); - /* adjbuf() may have relocated a resized buffer. Inform the world. */ - *pbuf = buf; - *pbufsize = bufsize; - if (patlen) { /* * Under no circumstances is the last character fed to diff --git a/usr.bin/awk/main.c b/usr.bin/awk/main.c index 481e98b07..11296ce12 100644 --- a/usr.bin/awk/main.c +++ b/usr.bin/awk/main.c @@ -1,4 +1,4 @@ -/* $OpenBSD: main.c,v 1.68 2024/01/25 16:40:51 millert Exp $ */ +/* $OpenBSD: main.c,v 1.69 2024/04/25 18:33:53 millert Exp $ */ /**************************************************************** Copyright (C) Lucent Technologies 1997 All Rights Reserved @@ -23,7 +23,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ****************************************************************/ -const char *version = "version 20240122"; +const char *version = "version 20240422"; #define DEBUG #include diff --git a/usr.bin/awk/run.c b/usr.bin/awk/run.c index bba340c68..6220d5787 100644 --- a/usr.bin/awk/run.c +++ b/usr.bin/awk/run.c @@ -1,4 +1,4 @@ -/* $OpenBSD: run.c,v 1.84 2024/01/25 16:40:51 millert Exp $ */ +/* $OpenBSD: run.c,v 1.85 2024/04/25 18:33:53 millert Exp $ */ /**************************************************************** Copyright (C) Lucent Technologies 1997 All Rights Reserved @@ -1831,7 +1831,7 @@ Cell *split(Node **a, int nnn) /* split(a[0], a[1], a[2]); a[3] is type */ for (;;) { n++; t = s; - while (*s != sep && *s != '\n' && *s != '\0') + while (*s != sep && *s != '\0') s++; temp = *s; setptr(s, '\0'); @@ -2527,7 +2527,7 @@ void backsub(char **pb_ptr, const char **sptr_ptr); Cell *dosub(Node **a, int subop) /* sub and gsub */ { fa *pfa; - int tempstat; + int tempstat = 0; char *repl; Cell *x; diff --git a/usr.bin/vi/docs/USD.doc/vi.ref/set.opt.roff b/usr.bin/vi/docs/USD.doc/vi.ref/set.opt.roff index 28f291d0c..76aabebf6 100644 --- a/usr.bin/vi/docs/USD.doc/vi.ref/set.opt.roff +++ b/usr.bin/vi/docs/USD.doc/vi.ref/set.opt.roff @@ -1,4 +1,4 @@ -.\" $OpenBSD: set.opt.roff,v 1.13 2020/04/30 10:40:21 millert Exp $ +.\" $OpenBSD: set.opt.roff,v 1.14 2024/04/25 05:26:41 jmc Exp $ .\" .\" Copyright (c) 1994 .\" The Regents of the University of California. All rights reserved. @@ -869,7 +869,7 @@ the set value, it is reported to the user. .IP "ruler [off]" .CO Vi only. -Display a row/column ruler on the colon command line. +Display a row/column/percentage ruler on the colon command line. .KY scroll .IP "scroll, scr [(environment variable LINES - 1) / 2]" Set the number of lines scrolled by the diff --git a/usr.bin/vi/vi/vs_refresh.c b/usr.bin/vi/vi/vs_refresh.c index 91769cfb3..37d03d820 100644 --- a/usr.bin/vi/vi/vs_refresh.c +++ b/usr.bin/vi/vi/vs_refresh.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vs_refresh.c,v 1.24 2024/04/24 15:15:40 job Exp $ */ +/* $OpenBSD: vs_refresh.c,v 1.25 2024/04/25 09:58:17 job Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 @@ -781,7 +781,7 @@ vs_modeline(SCR *sp) size_t cols, curcol, curlen, endpoint, len, midpoint; const char *t = NULL; int ellipsis; - char *p, buf[20]; + char *p, buf[30]; recno_t last; /* @@ -859,7 +859,7 @@ vs_modeline(SCR *sp) if (O_ISSET(sp, O_RULER)) { vs_column(sp, &curcol); - if (db_last(sp, &last)) + if (db_last(sp, &last) || last == 0) len = snprintf(buf, sizeof(buf), "%lu,%zu", (ulong)sp->lno, curcol + 1); else