From 887dd091b77e890de516731360aadf6a99ce231c Mon Sep 17 00:00:00 2001 From: purplerain Date: Sun, 10 Sep 2023 05:16:20 +0000 Subject: [PATCH] sync code with last improvements from OpenBSD --- distrib/sets/lists/base/mi | 1 + etc/skel/dot.version | 2 +- lib/libc/stdlib/malloc.c | 22 +++- .../man/EVP_PKEY_CTX_get_operation.3 | 118 ++++++++++++++++++ lib/libcrypto/man/EVP_PKEY_CTX_new.3 | 6 +- lib/libcrypto/man/EVP_PKEY_derive.3 | 116 ++++++++++++++--- lib/libcrypto/man/EVP_PKEY_keygen.3 | 69 ++++++++-- lib/libcrypto/man/EVP_PKEY_meth_new.3 | 64 +++++++++- lib/libcrypto/man/Makefile | 3 +- lib/libcrypto/man/evp.3 | 5 +- regress/sys/netinet/frag/frag_permute.py | 2 + regress/sys/netinet/frag/frag_queuelimit.py | 1 + regress/sys/netinet6/frag6/Makefile | 6 +- .../sys/netinet6/frag6/frag6_doubleatomic.py | 49 ++++++++ regress/sys/netinet6/frag6/frag6_permute.py | 2 + .../sys/netinet6/frag6/frag6_queuelimit.py | 1 + share/man/man5/bsd.port.mk.5 | 47 ++++--- sys/arch/amd64/amd64/machdep.c | 73 ++++------- sys/arch/amd64/include/biosvar.h | 10 +- sys/dev/hotplug.c | 3 +- sys/dev/usb/if_ure.c | 3 +- sys/dev/usb/usbdevs | 4 +- sys/dev/usb/usbdevs.h | 6 +- sys/dev/usb/usbdevs_data.h | 8 +- sys/dev/wscons/wseventvar.h | 3 +- sys/isofs/cd9660/cd9660_vnops.c | 6 +- sys/kern/kern_clockintr.c | 106 ++++++++-------- sys/kern/kern_sig.c | 6 +- sys/miscfs/fuse/fuse_device.c | 3 +- sys/miscfs/fuse/fuse_vnops.c | 6 +- sys/msdosfs/msdosfs_vnops.c | 6 +- sys/nfs/nfs_kq.c | 6 +- sys/sys/vnode.h | 8 +- sys/tmpfs/tmpfs_vnops.c | 6 +- sys/ufs/ufs/ufs_vnops.c | 6 +- 35 files changed, 571 insertions(+), 212 deletions(-) create mode 100644 lib/libcrypto/man/EVP_PKEY_CTX_get_operation.3 create mode 100644 regress/sys/netinet6/frag6/frag6_doubleatomic.py diff --git a/distrib/sets/lists/base/mi b/distrib/sets/lists/base/mi index 28d0e8657..0322f7458 100644 --- a/distrib/sets/lists/base/mi +++ b/distrib/sets/lists/base/mi @@ -2505,6 +2505,7 @@ ./usr/libexec/radiusd ./usr/libexec/radiusd/radiusd_bsdauth ./usr/libexec/radiusd/radiusd_radius +./usr/libexec/radiusd/radiusd_standard ./usr/libexec/reorder_kernel ./usr/libexec/rpc.rquotad ./usr/libexec/rpc.rstatd diff --git a/etc/skel/dot.version b/etc/skel/dot.version index 01cddfa26..9d13ca487 100644 --- a/etc/skel/dot.version +++ b/etc/skel/dot.version @@ -1 +1 @@ -# SecBSD 1.3-5b707e8: Wed Aug 23 00:00:00 UTC 2023 (Tezcatlipoca) +# SecBSD 1.3-c7a8681: Sun Sep 10 00:00:00 UTC 2023 (Tezcatlipoca) diff --git a/lib/libc/stdlib/malloc.c b/lib/libc/stdlib/malloc.c index c09e1541e..814a41714 100644 --- a/lib/libc/stdlib/malloc.c +++ b/lib/libc/stdlib/malloc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: malloc.c,v 1.289 2023/06/30 06:24:58 otto Exp $ */ +/* $OpenBSD: malloc.c,v 1.290 2023/09/09 06:52:40 asou Exp $ */ /* * Copyright (c) 2008, 2010, 2011, 2016, 2023 Otto Moerbeek * Copyright (c) 2012 Matthew Dempsky @@ -2337,6 +2337,22 @@ RBT_HEAD(leaktree, leaknode); RBT_PROTOTYPE(leaktree, leaknode, entry, leakcmp); RBT_GENERATE(leaktree, leaknode, entry, leakcmp); +static void +wrtwarning(const char *func, char *msg, ...) +{ + int saved_errno = errno; + va_list ap; + + dprintf(STDERR_FILENO, "%s(%d) in %s(): ", __progname, + getpid(), func != NULL ? func : "unknown"); + va_start(ap, msg); + vdprintf(STDERR_FILENO, msg, ap); + va_end(ap); + dprintf(STDERR_FILENO, "\n"); + + errno = saved_errno; +} + static void putleakinfo(struct leaktree *leaks, void *f, size_t sz, int cnt) { @@ -2353,8 +2369,10 @@ putleakinfo(struct leaktree *leaks, void *f, size_t sz, int cnt) if (page == NULL || used >= MALLOC_PAGESIZE / sizeof(struct leaknode)) { page = MMAP(MALLOC_PAGESIZE, 0); - if (page == MAP_FAILED) + if (page == MAP_FAILED) { + wrtwarning(__func__, strerror(errno)); return; + } used = 0; } p = &page[used++]; diff --git a/lib/libcrypto/man/EVP_PKEY_CTX_get_operation.3 b/lib/libcrypto/man/EVP_PKEY_CTX_get_operation.3 new file mode 100644 index 000000000..b6e7275b5 --- /dev/null +++ b/lib/libcrypto/man/EVP_PKEY_CTX_get_operation.3 @@ -0,0 +1,118 @@ +.\" $OpenBSD: EVP_PKEY_CTX_get_operation.3,v 1.1 2023/09/09 14:39:09 schwarze Exp $ +.\" +.\" Copyright (c) 2023 Ingo Schwarze +.\" +.\" 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. +.\" +.Dd $Mdocdate: September 9 2023 $ +.Dt EVP_PKEY_CTX_GET_OPERATION 3 +.Os +.Sh NAME +.Nm EVP_PKEY_CTX_get_operation , +.Nm EVP_PKEY_CTX_get0_pkey +.Nd inspect EVP_PKEY_CTX objects +.Sh SYNOPSIS +.In openssl/evp.h +.Ft int +.Fo EVP_PKEY_CTX_get_operation +.Fa "EVP_PKEY_CTX *ctx" +.Fc +.Ft EVP_PKEY * +.Fo EVP_PKEY_CTX_get0_pkey +.Fa "EVP_PKEY_CTX *ctx" +.Fc +.Sh DESCRIPTION +.Fn EVP_PKEY_CTX_get_operation +finds out which initialization function has been called on +.Fa ctx , +if any: +.Bl -column EVP_PKEY_OP_VERIFYRECO EVP_PKEY_verify_recover_init +.It return value Ta initialized with Ta e.g. for +.It Dv EVP_PKEY_OP_DECRYPT Ta Xr EVP_PKEY_decrypt_init 3 Ta RSA, SM2 +.It Dv EVP_PKEY_OP_DERIVE Ta Xr EVP_PKEY_derive_init 3 Ta HKDF +.It Dv EVP_PKEY_OP_ENCRYPT Ta Xr EVP_PKEY_encrypt_init 3 Ta RSA, SM2 +.It Dv EVP_PKEY_OP_KEYGEN Ta Xr EVP_PKEY_keygen_init 3 Ta almost all +.It Dv EVP_PKEY_OP_PARAMGEN Ta Xr EVP_PKEY_paramgen_init 3 Ta DH, DSA, EC +.It Dv EVP_PKEY_OP_SIGN Ta Xr EVP_PKEY_sign_init 3 Ta DSA,EC,RSA,SM2 +.It Dv EVP_PKEY_OP_SIGN Ta Xr EVP_DigestSignInit 3 Ta ED25519 +.It Dv EVP_PKEY_OP_SIGNCTX Ta Xr EVP_DigestSignInit 3 Ta CMAC, HMAC +.It Dv EVP_PKEY_OP_UNDEFINED Ta not initialized Ta NONE +.It Dv EVP_PKEY_OP_VERIFY Ta Xr EVP_PKEY_verify_init 3 Ta DSA,EC,RSA,SM2 +.It Dv EVP_PKEY_OP_VERIFY Ta Xr EVP_DigestVerifyInit 3 Ta ED25519 +.It Dv EVP_PKEY_OP_VERIFYCTX Ta Xr EVP_DigestVerifyInit 3 Ta no built-in +.It Dv EVP_PKEY_OP_VERIFYRECOVER Ta Xr EVP_PKEY_verify_recover_init 3 Ta RSA +.El +.Pp +The rightmost column of the above table shows examples of algoritms +the return values can occur for. +For example, if +.Xr EVP_PKEY_base_id 3 +returns +.Dv EVP_PKEY_HKDF , +then calling +.Fn EVP_PKEY_CTX_get_operation +on a +.Vt EVP_PKEY_CTX +using that key may return +.Dv EVP_PKEY_OP_DERIVE . +.Pp +If the return value is +.Dv EVP_PKEY_OP_SIGNCTX +or +.Dv EVP_PKEY_OP_VERIFYCTX , +the +.Fa ctx +supports +.Xr EVP_DigestSignUpdate 3 +or +.Xr EVP_DigestVerifyUpdate 3 , +respectively. +If the return value is +.Dv EVP_PKEY_OP_SIGN +or +.Dv EVP_PKEY_OP_VERIFY , +if does not, and only one-shot signing or verification is supported. +.Pp +The return value +.Dv EVP_PKEY_OP_UNDEFINED +can for example occur if the +.Fa ctx +was freshly returned from +.Xr EVP_PKEY_CTX_new 3 +or +.Xr EVP_PKEY_CTX_new_id 3 +and not yet initialized. +.Sh RETURN VALUES +.Fn EVP_PKEY_CTX_get_operation +returns one of the +.Dv EVP_PKEY_OP_* +constants. +.Pp +.Fn EVP_PKEY_CTX_get0_pkey +returns an internal pointer to the +.Vt EVP_PKEY +object used by +.Fa ctx , +without incrementing its reference count. +.Sh SEE ALSO +.Xr evp 3 , +.Xr EVP_PKEY_base_id 3 , +.Xr EVP_PKEY_CTX_ctrl 3 , +.Xr EVP_PKEY_CTX_new 3 , +.Xr EVP_PKEY_new 3 +.Sh HISTORY +.Fn EVP_PKEY_CTX_get_operation +and +.Fn EVP_PKEY_CTX_get0_pkey +first appeared in OpenSSL 1.0.0 and have been available since +.Ox 4.9 . diff --git a/lib/libcrypto/man/EVP_PKEY_CTX_new.3 b/lib/libcrypto/man/EVP_PKEY_CTX_new.3 index 229f55224..7a72ac18f 100644 --- a/lib/libcrypto/man/EVP_PKEY_CTX_new.3 +++ b/lib/libcrypto/man/EVP_PKEY_CTX_new.3 @@ -1,4 +1,4 @@ -.\" $OpenBSD: EVP_PKEY_CTX_new.3,v 1.12 2022/07/13 21:51:35 schwarze Exp $ +.\" $OpenBSD: EVP_PKEY_CTX_new.3,v 1.13 2023/09/09 14:39:09 schwarze Exp $ .\" full merge up to: OpenSSL df75c2bf Dec 9 01:02:36 2018 +0100 .\" .\" This file is a derived work. @@ -65,7 +65,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED .\" OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: July 13 2022 $ +.Dd $Mdocdate: September 9 2023 $ .Dt EVP_PKEY_CTX_NEW 3 .Os .Sh NAME @@ -159,6 +159,8 @@ if an error occurred. .Xr EVP_PKEY_base_id 3 , .Xr EVP_PKEY_check 3 , .Xr EVP_PKEY_CTX_ctrl 3 , +.Xr EVP_PKEY_CTX_get_operation 3 , +.Xr EVP_PKEY_CTX_hkdf_mode 3 , .Xr EVP_PKEY_decrypt 3 , .Xr EVP_PKEY_derive 3 , .Xr EVP_PKEY_encrypt 3 , diff --git a/lib/libcrypto/man/EVP_PKEY_derive.3 b/lib/libcrypto/man/EVP_PKEY_derive.3 index 574b6b9b9..c82018341 100644 --- a/lib/libcrypto/man/EVP_PKEY_derive.3 +++ b/lib/libcrypto/man/EVP_PKEY_derive.3 @@ -1,7 +1,24 @@ -.\" $OpenBSD: EVP_PKEY_derive.3,v 1.8 2018/03/23 04:34:23 schwarze Exp $ +.\" $OpenBSD: EVP_PKEY_derive.3,v 1.9 2023/09/09 14:26:35 schwarze Exp $ .\" full merge up to: OpenSSL 48e5119a Jan 19 10:49:22 2018 +0100 .\" -.\" This file was written by Dr. Stephen Henson . +.\" This file is a derived work. +.\" The changes are covered by the following Copyright and license: +.\" +.\" Copyright (c) 2023 Ingo Schwarze +.\" +.\" 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. +.\" +.\" The original file was written by Dr. Stephen Henson . .\" Copyright (c) 2006, 2009, 2013, 2018 The OpenSSL Project. .\" All rights reserved. .\" @@ -49,12 +66,13 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED .\" OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: March 23 2018 $ +.Dd $Mdocdate: September 9 2023 $ .Dt EVP_PKEY_DERIVE 3 .Os .Sh NAME .Nm EVP_PKEY_derive_init , .Nm EVP_PKEY_derive_set_peer , +.Nm EVP_PKEY_CTX_get0_peerkey , .Nm EVP_PKEY_derive .Nd derive public key algorithm shared secret .Sh SYNOPSIS @@ -66,7 +84,11 @@ .Ft int .Fo EVP_PKEY_derive_set_peer .Fa "EVP_PKEY_CTX *ctx" -.Fa "EVP_PKEY *peer" +.Fa "EVP_PKEY *peerkey" +.Fc +.Ft EVP_PKEY * +.Fo EVP_PKEY_CTX_get0_peerkey +.Fa "EVP_PKEY_CTX *ctx" .Fc .Ft int .Fo EVP_PKEY_derive @@ -75,19 +97,51 @@ .Fa "size_t *keylen" .Fc .Sh DESCRIPTION -The .Fn EVP_PKEY_derive_init -function initializes a public key algorithm context using key -.Fa ctx->pkey -for shared secret derivation. +initializes the public key algorithm context +.Fa ctx +for shared secret derivation using the +.Vt EVP_PKEY +object already stored in +.Fa ctx . +The library provides built-in support for keys with an +.Xr EVP_PKEY_base_id 3 +of +.Dv EVP_PKEY_DH , +.Dv EVP_PKEY_EC , +.Dv EVP_PKEY_GOSTR01 , +.Dv EVP_PKEY_HKDF , +and +.Dv EVP_PKEY_X25519 . +.Pp +After the call to +.Fn EVP_PKEY_derive_init , +algorithm specific control operations can optionally be performed +to set any appropriate parameters for the operation. .Pp -The .Fn EVP_PKEY_derive_set_peer -function sets the peer key: this will normally be a public key. +configures the +.Fa ctx , +which already needs to be initialized with +.Fn EVP_PKEY_derive_init , +.Xr EVP_PKEY_encrypt_init 3 , +or +.Xr EVP_PKEY_decrypt_init 3 , +to use the +.Fa peerkey , +which is normally a public key. +In case of success, the reference count of the +.Fa peerkey +is incremented by one. +Consequently, the caller needs to call +.Xr EVP_PKEY_free 3 +on the +.Fa peerkey +when the caller no longer needs it, even if it is still in use by +.Fa ctx . .Pp -The .Fn EVP_PKEY_derive -function derives a shared secret using +derives a shared secret using .Fa ctx . If .Fa key @@ -110,22 +164,45 @@ If the call is successful, the shared secret is written to and the amount of data written to .Fa keylen . .Pp -After the call to -.Fn EVP_PKEY_derive_init , -algorithm specific control operations can be performed to set any -appropriate parameters for the operation. -.Pp The function .Fn EVP_PKEY_derive can be called more than once on the same context if several operations are performed using the same parameters. .Sh RETURN VALUES -.Fn EVP_PKEY_derive_init +.Fn EVP_PKEY_derive_init , +.Fn EVP_PKEY_derive_set_peer , and .Fn EVP_PKEY_derive return 1 for success and 0 or a negative value for failure. -In particular, a return value of -2 indicates the operation is not +In particular, a return value of \-2 indicates the operation is not supported by the public key algorithm. +.Pp +For +.Fn EVP_PKEY_derive_set_peer , +a return value of \-1 can for example occur if +.Fa ctx +is not properly initialized, does not contain an +.Vt EVP_PKEY +that can be retrieved with +.Xr EVP_PKEY_CTX_get0_pkey 3 , +the +.Xr EVP_PKEY_id 3 +of both keys mismatch, or +.Xr EVP_PKEY_cmp_parameters 3 +reports mismatching key parameters. +.Pp +.Fn EVP_PKEY_derive +fails with a return value of \-1 for example if +.Fa ctx +has not been successfully initialized with +.Fn EVP_PKEY_derive_init . +.Pp +.Fn EVP_PKEY_CTX_get0_peerkey +returns an internal pointer to the +.Fa peerkey +used by +.Fa ctx +without incrementing its reference count. .Sh EXAMPLES Derive shared secret (for example DH or EC keys): .Bd -literal -offset indent @@ -173,6 +250,7 @@ if (EVP_PKEY_derive(ctx, skey, &skeylen) <= 0) .Sh HISTORY .Fn EVP_PKEY_derive_init , .Fn EVP_PKEY_derive_set_peer , +.Fn EVP_PKEY_CTX_get0_peerkey , and .Fn EVP_PKEY_derive first appeared in OpenSSL 1.0.0 and have been available since diff --git a/lib/libcrypto/man/EVP_PKEY_keygen.3 b/lib/libcrypto/man/EVP_PKEY_keygen.3 index aae994541..7641dba5a 100644 --- a/lib/libcrypto/man/EVP_PKEY_keygen.3 +++ b/lib/libcrypto/man/EVP_PKEY_keygen.3 @@ -1,8 +1,24 @@ -.\" $OpenBSD: EVP_PKEY_keygen.3,v 1.11 2023/04/25 16:50:33 tb Exp $ -.\" full merge up to: OpenSSL e9b77246 Jan 20 19:58:49 2017 +0100 -.\" selective merge up to: OpenSSL 48e5119a Jan 19 10:49:22 2018 +0100 +.\" $OpenBSD: EVP_PKEY_keygen.3,v 1.12 2023/09/09 14:31:38 schwarze Exp $ +.\" full merge up to: OpenSSL 24a535ea Sep 22 13:14:20 2020 +0100 .\" -.\" This file was written by Dr. Stephen Henson . +.\" This file is a derived work. +.\" The changes are covered by the following Copyright and license: +.\" +.\" Copyright (c) 2023 Ingo Schwarze +.\" +.\" 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. +.\" +.\" The original file was written by Dr. Stephen Henson . .\" Copyright (c) 2006, 2009, 2013, 2015, 2016, 2018 The OpenSSL Project. .\" All rights reserved. .\" @@ -50,7 +66,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED .\" OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: April 25 2023 $ +.Dd $Mdocdate: September 9 2023 $ .Dt EVP_PKEY_KEYGEN 3 .Os .Sh NAME @@ -61,6 +77,7 @@ .Nm EVP_PKEY_gen_cb , .Nm EVP_PKEY_CTX_set_cb , .Nm EVP_PKEY_CTX_get_cb , +.Nm EVP_PKEY_CTX_set0_keygen_info , .Nm EVP_PKEY_CTX_get_keygen_info , .Nm EVP_PKEY_CTX_set_app_data , .Nm EVP_PKEY_CTX_get_app_data @@ -98,6 +115,12 @@ .Fo EVP_PKEY_CTX_get_cb .Fa "EVP_PKEY_CTX *ctx" .Fc +.Ft void +.Fo EVP_PKEY_CTX_set0_keygen_info +.Fa "EVP_PKEY_CTX *ctx" +.Fa "int *dat" +.Fa "int datlen" +.Fc .Ft int .Fo EVP_PKEY_CTX_get_keygen_info .Fa "EVP_PKEY_CTX *ctx" @@ -131,13 +154,22 @@ and .Fn EVP_PKEY_paramgen are similar except parameters are generated. .Pp -The function +The functions .Fn EVP_PKEY_CTX_set_cb -sets the key or parameter generation callback to -.Fa cb . -The function +and .Fn EVP_PKEY_CTX_get_cb -returns the key or parameter generation callback. +set and retrieve the key or parameter generation callback, respectively. +.Pp +The function +.Fn EVP_PKEY_CTX_set0_keygen_info +sets the parameters associated with the generation operation to the array +.Fa dat +containing +.Ft datlen +integer parameters. +The caller retains ownership of the +.Fa dat +array; it will never be freed by the library. .Pp The function .Fn EVP_PKEY_CTX_get_keygen_info @@ -209,6 +241,23 @@ and return 1 for success and 0 or a negative value for failure. In particular, a return value of -2 indicates the operation is not supported by the public key algorithm. +.Pp +Callback functions of the type +.Fn EVP_PKEY_gen_cb +are supposed to return 1 on success or 0 on error. +.Pp +.Fn EVP_PKEY_CTX_get_cb +returns a function pointer to the currently installed callback function or +.Dv NULL +if no callback function is installed. +.Pp +.Fn EVP_PKEY_CTX_get_keygen_info +retuns the number of available parameters if +.Fa idx +is \-1, one of these parameters if +.Fa idx +is greater than or equal to zero but less than the number +of available parameters, or 0 otherwise. .Sh EXAMPLES Generate a 2048-bit RSA key: .Bd -literal -offset indent diff --git a/lib/libcrypto/man/EVP_PKEY_meth_new.3 b/lib/libcrypto/man/EVP_PKEY_meth_new.3 index 3d9d1ba5b..5ec0b1210 100644 --- a/lib/libcrypto/man/EVP_PKEY_meth_new.3 +++ b/lib/libcrypto/man/EVP_PKEY_meth_new.3 @@ -1,7 +1,24 @@ -.\" $OpenBSD: EVP_PKEY_meth_new.3,v 1.5 2022/07/13 19:10:40 schwarze Exp $ -.\" selective merge up to: OpenSSL 335a587b May 7 11:59:11 2019 +0200 +.\" $OpenBSD: EVP_PKEY_meth_new.3,v 1.6 2023/09/09 14:35:23 schwarze Exp $ +.\" selective merge up to: OpenSSL 35fd9953 May 28 14:49:38 2019 +0200 .\" -.\" This file was written by Paul Yang +.\" This file is a derived work. +.\" The changes are covered by the following Copyright and license: +.\" +.\" Copyright (c) 2023 Ingo Schwarze +.\" +.\" 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. +.\" +.\" The original file was written by Paul Yang . .\" Copyright (c) 2017 The OpenSSL Project. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without @@ -48,7 +65,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED .\" OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: July 13 2022 $ +.Dd $Mdocdate: September 9 2023 $ .Dt EVP_PKEY_METH_NEW 3 .Os .Sh NAME @@ -73,7 +90,9 @@ .Nm EVP_PKEY_meth_set_ctrl , .Nm EVP_PKEY_meth_set_check , .Nm EVP_PKEY_meth_set_public_check , -.Nm EVP_PKEY_meth_set_param_check +.Nm EVP_PKEY_meth_set_param_check , +.Nm EVP_PKEY_CTX_get_data , +.Nm EVP_PKEY_CTX_set_data .Nd manipulate an EVP_PKEY_METHOD structure .Sh SYNOPSIS .In openssl/evp.h @@ -202,6 +221,15 @@ .Fa "EVP_PKEY_METHOD *pmeth" .Fa "int (*param_check)(EVP_PKEY *pkey)" .Fc +.Ft void * +.Fo EVP_PKEY_CTX_get_data +.Fa "EVP_PKEY_CTX *ctx" +.Fc +.Ft void +.Fo EVP_PKEY_CTX_set_data +.Fa "EVP_PKEY_CTX *ctx" +.Fa "void *data" +.Fc .Sh DESCRIPTION The .Vt EVP_PKEY_METHOD @@ -539,6 +567,24 @@ The functions set the corresponding fields of .Fa pmeth to the arguments passed. +.Pp +.Fn EVP_PKEY_CTX_get_data +retrieves algorithm- and implementation-specific private key data from +.Fa ctx . +Public key algorithm implementations typically allocate and initialize +this data automatically in their +.Fn init +function. +.Pp +.Fn EVP_PKEY_CTX_set_data +transfers ownership of the given +.Fa data +to +.Fa ctx , +replacing the existing algorithm- and implementation-specific +private key data. +It is the responsibility of the caller to free the existing data +before calling this function. .Sh RETURN VALUES .Fn EVP_PKEY_meth_new returns a pointer to a new @@ -556,6 +602,10 @@ if no matching object is found. .Pp .Fn EVP_PKEY_meth_add0 returns 1 if the method is added successfully or 0 if an error occurred. +.Pp +.Fn EVP_PKEY_CTX_get_data +returns an internal pointer owned by +.Fa ctx . .Sh SEE ALSO .Xr EVP_DigestInit 3 , .Xr EVP_PKEY_meth_get0_info 3 , @@ -578,8 +628,10 @@ returns 1 if the method is added successfully or 0 if an error occurred. .Fn EVP_PKEY_meth_set_encrypt , .Fn EVP_PKEY_meth_set_decrypt , .Fn EVP_PKEY_meth_set_derive , +.Fn EVP_PKEY_meth_set_ctrl , +.Fn EVP_PKEY_CTX_get_data , and -.Fn EVP_PKEY_meth_set_ctrl +.Fn EVP_PKEY_CTX_set_data first appeared in OpenSSL 1.0.0 and have been available since .Ox 4.9 . .Pp diff --git a/lib/libcrypto/man/Makefile b/lib/libcrypto/man/Makefile index c7a79fa7b..ec8d3fe19 100644 --- a/lib/libcrypto/man/Makefile +++ b/lib/libcrypto/man/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.267 2023/09/07 14:22:11 schwarze Exp $ +# $OpenBSD: Makefile,v 1.268 2023/09/09 14:39:09 schwarze Exp $ .include @@ -181,6 +181,7 @@ MAN= \ EVP_OpenInit.3 \ EVP_PKCS82PKEY.3 \ EVP_PKEY_CTX_ctrl.3 \ + EVP_PKEY_CTX_get_operation.3 \ EVP_PKEY_CTX_new.3 \ EVP_PKEY_CTX_set_hkdf_md.3 \ EVP_PKEY_add1_attr.3 \ diff --git a/lib/libcrypto/man/evp.3 b/lib/libcrypto/man/evp.3 index 2f2d07c7a..b29f76480 100644 --- a/lib/libcrypto/man/evp.3 +++ b/lib/libcrypto/man/evp.3 @@ -1,4 +1,4 @@ -.\" $OpenBSD: evp.3,v 1.23 2023/09/07 14:22:11 schwarze Exp $ +.\" $OpenBSD: evp.3,v 1.24 2023/09/09 14:39:09 schwarze Exp $ .\" full merge up to: OpenSSL man7/evp 24a535ea Sep 22 13:14:20 2020 +0100 .\" .\" This file was written by Ulf Moeller , @@ -51,7 +51,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED .\" OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: September 7 2023 $ +.Dd $Mdocdate: September 9 2023 $ .Dt EVP 3 .Os .Sh NAME @@ -222,6 +222,7 @@ operations are more efficient using the high-level interfaces. .Xr EVP_PKEY_check 3 , .Xr EVP_PKEY_cmp 3 , .Xr EVP_PKEY_CTX_ctrl 3 , +.Xr EVP_PKEY_CTX_get_operation 3 , .Xr EVP_PKEY_CTX_new 3 , .Xr EVP_PKEY_CTX_set_hkdf_md 3 , .Xr EVP_PKEY_decrypt 3 , diff --git a/regress/sys/netinet/frag/frag_permute.py b/regress/sys/netinet/frag/frag_permute.py index 45c6f1f7c..4dcd78563 100644 --- a/regress/sys/netinet/frag/frag_permute.py +++ b/regress/sys/netinet/frag/frag_permute.py @@ -63,3 +63,5 @@ for p in permute: else: print("NO ECHO REPLY") exit(2) +print("permutation done") +exit(0) diff --git a/regress/sys/netinet/frag/frag_queuelimit.py b/regress/sys/netinet/frag/frag_queuelimit.py index 0e89a1ae7..436cee57a 100644 --- a/regress/sys/netinet/frag/frag_queuelimit.py +++ b/regress/sys/netinet/frag/frag_queuelimit.py @@ -68,4 +68,5 @@ for a in ans: if not reply: print("NO ECHO REPLY FROM 64 FRAGMENTS") exit(1) +print("echo reply from 64 fragments") exit(0) diff --git a/regress/sys/netinet6/frag6/Makefile b/regress/sys/netinet6/frag6/Makefile index 338fc9cc4..8d1436c4f 100644 --- a/regress/sys/netinet6/frag6/Makefile +++ b/regress/sys/netinet6/frag6/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.28 2020/12/30 21:40:33 kn Exp $ +# $OpenBSD: Makefile,v 1.29 2023/09/08 21:15:02 bluhm Exp $ # The following ports must be installed: # @@ -91,6 +91,10 @@ run-stack-frag6_queuelimit.py: # the stack does not limit the amount of fragments during reassembly @echo DISABLED +run-stack-frag6_doubleatomic.py: addr.py stamp-stack + # IPv6 stack accepts double atomic fragement, this is not a big issue + set +e; ${SUDO} ${PYTHON}frag6_doubleatomic.py; [[ $$? == 1 ]] + .for sp in stack pf # Ping all addresses. This ensures that the ip addresses are configured diff --git a/regress/sys/netinet6/frag6/frag6_doubleatomic.py b/regress/sys/netinet6/frag6/frag6_doubleatomic.py new file mode 100644 index 000000000..dcffc55cd --- /dev/null +++ b/regress/sys/netinet6/frag6/frag6_doubleatomic.py @@ -0,0 +1,49 @@ +#!/usr/local/bin/python3 + +print("ping6 fragments with two consecutive atomic fragment header") + +# |-IPv6-|-Frag-|-Frag-|-ICMP6-|-payload-| + +import os +from addr import * +from scapy.all import * + +pid=os.getpid() +eid=pid & 0xffff +payload=b"ABCDEFGHIJKLMNOP" +packet=IPv6(src=LOCAL_ADDR6, dst=REMOTE_ADDR6)/ \ + ICMPv6EchoRequest(id=eid, data=payload) +frag=[] +fid=pid & 0xffffffff +frag.append(IPv6ExtHdrFragment(id=fid)/ \ + IPv6ExtHdrFragment(nh=58, id=fid)/bytes(packet)[40:64]) +eth=[] +for f in frag: + pkt=IPv6(src=LOCAL_ADDR6, dst=REMOTE_ADDR6)/f + eth.append(Ether(src=LOCAL_MAC, dst=REMOTE_MAC)/pkt) + +if os.fork() == 0: + time.sleep(1) + sendp(eth, iface=LOCAL_IF) + os._exit(0) + +ans=sniff(iface=LOCAL_IF, timeout=3, filter= + "ip6 and src "+REMOTE_ADDR6+" and dst "+LOCAL_ADDR6+" and icmp6") +for a in ans: + if a and a.type == ETH_P_IPV6 and \ + ipv6nh[a.payload.nh] == 'ICMPv6' and \ + icmp6types[a.payload.payload.type] == 'Echo Reply': + id=a.payload.payload.id + print("id=%#x" % (id)) + if id != eid: + print("WRONG ECHO REPLY ID") + exit(2) + data=a.payload.payload.data + print("payload=%s" % (data)) + if data == payload: + print("double atomic accepted") + exit(1) + print("PAYLOAD!=%s" % (payload)) + exit(2) +print("no echo reply") +exit(0) diff --git a/regress/sys/netinet6/frag6/frag6_permute.py b/regress/sys/netinet6/frag6/frag6_permute.py index 2d3f27250..eb8720303 100644 --- a/regress/sys/netinet6/frag6/frag6_permute.py +++ b/regress/sys/netinet6/frag6/frag6_permute.py @@ -63,3 +63,5 @@ for p in permute: else: print("NO ECHO REPLY") exit(2) +print("permutation done") +exit(0) diff --git a/regress/sys/netinet6/frag6/frag6_queuelimit.py b/regress/sys/netinet6/frag6/frag6_queuelimit.py index 07c69ce2e..9754b08bb 100644 --- a/regress/sys/netinet6/frag6/frag6_queuelimit.py +++ b/regress/sys/netinet6/frag6/frag6_queuelimit.py @@ -68,4 +68,5 @@ for a in ans: if not reply: print("NO ECHO REPLY FROM 64 FRAGMENTS") exit(1) +print("echo reply from 64 fragments") exit(0) diff --git a/share/man/man5/bsd.port.mk.5 b/share/man/man5/bsd.port.mk.5 index b1a0adac2..feb74a4e5 100644 --- a/share/man/man5/bsd.port.mk.5 +++ b/share/man/man5/bsd.port.mk.5 @@ -1,4 +1,4 @@ -.\" $OpenBSD: bsd.port.mk.5,v 1.621 2023/09/07 23:32:56 espie Exp $ +.\" $OpenBSD: bsd.port.mk.5,v 1.626 2023/09/09 14:15:42 bentley Exp $ .\" .\" Copyright (c) 2000-2008 Marc Espie .\" @@ -24,7 +24,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: September 7 2023 $ +.Dd $Mdocdate: September 9 2023 $ .Dt BSD.PORT.MK 5 .Os .Sh NAME @@ -2643,13 +2643,6 @@ Don't touch unless the default target needs to be redefined. Ideally, user-defined patch subtargets ought to test checkpatch. In practice, they don't. -.It Ev PATCH_DEBUG -If set to -.Sq Yes , -the -.Cm patch -stage will output extra debug information. -This is the default. .It Ev PATCH_DIST_ARGS Full list of options used while applying distribution patches. .It Ev PATCH_DIST_STRIP @@ -3613,10 +3606,28 @@ and not intended to be a user setting. See .Ev WRKOBJDIR_MFS for configuration. +.It Ev USE_NOBTCFI +If set to +.Sq Yes , +writes a wrapper script to +.Pa ${WRKDIR}/bin/ld +in +.Cm patch +to request that the linker adds a +.Dv PT_OPENBSD_NOBTCFI +ELF section. +Use when a port does not work with the default strict enforcement of +indirect branch targets. +.Pp +Applies to all architectures; set +.Ev USE_NOBTCFI-${MACHINE_ARCH} +to apply to only a specific architecture. .It Ev USE_NOEXECONLY If set to .Sq Yes , -writes a wrapper script to ${WRKDIR}/bin/ld in +writes a wrapper script to +.Pa ${WRKDIR}/bin/ld +in .Cm patch adding .Fl -no-execute-only . @@ -3625,9 +3636,11 @@ which are used by default by the linker on some architectures. .It Ev USE_WXNEEDED If set to .Sq Yes , -writes a wrapper script to ${WRKDIR}/bin/ld in +writes a wrapper script to +.Pa ${WRKDIR}/bin/ld +in .Cm patch -to request that the linker adds an +to request that the linker adds a .Dv PT_OPENBSD_WXNEEDED ELF section. Use when a port requires memory mappings that are both executable @@ -3700,10 +3713,6 @@ During ports building, .Pa ${WRKDIR}/bin is put at the front of the .Ev PATH . -.It Ev WRKDIR_LINKNAME -Name of a symbolic link to create within the port directory which will -point to the port's ${WRKDIR}. -Deprecated. .It Ev WRKDIST Subdirectory of ${WRKDIR} in which the distribution files normally unpack. Base for all patches. @@ -4536,8 +4545,10 @@ specifications. All file sets of the base OS, including xenocara, must be installed before building ports. .It "Fatal: /usr/local/lib/X11/app-defaults should exist and be a symlink" -/usr/local/lib/X11/app-defaults is distributed as a symlink in the -xshare*.tgz file set. +.Pa /usr/local/lib/X11/app-defaults +is distributed as a symlink in the +.Pa xshare*.tgz +file set. If xenocara was not fully installed before packages were added, it may have been created as a directory instead. .It "Fatal: the licensing info for is incomplete..." diff --git a/sys/arch/amd64/amd64/machdep.c b/sys/arch/amd64/amd64/machdep.c index 8c5f398b8..606630a9f 100644 --- a/sys/arch/amd64/amd64/machdep.c +++ b/sys/arch/amd64/amd64/machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: machdep.c,v 1.287 2023/08/23 01:55:45 cheloha Exp $ */ +/* $OpenBSD: machdep.c,v 1.288 2023/09/08 20:47:22 kn Exp $ */ /* $NetBSD: machdep.c,v 1.3 2003/05/07 22:58:18 fvdl Exp $ */ /*- @@ -2005,62 +2005,33 @@ getbootinfo(char *bootinfo, int bootinfo_size) case BOOTARG_PCIINFO: /* generated by i386 boot loader */ break; - case BOOTARG_CONSDEV: - if (q->ba_size > sizeof(bios_oconsdev_t) + - offsetof(struct _boot_args32, ba_arg)) { + case BOOTARG_CONSDEV: { #if NCOM > 0 - bios_consdev_t *cdp = - (bios_consdev_t*)q->ba_arg; - static const int ports[] = - { 0x3f8, 0x2f8, 0x3e8, 0x2e8 }; - int unit = minor(cdp->consdev); - uint64_t consaddr = cdp->consaddr; - if (consaddr == -1 && unit >= 0 && - unit < nitems(ports)) - consaddr = ports[unit]; - if (major(cdp->consdev) == 8 && - consaddr != -1) { - comconsunit = unit; - comconsaddr = consaddr; - comconsrate = cdp->conspeed; - comconsfreq = cdp->consfreq; - comcons_reg_width = cdp->reg_width; - comcons_reg_shift = cdp->reg_shift; - if (cdp->flags & BCD_MMIO) - comconsiot = X86_BUS_SPACE_MEM; - else - comconsiot = X86_BUS_SPACE_IO; - } -#endif -#ifdef BOOTINFO_DEBUG - printf(" console 0x%x:%d", - cdp->consdev, cdp->conspeed); -#endif - } else { -#if NCOM > 0 - bios_oconsdev_t *cdp = - (bios_oconsdev_t*)q->ba_arg; - static const int ports[] = - { 0x3f8, 0x2f8, 0x3e8, 0x2e8 }; - int unit = minor(cdp->consdev); - int consaddr = cdp->consaddr; - if (consaddr == -1 && unit >= 0 && - unit < nitems(ports)) - consaddr = ports[unit]; - if (major(cdp->consdev) == 8 && - consaddr != -1) { - comconsunit = unit; - comconsaddr = consaddr; - comconsrate = cdp->conspeed; + bios_consdev_t *cdp = (bios_consdev_t*)q->ba_arg; + static const int ports[] = + { 0x3f8, 0x2f8, 0x3e8, 0x2e8 }; + int unit = minor(cdp->consdev); + uint64_t consaddr = cdp->consaddr; + if (consaddr == -1 && unit >= 0 && unit < nitems(ports)) + consaddr = ports[unit]; + if (major(cdp->consdev) == 8 && consaddr != -1) { + comconsunit = unit; + comconsaddr = consaddr; + comconsrate = cdp->conspeed; + comconsfreq = cdp->consfreq; + comcons_reg_width = cdp->reg_width; + comcons_reg_shift = cdp->reg_shift; + if (cdp->flags & BCD_MMIO) + comconsiot = X86_BUS_SPACE_MEM; + else comconsiot = X86_BUS_SPACE_IO; - } + } #endif #ifdef BOOTINFO_DEBUG - printf(" console 0x%x:%d", - cdp->consdev, cdp->conspeed); + printf(" console 0x%x:%d", cdp->consdev, cdp->conspeed); #endif - } break; + } case BOOTARG_BOOTMAC: bios_bootmac = (bios_bootmac_t *)q->ba_arg; break; diff --git a/sys/arch/amd64/include/biosvar.h b/sys/arch/amd64/include/biosvar.h index 2d5b88f42..b0c71ea03 100644 --- a/sys/arch/amd64/include/biosvar.h +++ b/sys/arch/amd64/include/biosvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: biosvar.h,v 1.31 2023/01/18 23:25:32 jsg Exp $ */ +/* $OpenBSD: biosvar.h,v 1.32 2023/09/08 20:47:22 kn Exp $ */ /* * Copyright (c) 1997-1999 Michael Shalayeff @@ -172,14 +172,6 @@ typedef struct _bios_consdev { int reg_shift; } __packed bios_consdev_t; -/* Old interface; remove after OpenBSD 7.3 is released */ -typedef struct _bios_oconsdev { - dev_t consdev; - int conspeed; - int consaddr; - int consfreq; -} __packed bios_oconsdev_t; - #define BOOTARG_BOOTMAC 7 typedef struct _bios_bootmac { char mac[6]; diff --git a/sys/dev/hotplug.c b/sys/dev/hotplug.c index d3c80abaf..ea62c9e97 100644 --- a/sys/dev/hotplug.c +++ b/sys/dev/hotplug.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hotplug.c,v 1.22 2022/07/02 08:50:41 visa Exp $ */ +/* $OpenBSD: hotplug.c,v 1.23 2023/09/08 20:00:27 mvs Exp $ */ /* * Copyright (c) 2004 Alexander Yurchenko * @@ -25,6 +25,7 @@ #include #include #include +#include #include #define HOTPLUG_MAXEVENTS 64 diff --git a/sys/dev/usb/if_ure.c b/sys/dev/usb/if_ure.c index 0c8bacef2..e26fb5802 100644 --- a/sys/dev/usb/if_ure.c +++ b/sys/dev/usb/if_ure.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_ure.c,v 1.32 2023/05/06 08:07:10 kevlo Exp $ */ +/* $OpenBSD: if_ure.c,v 1.33 2023/09/09 14:23:37 kevlo Exp $ */ /*- * Copyright (c) 2015, 2016, 2019 Kevin Lo * Copyright (c) 2020 Jonathon Fletcher @@ -126,7 +126,6 @@ const struct usb_devno ure_devs[] = { { USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_EU300 }, { USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8152B_1 }, { USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8152B_2 }, - { USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8153 }, { USB_VENDOR_TRENDNET, USB_PRODUCT_TRENDNET_RTL8156 }, { USB_VENDOR_TTL, USB_PRODUCT_TTL_RTL8153 }, { USB_VENDOR_TWINHEAD, USB_PRODUCT_TWINHEAD_RTL8153B }, diff --git a/sys/dev/usb/usbdevs b/sys/dev/usb/usbdevs index f7b9f3426..f260a9219 100644 --- a/sys/dev/usb/usbdevs +++ b/sys/dev/usb/usbdevs @@ -1,4 +1,4 @@ -$OpenBSD: usbdevs,v 1.758 2023/08/12 20:43:49 miod Exp $ +$OpenBSD: usbdevs,v 1.759 2023/09/09 14:23:37 kevlo Exp $ /* $NetBSD: usbdevs,v 1.322 2003/05/10 17:47:14 hamajima Exp $ */ /* @@ -4478,7 +4478,7 @@ product TPLINK RTL8188EUS 0x010c RTL8188EUS product TPLINK EU300 0x0601 EU300 product TPLINK RTL8152B_1 0x0602 RTL8152B product TPLINK RTL8152B_2 0x0603 RTL8152B -product TPLINK RTL8153 0x0604 RTL8153 +product TPLINK UB500 0x0604 UB500 /* Trek Technology products */ product TREK THUMBDRIVE 0x1111 ThumbDrive diff --git a/sys/dev/usb/usbdevs.h b/sys/dev/usb/usbdevs.h index 9c5bede6b..45c49770b 100644 --- a/sys/dev/usb/usbdevs.h +++ b/sys/dev/usb/usbdevs.h @@ -1,10 +1,10 @@ -/* $OpenBSD: usbdevs.h,v 1.770 2023/08/12 20:44:32 miod Exp $ */ +/* $OpenBSD: usbdevs.h,v 1.771 2023/09/09 14:24:06 kevlo Exp $ */ /* * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. * * generated from: - * OpenBSD: usbdevs,v 1.758 2023/08/12 20:43:49 miod Exp + * OpenBSD: usbdevs,v 1.759 2023/09/09 14:23:37 kevlo Exp */ /* $NetBSD: usbdevs,v 1.322 2003/05/10 17:47:14 hamajima Exp $ */ @@ -4485,7 +4485,7 @@ #define USB_PRODUCT_TPLINK_EU300 0x0601 /* EU300 */ #define USB_PRODUCT_TPLINK_RTL8152B_1 0x0602 /* RTL8152B */ #define USB_PRODUCT_TPLINK_RTL8152B_2 0x0603 /* RTL8152B */ -#define USB_PRODUCT_TPLINK_RTL8153 0x0604 /* RTL8153 */ +#define USB_PRODUCT_TPLINK_UB500 0x0604 /* UB500 */ /* Trek Technology products */ #define USB_PRODUCT_TREK_THUMBDRIVE 0x1111 /* ThumbDrive */ diff --git a/sys/dev/usb/usbdevs_data.h b/sys/dev/usb/usbdevs_data.h index 56b1cfd43..06674dfd9 100644 --- a/sys/dev/usb/usbdevs_data.h +++ b/sys/dev/usb/usbdevs_data.h @@ -1,10 +1,10 @@ -/* $OpenBSD: usbdevs_data.h,v 1.764 2023/08/12 20:44:32 miod Exp $ */ +/* $OpenBSD: usbdevs_data.h,v 1.765 2023/09/09 14:24:06 kevlo Exp $ */ /* * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. * * generated from: - * OpenBSD: usbdevs,v 1.758 2023/08/12 20:43:49 miod Exp + * OpenBSD: usbdevs,v 1.759 2023/09/09 14:23:37 kevlo Exp */ /* $NetBSD: usbdevs,v 1.322 2003/05/10 17:47:14 hamajima Exp $ */ @@ -11538,8 +11538,8 @@ const struct usb_known_product usb_known_products[] = { "RTL8152B", }, { - USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8153, - "RTL8153", + USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_UB500, + "UB500", }, { USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE, diff --git a/sys/dev/wscons/wseventvar.h b/sys/dev/wscons/wseventvar.h index fc1cc7da2..29ef66b27 100644 --- a/sys/dev/wscons/wseventvar.h +++ b/sys/dev/wscons/wseventvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: wseventvar.h,v 1.11 2022/07/02 08:50:42 visa Exp $ */ +/* $OpenBSD: wseventvar.h,v 1.12 2023/09/08 20:00:28 mvs Exp $ */ /* $NetBSD: wseventvar.h,v 1.1 1998/03/22 14:24:03 drochner Exp $ */ /* @@ -71,6 +71,7 @@ * @(#)event_var.h 8.1 (Berkeley) 6/11/93 */ +#include #include /* diff --git a/sys/isofs/cd9660/cd9660_vnops.c b/sys/isofs/cd9660/cd9660_vnops.c index 2a801b065..2fd4d1cd0 100644 --- a/sys/isofs/cd9660/cd9660_vnops.c +++ b/sys/isofs/cd9660/cd9660_vnops.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cd9660_vnops.c,v 1.94 2023/03/08 04:43:08 guenther Exp $ */ +/* $OpenBSD: cd9660_vnops.c,v 1.95 2023/09/08 20:00:28 mvs Exp $ */ /* $NetBSD: cd9660_vnops.c,v 1.42 1997/10/16 23:56:57 christos Exp $ */ /*- @@ -961,7 +961,7 @@ cd9660_kqfilter(void *v) kn->kn_hook = (caddr_t)vp; - klist_insert_locked(&vp->v_selectinfo.si_note, kn); + klist_insert_locked(&vp->v_klist, kn); return (0); } @@ -971,7 +971,7 @@ filt_cd9660detach(struct knote *kn) { struct vnode *vp = (struct vnode *)kn->kn_hook; - klist_remove_locked(&vp->v_selectinfo.si_note, kn); + klist_remove_locked(&vp->v_klist, kn); } int diff --git a/sys/kern/kern_clockintr.c b/sys/kern/kern_clockintr.c index 70abd291f..d219f05c2 100644 --- a/sys/kern/kern_clockintr.c +++ b/sys/kern/kern_clockintr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_clockintr.c,v 1.38 2023/09/06 02:33:18 cheloha Exp $ */ +/* $OpenBSD: kern_clockintr.c,v 1.43 2023/09/09 16:34:39 cheloha Exp $ */ /* * Copyright (c) 2003 Dale Rahn * Copyright (c) 2020 Mark Kettenis @@ -43,7 +43,6 @@ uint32_t statclock_min; /* [I] minimum statclock period (ns) */ uint32_t statclock_mask; /* [I] set of allowed offsets */ uint64_t clockintr_advance_random(struct clockintr *, uint64_t, uint32_t); -void clockintr_cancel_locked(struct clockintr *); void clockintr_hardclock(struct clockintr *, void *); void clockintr_schedule(struct clockintr *, uint64_t); void clockintr_schedule_locked(struct clockintr *, uint64_t); @@ -51,6 +50,9 @@ void clockintr_statclock(struct clockintr *, void *); void clockqueue_intrclock_install(struct clockintr_queue *, const struct intrclock *); uint64_t clockqueue_next(const struct clockintr_queue *); +void clockqueue_pend_delete(struct clockintr_queue *, struct clockintr *); +void clockqueue_pend_insert(struct clockintr_queue *, struct clockintr *, + uint64_t); void clockqueue_reset_intrclock(struct clockintr_queue *); uint64_t nsec_advance(uint64_t *, uint64_t, uint64_t); @@ -255,12 +257,13 @@ clockintr_dispatch(void *frame) if (cq->cq_uptime < cl->cl_expiration) break; } - clockintr_cancel_locked(cl); + clockqueue_pend_delete(cq, cl); cq->cq_shadow.cl_expiration = cl->cl_expiration; + cq->cq_shadow.cl_func = cl->cl_func; cq->cq_running = cl; mtx_leave(&cq->cq_mtx); - cl->cl_func(&cq->cq_shadow, frame); + cq->cq_shadow.cl_func(&cq->cq_shadow, frame); mtx_enter(&cq->cq_mtx); cq->cq_running = NULL; @@ -270,7 +273,7 @@ clockintr_dispatch(void *frame) } if (ISSET(cq->cq_shadow.cl_flags, CLST_SHADOW_PENDING)) { CLR(cq->cq_shadow.cl_flags, CLST_SHADOW_PENDING); - clockintr_schedule_locked(cl, + clockqueue_pend_insert(cq, cl, cq->cq_shadow.cl_expiration); } run++; @@ -329,17 +332,7 @@ clockintr_advance(struct clockintr *cl, uint64_t period) mtx_enter(&cq->cq_mtx); expiration = cl->cl_expiration; count = nsec_advance(&expiration, period, nsecuptime()); - if (ISSET(cl->cl_flags, CLST_PENDING)) - clockintr_cancel_locked(cl); clockintr_schedule_locked(cl, expiration); - if (ISSET(cq->cq_flags, CQ_INTRCLOCK)) { - if (cl == TAILQ_FIRST(&cq->cq_pend)) { - if (cq == &curcpu()->ci_queue) - clockqueue_reset_intrclock(cq); - } - } - if (cl == cq->cq_running) - SET(cl->cl_flags, CLST_IGNORE_SHADOW); mtx_leave(&cq->cq_mtx); return count; } @@ -377,7 +370,7 @@ clockintr_cancel(struct clockintr *cl) mtx_enter(&cq->cq_mtx); if (ISSET(cl->cl_flags, CLST_PENDING)) { was_next = cl == TAILQ_FIRST(&cq->cq_pend); - clockintr_cancel_locked(cl); + clockqueue_pend_delete(cq, cl); if (ISSET(cq->cq_flags, CQ_INTRCLOCK)) { if (was_next && !TAILQ_EMPTY(&cq->cq_pend)) { if (cq == &curcpu()->ci_queue) @@ -390,18 +383,6 @@ clockintr_cancel(struct clockintr *cl) mtx_leave(&cq->cq_mtx); } -void -clockintr_cancel_locked(struct clockintr *cl) -{ - struct clockintr_queue *cq = cl->cl_queue; - - MUTEX_ASSERT_LOCKED(&cq->cq_mtx); - KASSERT(ISSET(cl->cl_flags, CLST_PENDING)); - - TAILQ_REMOVE(&cq->cq_pend, cl, cl_plink); - CLR(cl->cl_flags, CLST_PENDING); -} - struct clockintr * clockintr_establish(struct cpu_info *ci, void (*func)(struct clockintr *, void *)) @@ -433,9 +414,20 @@ clockintr_schedule(struct clockintr *cl, uint64_t expiration) } mtx_enter(&cq->cq_mtx); - if (ISSET(cl->cl_flags, CLST_PENDING)) - clockintr_cancel_locked(cl); clockintr_schedule_locked(cl, expiration); + mtx_leave(&cq->cq_mtx); +} + +void +clockintr_schedule_locked(struct clockintr *cl, uint64_t expiration) +{ + struct clockintr_queue *cq = cl->cl_queue; + + MUTEX_ASSERT_LOCKED(&cq->cq_mtx); + + if (ISSET(cl->cl_flags, CLST_PENDING)) + clockqueue_pend_delete(cq, cl); + clockqueue_pend_insert(cq, cl, expiration); if (ISSET(cq->cq_flags, CQ_INTRCLOCK)) { if (cl == TAILQ_FIRST(&cq->cq_pend)) { if (cq == &curcpu()->ci_queue) @@ -444,28 +436,6 @@ clockintr_schedule(struct clockintr *cl, uint64_t expiration) } if (cl == cq->cq_running) SET(cl->cl_flags, CLST_IGNORE_SHADOW); - mtx_leave(&cq->cq_mtx); -} - -void -clockintr_schedule_locked(struct clockintr *cl, uint64_t expiration) -{ - struct clockintr *elm; - struct clockintr_queue *cq = cl->cl_queue; - - MUTEX_ASSERT_LOCKED(&cq->cq_mtx); - KASSERT(!ISSET(cl->cl_flags, CLST_PENDING)); - - cl->cl_expiration = expiration; - TAILQ_FOREACH(elm, &cq->cq_pend, cl_plink) { - if (cl->cl_expiration < elm->cl_expiration) - break; - } - if (elm == NULL) - TAILQ_INSERT_TAIL(&cq->cq_pend, cl, cl_plink); - else - TAILQ_INSERT_BEFORE(elm, cl, cl_plink); - SET(cl->cl_flags, CLST_PENDING); } void @@ -541,6 +511,38 @@ clockqueue_next(const struct clockintr_queue *cq) return TAILQ_FIRST(&cq->cq_pend)->cl_expiration; } +void +clockqueue_pend_delete(struct clockintr_queue *cq, struct clockintr *cl) +{ + MUTEX_ASSERT_LOCKED(&cq->cq_mtx); + KASSERT(ISSET(cl->cl_flags, CLST_PENDING)); + + TAILQ_REMOVE(&cq->cq_pend, cl, cl_plink); + CLR(cl->cl_flags, CLST_PENDING); +} + + +void +clockqueue_pend_insert(struct clockintr_queue *cq, struct clockintr *cl, + uint64_t expiration) +{ + struct clockintr *elm; + + MUTEX_ASSERT_LOCKED(&cq->cq_mtx); + KASSERT(!ISSET(cl->cl_flags, CLST_PENDING)); + + cl->cl_expiration = expiration; + TAILQ_FOREACH(elm, &cq->cq_pend, cl_plink) { + if (cl->cl_expiration < elm->cl_expiration) + break; + } + if (elm == NULL) + TAILQ_INSERT_TAIL(&cq->cq_pend, cl, cl_plink); + else + TAILQ_INSERT_BEFORE(elm, cl, cl_plink); + SET(cl->cl_flags, CLST_PENDING); +} + void clockqueue_reset_intrclock(struct clockintr_queue *cq) { diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index b48ca292c..eed76a00b 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_sig.c,v 1.315 2023/09/08 09:06:31 claudio Exp $ */ +/* $OpenBSD: kern_sig.c,v 1.316 2023/09/09 14:50:09 claudio Exp $ */ /* $NetBSD: kern_sig.c,v 1.54 1996/04/22 01:38:32 christos Exp $ */ /* @@ -2109,12 +2109,14 @@ single_thread_set(struct proc *p, enum single_thread_mode mode, int wait) TAILQ_FOREACH(q, &pr->ps_threads, p_thr_link) { if (q == p) continue; - SCHED_LOCK(s); if (q->p_flag & P_WEXIT) { + SCHED_LOCK(s); if (mode == SINGLE_EXIT && q->p_stat == SSTOP) setrunnable(q); + SCHED_UNLOCK(s); continue; } + SCHED_LOCK(s); atomic_setbits_int(&q->p_flag, P_SUSPSINGLE); switch (q->p_stat) { case SIDL: diff --git a/sys/miscfs/fuse/fuse_device.c b/sys/miscfs/fuse/fuse_device.c index eaa6ad0c1..cd6c627b1 100644 --- a/sys/miscfs/fuse/fuse_device.c +++ b/sys/miscfs/fuse/fuse_device.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fuse_device.c,v 1.38 2022/08/29 06:08:04 jsg Exp $ */ +/* $OpenBSD: fuse_device.c,v 1.39 2023/09/08 20:00:28 mvs Exp $ */ /* * Copyright (c) 2012-2013 Sylvestre Gallon * @@ -25,6 +25,7 @@ #include #include #include +#include #include "fusefs_node.h" #include "fusefs.h" diff --git a/sys/miscfs/fuse/fuse_vnops.c b/sys/miscfs/fuse/fuse_vnops.c index c68b7b38e..c68e4427f 100644 --- a/sys/miscfs/fuse/fuse_vnops.c +++ b/sys/miscfs/fuse/fuse_vnops.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fuse_vnops.c,v 1.66 2022/06/26 05:20:42 visa Exp $ */ +/* $OpenBSD: fuse_vnops.c,v 1.67 2023/09/08 20:00:28 mvs Exp $ */ /* * Copyright (c) 2012-2013 Sylvestre Gallon * @@ -154,7 +154,7 @@ fusefs_kqfilter(void *v) kn->kn_hook = (caddr_t)vp; - klist_insert_locked(&vp->v_selectinfo.si_note, kn); + klist_insert_locked(&vp->v_klist, kn); return (0); } @@ -164,7 +164,7 @@ filt_fusefsdetach(struct knote *kn) { struct vnode *vp = (struct vnode *)kn->kn_hook; - klist_remove_locked(&vp->v_selectinfo.si_note, kn); + klist_remove_locked(&vp->v_klist, kn); } int diff --git a/sys/msdosfs/msdosfs_vnops.c b/sys/msdosfs/msdosfs_vnops.c index 5be8a2051..12d22a95c 100644 --- a/sys/msdosfs/msdosfs_vnops.c +++ b/sys/msdosfs/msdosfs_vnops.c @@ -1,4 +1,4 @@ -/* $OpenBSD: msdosfs_vnops.c,v 1.139 2022/08/23 20:37:16 cheloha Exp $ */ +/* $OpenBSD: msdosfs_vnops.c,v 1.140 2023/09/08 20:00:28 mvs Exp $ */ /* $NetBSD: msdosfs_vnops.c,v 1.63 1997/10/17 11:24:19 ws Exp $ */ /*- @@ -1970,7 +1970,7 @@ msdosfs_kqfilter(void *v) kn->kn_hook = (caddr_t)vp; - klist_insert_locked(&vp->v_selectinfo.si_note, kn); + klist_insert_locked(&vp->v_klist, kn); return (0); } @@ -1980,7 +1980,7 @@ filt_msdosfsdetach(struct knote *kn) { struct vnode *vp = (struct vnode *)kn->kn_hook; - klist_remove_locked(&vp->v_selectinfo.si_note, kn); + klist_remove_locked(&vp->v_klist, kn); } int diff --git a/sys/nfs/nfs_kq.c b/sys/nfs/nfs_kq.c index 3f5fc4291..7e5d3c743 100644 --- a/sys/nfs/nfs_kq.c +++ b/sys/nfs/nfs_kq.c @@ -1,4 +1,4 @@ -/* $OpenBSD: nfs_kq.c,v 1.35 2023/03/08 04:43:09 guenther Exp $ */ +/* $OpenBSD: nfs_kq.c,v 1.36 2023/09/08 20:00:28 mvs Exp $ */ /* $NetBSD: nfs_kq.c,v 1.7 2003/10/30 01:43:10 simonb Exp $ */ /*- @@ -185,7 +185,7 @@ filt_nfsdetach(struct knote *kn) { struct vnode *vp = (struct vnode *)kn->kn_hook; - klist_remove_locked(&vp->v_selectinfo.si_note, kn); + klist_remove_locked(&vp->v_klist, kn); /* Remove the vnode from watch list */ if ((kn->kn_flags & (__EV_POLL | __EV_SELECT)) == 0) @@ -342,7 +342,7 @@ nfs_kqfilter(void *v) return (error); } - klist_insert_locked(&vp->v_selectinfo.si_note, kn); + klist_insert_locked(&vp->v_klist, kn); return (0); } diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h index 30787afdd..994ceb623 100644 --- a/sys/sys/vnode.h +++ b/sys/sys/vnode.h @@ -1,4 +1,4 @@ -/* $OpenBSD: vnode.h,v 1.168 2023/02/10 14:34:17 visa Exp $ */ +/* $OpenBSD: vnode.h,v 1.169 2023/09/08 20:00:28 mvs Exp $ */ /* $NetBSD: vnode.h,v 1.38 1996/02/29 20:59:05 cgd Exp $ */ /* @@ -37,8 +37,8 @@ #include #include +#include #include -#include #include /* @@ -127,7 +127,7 @@ struct vnode { TAILQ_HEAD(, namecache) v_cache_dst; /* cache entries to us */ void *v_data; /* private data for fs */ - struct selinfo v_selectinfo; /* identity of poller(s) */ + struct klist v_klist; /* identity of poller(s) */ }; #define v_mountedhere v_un.vu_mountedhere #define v_socket v_un.vu_socket @@ -246,7 +246,7 @@ extern int vttoif_tab[]; #define VATTR_NULL(vap) vattr_null(vap) #define NULLVP ((struct vnode *)NULL) #define VN_KNOTE(vp, b) \ - knote_locked(&vp->v_selectinfo.si_note, (b)) + knote_locked(&vp->v_klist, (b)) /* * Global vnode data. diff --git a/sys/tmpfs/tmpfs_vnops.c b/sys/tmpfs/tmpfs_vnops.c index bc1390d72..d910b1523 100644 --- a/sys/tmpfs/tmpfs_vnops.c +++ b/sys/tmpfs/tmpfs_vnops.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tmpfs_vnops.c,v 1.52 2022/06/26 05:20:42 visa Exp $ */ +/* $OpenBSD: tmpfs_vnops.c,v 1.53 2023/09/08 20:00:28 mvs Exp $ */ /* $NetBSD: tmpfs_vnops.c,v 1.100 2012/11/05 17:27:39 dholland Exp $ */ /* @@ -2627,7 +2627,7 @@ tmpfs_kqfilter(void *v) kn->kn_hook = (caddr_t)vp; - klist_insert_locked(&vp->v_selectinfo.si_note, kn); + klist_insert_locked(&vp->v_klist, kn); return (0); } @@ -2637,7 +2637,7 @@ filt_tmpfsdetach(struct knote *kn) { struct vnode *vp = (struct vnode *)kn->kn_hook; - klist_remove_locked(&vp->v_selectinfo.si_note, kn); + klist_remove_locked(&vp->v_klist, kn); } int diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c index edd637fc5..d266ae893 100644 --- a/sys/ufs/ufs/ufs_vnops.c +++ b/sys/ufs/ufs/ufs_vnops.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ufs_vnops.c,v 1.157 2023/03/08 04:43:09 guenther Exp $ */ +/* $OpenBSD: ufs_vnops.c,v 1.158 2023/09/08 20:00:28 mvs Exp $ */ /* $NetBSD: ufs_vnops.c,v 1.18 1996/05/11 18:28:04 mycroft Exp $ */ /* @@ -1921,7 +1921,7 @@ ufs_kqfilter(void *v) kn->kn_hook = (caddr_t)vp; - klist_insert_locked(&vp->v_selectinfo.si_note, kn); + klist_insert_locked(&vp->v_klist, kn); return (0); } @@ -1931,7 +1931,7 @@ filt_ufsdetach(struct knote *kn) { struct vnode *vp = (struct vnode *)kn->kn_hook; - klist_remove_locked(&vp->v_selectinfo.si_note, kn); + klist_remove_locked(&vp->v_klist, kn); } int