From 614315d09f96e556fc8ea222f33f5b9077819205 Mon Sep 17 00:00:00 2001 From: purplerain Date: Fri, 24 Jan 2025 00:53:19 +0000 Subject: [PATCH] sync with OpenBSD -current --- regress/usr.sbin/btrace/Makefile | 5 +- regress/usr.sbin/btrace/interval.bt | 8 +++ regress/usr.sbin/btrace/interval.ok | 3 + regress/usr.sbin/syslogd/Makefile | 8 ++- .../syslogd/args-client-tls-myhost.pl | 31 +++++++++ sys/arch/amd64/include/pci_machdep.h | 4 +- sys/arch/amd64/pci/pci_machdep.c | 4 +- sys/arch/arm64/dev/acpipci.c | 9 +-- sys/arch/arm64/include/pci_machdep.h | 4 +- sys/arch/i386/pci/pci_machdep.c | 4 +- sys/arch/i386/pci/pci_machdep.h | 4 +- sys/dev/acpi/abl.c | 4 +- sys/dev/acpi/acpi.c | 9 +-- sys/dev/acpi/dsdt.c | 11 ++- sys/dev/dt/dt_prov_profile.c | 11 +-- sys/dev/dt/dtvar.h | 5 +- sys/kern/uipc_socket.c | 24 +++---- sys/netinet/ip_divert.c | 9 ++- sys/netinet6/ip6_divert.c | 9 ++- usr.bin/systat/systat.1 | 22 +++--- usr.bin/systat/uvm.c | 44 ++++++------ usr.sbin/btrace/bt_parse.y | 69 ++++++++++++++----- usr.sbin/btrace/bt_parser.h | 6 +- usr.sbin/btrace/btrace.c | 67 +++++++++++------- usr.sbin/iscsid/pdu.c | 13 +++- usr.sbin/syslogd/syslogd.c | 20 +++++- 26 files changed, 269 insertions(+), 138 deletions(-) create mode 100644 regress/usr.sbin/btrace/interval.bt create mode 100644 regress/usr.sbin/btrace/interval.ok create mode 100644 regress/usr.sbin/syslogd/args-client-tls-myhost.pl diff --git a/regress/usr.sbin/btrace/Makefile b/regress/usr.sbin/btrace/Makefile index 9214f221f..6f931ab3e 100644 --- a/regress/usr.sbin/btrace/Makefile +++ b/regress/usr.sbin/btrace/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.33 2024/12/04 09:33:41 mpi Exp $ +# $OpenBSD: Makefile,v 1.34 2025/01/23 11:19:12 mpi Exp $ BTRACE?= /usr/sbin/btrace ALLOWDT!= sysctl -n kern.allowdt 2>/dev/null @@ -14,7 +14,8 @@ BT_LANG_SCRIPTS= arithm beginend beginend-argn boolean comments \ BT_ARG_LANG_SCRIPTS= staticv str # scripts that use kernel probes -BT_KERN_SCRIPTS= argn empty-stmts filters mapoverwrite multiprobe +BT_KERN_SCRIPTS= argn empty-stmts filters interval mapoverwrite \ + multiprobe REGRESS_EXPECTED_FAILURES= run-maxoperand diff --git a/regress/usr.sbin/btrace/interval.bt b/regress/usr.sbin/btrace/interval.bt new file mode 100644 index 000000000..c975d0a31 --- /dev/null +++ b/regress/usr.sbin/btrace/interval.bt @@ -0,0 +1,8 @@ +interval:ms:300 { + @count = @count + 1; + printf("Probe: %d\n", @count); +} + +profile:s:1 { + exit(); +} diff --git a/regress/usr.sbin/btrace/interval.ok b/regress/usr.sbin/btrace/interval.ok new file mode 100644 index 000000000..a2b653b16 --- /dev/null +++ b/regress/usr.sbin/btrace/interval.ok @@ -0,0 +1,3 @@ +Probe: 1 +Probe: 2 +Probe: 3 diff --git a/regress/usr.sbin/syslogd/Makefile b/regress/usr.sbin/syslogd/Makefile index 62e5601c5..c9ee1a4de 100644 --- a/regress/usr.sbin/syslogd/Makefile +++ b/regress/usr.sbin/syslogd/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.36 2023/10/12 16:59:24 anton Exp $ +# $OpenBSD: Makefile,v 1.37 2025/01/23 15:23:28 bluhm Exp $ # The following ports must be installed for the regression tests: # p5-Socket6 Perl defines relating to AF_INET6 sockets @@ -94,7 +94,10 @@ ca.crt fake-ca.crt: client.req server.req: openssl req -batch -new -subj /L=OpenBSD/O=syslogd-regress/OU=${@:R}/CN=localhost/ -nodes -newkey rsa -keyout ${@:R}.key -out $@ -client.crt server.crt: ca.crt ${@:R}.req +myhost-client.req: + openssl req -batch -new -subj /L=OpenBSD/O=syslogd-regress/OU=${@:R}/CN=myhost/ -nodes -newkey rsa -keyout ${@:R}.key -out $@ + +client.crt server.crt myhost-client.crt: ca.crt ${@:R}.req openssl x509 -CAcreateserial -CAkey ca.key -CA ca.crt -req -in ${@:R}.req -out $@ empty: @@ -141,6 +144,7 @@ ${REGRESS_TARGETS:M*multilisten*}: 127.0.0.1.crt ${REGRESS_TARGETS:M*empty*}: empty ${REGRESS_TARGETS:M*toobig*}: toobig ${REGRESS_TARGETS:M*fake*}: fake-ca.crt +${REGRESS_TARGETS:M*myhost*}: myhost-client.crt ${REGRESS_TARGETS:M*sendsyslog*}: sys/syscall.ph ${REGRESS_TARGETS}: ttylog logflush diff --git a/regress/usr.sbin/syslogd/args-client-tls-myhost.pl b/regress/usr.sbin/syslogd/args-client-tls-myhost.pl new file mode 100644 index 000000000..b197db7e7 --- /dev/null +++ b/regress/usr.sbin/syslogd/args-client-tls-myhost.pl @@ -0,0 +1,31 @@ +# The syslogd listens on localhost TLS socket with client verification. +# The client connects with a client certificate and writes a message. +# The syslogd writes it into a file and through a pipe. +# The syslogd passes it via UDP to the loghost. +# The server receives the message on its UDP socket. +# Find the message in client, file, pipe, syslogd, server log. +# Check that the syslogd switches name to common name in certificate. + +use strict; +use warnings; +use Socket; + +our %args = ( + client => { + connect => { domain => AF_INET, proto => "tls", addr => "127.0.0.1", + port => 6514 }, + sslcert => "myhost-client.crt", + sslkey => "myhost-client.key", + }, + syslogd => { + options => ["-S", "127.0.0.1", "-K", "ca.crt"], + }, + file => { + loggrep => [ + qr/localhost using hostname "myhost" from certificate/, + qr/ myhost syslogd regress test log message/, + ], + }, +); + +1; diff --git a/sys/arch/amd64/include/pci_machdep.h b/sys/arch/amd64/include/pci_machdep.h index 9abd854f9..f46ca2199 100644 --- a/sys/arch/amd64/include/pci_machdep.h +++ b/sys/arch/amd64/include/pci_machdep.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pci_machdep.h,v 1.31 2024/01/19 18:38:16 kettenis Exp $ */ +/* $OpenBSD: pci_machdep.h,v 1.32 2025/01/23 11:24:34 kettenis Exp $ */ /* $NetBSD: pci_machdep.h,v 1.1 2003/02/26 21:26:11 fvdl Exp $ */ /* @@ -103,7 +103,7 @@ pcireg_t pci_min_powerstate(pci_chipset_tag_t, pcitag_t); void pci_set_powerstate_md(pci_chipset_tag_t, pcitag_t, int, int); void pci_mcfg_init(bus_space_tag_t, bus_addr_t, int, int, int); -pci_chipset_tag_t pci_lookup_segment(int); +pci_chipset_tag_t pci_lookup_segment(int, int); #define __HAVE_PCI_MSIX diff --git a/sys/arch/amd64/pci/pci_machdep.c b/sys/arch/amd64/pci/pci_machdep.c index 30257ab7d..d29e73a43 100644 --- a/sys/arch/amd64/pci/pci_machdep.c +++ b/sys/arch/amd64/pci/pci_machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pci_machdep.c,v 1.80 2024/05/13 10:01:53 kettenis Exp $ */ +/* $OpenBSD: pci_machdep.c,v 1.81 2025/01/23 11:24:34 kettenis Exp $ */ /* $NetBSD: pci_machdep.c,v 1.3 2003/05/07 21:33:58 fvdl Exp $ */ /*- @@ -160,7 +160,7 @@ pci_mcfg_init(bus_space_tag_t iot, bus_addr_t addr, int segment, } pci_chipset_tag_t -pci_lookup_segment(int segment) +pci_lookup_segment(int segment, int bus) { KASSERT(segment == 0); return NULL; diff --git a/sys/arch/arm64/dev/acpipci.c b/sys/arch/arm64/dev/acpipci.c index cf6246e58..b6a8c393f 100644 --- a/sys/arch/arm64/dev/acpipci.c +++ b/sys/arch/arm64/dev/acpipci.c @@ -1,4 +1,4 @@ -/* $OpenBSD: acpipci.c,v 1.42 2024/02/03 10:37:25 kettenis Exp $ */ +/* $OpenBSD: acpipci.c,v 1.43 2025/01/23 11:24:34 kettenis Exp $ */ /* * Copyright (c) 2018 Mark Kettenis * @@ -199,7 +199,7 @@ acpipci_attach(struct device *parent, struct device *self, void *aux) } sc->sc_msi_ic = ic; - sc->sc_pc = pci_lookup_segment(seg); + sc->sc_pc = pci_lookup_segment(sc->sc_seg, sc->sc_bus); KASSERT(sc->sc_pc->pc_intr_v == NULL); sc->sc_pc->pc_probe_device_hook = acpipci_probe_device_hook; @@ -784,12 +784,13 @@ struct machine_pci_chipset acpipci_dummy_chipset = { }; pci_chipset_tag_t -pci_lookup_segment(int segment) +pci_lookup_segment(int segment, int bus) { struct acpipci_mcfg *am; SLIST_FOREACH(am, &acpipci_mcfgs, am_list) { - if (am->am_segment == segment) + if (segment == am->am_segment && + bus >= am->am_min_bus && bus <= am->am_max_bus) return &am->am_pc; } diff --git a/sys/arch/arm64/include/pci_machdep.h b/sys/arch/arm64/include/pci_machdep.h index a2ccd3b09..2e9d1b552 100644 --- a/sys/arch/arm64/include/pci_machdep.h +++ b/sys/arch/arm64/include/pci_machdep.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pci_machdep.h,v 1.12 2024/02/03 10:37:26 kettenis Exp $ */ +/* $OpenBSD: pci_machdep.h,v 1.13 2025/01/23 11:24:34 kettenis Exp $ */ /* * Copyright (c) 2003-2004 Opsycon AB (www.opsycon.se / www.opsycon.com) @@ -125,7 +125,7 @@ struct machine_pci_chipset { #define pci_dev_postattach(a, b) void pci_mcfg_init(bus_space_tag_t, bus_addr_t, int, int, int); -pci_chipset_tag_t pci_lookup_segment(int); +pci_chipset_tag_t pci_lookup_segment(int, int); int pci_intr_enable_msivec(struct pci_attach_args *, int); diff --git a/sys/arch/i386/pci/pci_machdep.c b/sys/arch/i386/pci/pci_machdep.c index ada3ba282..cf3ee3787 100644 --- a/sys/arch/i386/pci/pci_machdep.c +++ b/sys/arch/i386/pci/pci_machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pci_machdep.c,v 1.88 2024/10/10 06:00:42 jsg Exp $ */ +/* $OpenBSD: pci_machdep.c,v 1.89 2025/01/23 11:24:34 kettenis Exp $ */ /* $NetBSD: pci_machdep.c,v 1.28 1997/06/06 23:29:17 thorpej Exp $ */ /*- @@ -204,7 +204,7 @@ pci_mcfg_init(bus_space_tag_t iot, bus_addr_t addr, int segment, } pci_chipset_tag_t -pci_lookup_segment(int segment) +pci_lookup_segment(int segment, int bus) { KASSERT(segment == 0); return NULL; diff --git a/sys/arch/i386/pci/pci_machdep.h b/sys/arch/i386/pci/pci_machdep.h index fc2285392..53d0095ee 100644 --- a/sys/arch/i386/pci/pci_machdep.h +++ b/sys/arch/i386/pci/pci_machdep.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pci_machdep.h,v 1.32 2020/06/17 06:17:19 dlg Exp $ */ +/* $OpenBSD: pci_machdep.h,v 1.33 2025/01/23 11:24:34 kettenis Exp $ */ /* $NetBSD: pci_machdep.h,v 1.7 1997/06/06 23:29:18 thorpej Exp $ */ /* @@ -114,7 +114,7 @@ pcireg_t pci_min_powerstate(pci_chipset_tag_t, pcitag_t); void pci_set_powerstate_md(pci_chipset_tag_t, pcitag_t, int, int); void pci_mcfg_init(bus_space_tag_t, bus_addr_t, int, int, int); -pci_chipset_tag_t pci_lookup_segment(int); +pci_chipset_tag_t pci_lookup_segment(int, int); static inline int pci_intr_map_msix(struct pci_attach_args *pa, int vec, pci_intr_handle_t *ihp) diff --git a/sys/dev/acpi/abl.c b/sys/dev/acpi/abl.c index 13b644d7f..87cee09de 100644 --- a/sys/dev/acpi/abl.c +++ b/sys/dev/acpi/abl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: abl.c,v 1.5 2022/04/06 18:59:27 naddy Exp $ */ +/* $OpenBSD: abl.c,v 1.6 2025/01/23 11:24:34 kettenis Exp $ */ /* * Copyright (c) 2020 Marcus Glocker @@ -126,7 +126,7 @@ abl_attach(struct device *parent, struct device *self, void *aux) * We need to check on what type of PCI controller we're running on to * access the right I/O space. */ - pc = pci_lookup_segment(0); + pc = pci_lookup_segment(0, 0); tag = pci_make_tag(pc, 0, 0, 0); reg = pci_conf_read(pc, tag, PCI_ID_REG); diff --git a/sys/dev/acpi/acpi.c b/sys/dev/acpi/acpi.c index 46b09fcf1..7b3784a75 100644 --- a/sys/dev/acpi/acpi.c +++ b/sys/dev/acpi/acpi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: acpi.c,v 1.439 2024/09/04 21:39:18 hastings Exp $ */ +/* $OpenBSD: acpi.c,v 1.440 2025/01/23 11:24:34 kettenis Exp $ */ /* * Copyright (c) 2005 Thorsten Lockert * Copyright (c) 2005 Jordan Hargrave @@ -324,7 +324,8 @@ acpi_gasio(struct acpi_softc *sc, int iodir, int iospace, uint64_t address, return (0); } - pc = pci_lookup_segment(ACPI_PCI_SEG(address)); + pc = pci_lookup_segment(ACPI_PCI_SEG(address), + ACPI_PCI_BUS(address)); tag = pci_make_tag(pc, ACPI_PCI_BUS(address), ACPI_PCI_DEV(address), ACPI_PCI_FN(address)); @@ -642,7 +643,7 @@ acpi_getpci(struct aml_node *node, void *arg) free(pci, M_DEVBUF, sizeof(*pci)); return (1); } - pc = pci_lookup_segment(pci->seg); + pc = pci_lookup_segment(pci->seg, pci->bus); tag = pci_make_tag(pc, pci->bus, pci->dev, pci->fun); reg = pci_conf_read(pc, tag, PCI_ID_REG); if (PCI_VENDOR(reg) == PCI_VENDOR_INVALID) { @@ -839,7 +840,7 @@ acpi_pci_notify(struct aml_node *node, int ntype, void *arg) if (ntype != 2) return (0); - pc = pci_lookup_segment(pdev->seg); + pc = pci_lookup_segment(pdev->seg, pdev->bus); tag = pci_make_tag(pc, pdev->bus, pdev->dev, pdev->fun); if (pci_get_capability(pc, tag, PCI_CAP_PWRMGMT, &offset, 0)) { /* Clear the PME Status bit if it is set. */ diff --git a/sys/dev/acpi/dsdt.c b/sys/dev/acpi/dsdt.c index 11264a286..5cb596302 100644 --- a/sys/dev/acpi/dsdt.c +++ b/sys/dev/acpi/dsdt.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dsdt.c,v 1.272 2024/12/24 12:06:34 mglocker Exp $ */ +/* $OpenBSD: dsdt.c,v 1.273 2025/01/23 13:40:26 kettenis Exp $ */ /* * Copyright (c) 2005 Jordan Hargrave * @@ -2574,7 +2574,16 @@ aml_rwgsb(struct aml_value *conn, int len, int bpos, int blen, buflen = len; break; case 0x0e: /* AttribRawBytes */ + cmdlen = 0; + buflen = len; + break; case 0x0f: /* AttribRawProcessBytes */ + /* + * XXX Not implemented yet but used by various + * WoA laptops. Force an error status instead + * of a panic for now. + */ + node = NULL; cmdlen = 0; buflen = len; break; diff --git a/sys/dev/dt/dt_prov_profile.c b/sys/dev/dt/dt_prov_profile.c index 394cda9cd..545a20153 100644 --- a/sys/dev/dt/dt_prov_profile.c +++ b/sys/dev/dt/dt_prov_profile.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dt_prov_profile.c,v 1.9 2024/11/26 10:28:27 mpi Exp $ */ +/* $OpenBSD: dt_prov_profile.c,v 1.10 2025/01/23 11:17:32 mpi Exp $ */ /* * Copyright (c) 2019 Martin Pieuchot @@ -67,16 +67,17 @@ int dt_prov_profile_alloc(struct dt_probe *dtp, struct dt_softc *sc, struct dt_pcb_list *plist, struct dtioc_req *dtrq) { + uint64_t nsecs; struct dt_pcb *dp; struct cpu_info *ci; CPU_INFO_ITERATOR cii; - extern int hz; KASSERT(TAILQ_EMPTY(plist)); KASSERT(dtp == dtpp_profile || dtp == dtpp_interval); - if (dtrq->dtrq_rate <= 0 || dtrq->dtrq_rate > hz) - return EOPNOTSUPP; + nsecs = dtrq->dtrq_nsecs; + if (nsecs < USEC_TO_NSEC(200) || nsecs > SEC_TO_NSEC(UINT32_MAX)) + return EINVAL; CPU_INFO_FOREACH(cii, ci) { if (!CPU_IS_PRIMARY(ci) && (dtp == dtpp_interval)) @@ -88,7 +89,7 @@ dt_prov_profile_alloc(struct dt_probe *dtp, struct dt_softc *sc, return ENOMEM; } - dp->dp_nsecs = SEC_TO_NSEC(1) / dtrq->dtrq_rate; + dp->dp_nsecs = nsecs; dp->dp_cpu = ci; dp->dp_evtflags = dtrq->dtrq_evtflags & DTEVT_PROV_PROFILE; diff --git a/sys/dev/dt/dtvar.h b/sys/dev/dt/dtvar.h index 1ca135d5e..abe4ecf86 100644 --- a/sys/dev/dt/dtvar.h +++ b/sys/dev/dt/dtvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: dtvar.h,v 1.21 2024/11/26 10:28:27 mpi Exp $ */ +/* $OpenBSD: dtvar.h,v 1.22 2025/01/23 11:17:32 mpi Exp $ */ /* * Copyright (c) 2019 Martin Pieuchot @@ -109,8 +109,9 @@ struct dtioc_arg { struct dtioc_req { uint32_t dtrq_pbn; /* probe number */ - uint32_t dtrq_rate; /* number of ticks */ + uint32_t __unused1; uint64_t dtrq_evtflags; /* states to record */ + uint64_t dtrq_nsecs; /* execution period */ }; struct dtioc_stat { diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index ee92f4f2d..ba0c61f1e 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uipc_socket.c,v 1.363 2025/01/22 15:05:49 mvs Exp $ */ +/* $OpenBSD: uipc_socket.c,v 1.364 2025/01/23 10:44:13 bluhm Exp $ */ /* $NetBSD: uipc_socket.c,v 1.21 1996/02/04 02:17:52 christos Exp $ */ /* @@ -1754,17 +1754,6 @@ somove(struct socket *so, int wait) m->m_pkthdr.len = len; } - /* Send window update to source peer as receive buffer has changed. */ - if (so->so_proto->pr_flags & PR_WANTRCVD) { - mtx_leave(&sosp->so_snd.sb_mtx); - mtx_leave(&so->so_rcv.sb_mtx); - solock_shared(so); - pru_rcvd(so); - sounlock_shared(so); - mtx_enter(&so->so_rcv.sb_mtx); - mtx_enter(&sosp->so_snd.sb_mtx); - } - /* Receive buffer did shrink by len bytes, adjust oob. */ rcvstate = so->so_rcv.sb_state; so->so_rcv.sb_state &= ~SS_RCVATMARK; @@ -1777,6 +1766,17 @@ somove(struct socket *so, int wait) oobmark = 0; } + /* Send window update to source peer as receive buffer has changed. */ + if (so->so_proto->pr_flags & PR_WANTRCVD) { + mtx_leave(&sosp->so_snd.sb_mtx); + mtx_leave(&so->so_rcv.sb_mtx); + solock_shared(so); + pru_rcvd(so); + sounlock_shared(so); + mtx_enter(&so->so_rcv.sb_mtx); + mtx_enter(&sosp->so_snd.sb_mtx); + } + /* * Handle oob data. If any malloc fails, ignore error. * TCP urgent data is not very reliable anyway. diff --git a/sys/netinet/ip_divert.c b/sys/netinet/ip_divert.c index 5d732afd7..d0f234c07 100644 --- a/sys/netinet/ip_divert.c +++ b/sys/netinet/ip_divert.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ip_divert.c,v 1.98 2025/01/01 13:44:22 bluhm Exp $ */ +/* $OpenBSD: ip_divert.c,v 1.99 2025/01/23 12:51:51 bluhm Exp $ */ /* * Copyright (c) 2009 Michele Marchetto @@ -272,14 +272,13 @@ divert_attach(struct socket *so, int proto, int wait) if ((so->so_state & SS_PRIV) == 0) return EACCES; - error = in_pcballoc(so, &divbtable, wait); - if (error) - return error; - error = soreserve(so, atomic_load_int(&divert_sendspace), atomic_load_int(&divert_recvspace)); if (error) return error; + error = in_pcballoc(so, &divbtable, wait); + if (error) + return error; sotoinpcb(so)->inp_flags |= INP_HDRINCL; return (0); diff --git a/sys/netinet6/ip6_divert.c b/sys/netinet6/ip6_divert.c index dc815d5f8..02069ced3 100644 --- a/sys/netinet6/ip6_divert.c +++ b/sys/netinet6/ip6_divert.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ip6_divert.c,v 1.97 2024/08/16 09:20:35 mvs Exp $ */ +/* $OpenBSD: ip6_divert.c,v 1.98 2025/01/23 12:51:51 bluhm Exp $ */ /* * Copyright (c) 2009 Michele Marchetto @@ -280,14 +280,13 @@ divert6_attach(struct socket *so, int proto, int wait) if ((so->so_state & SS_PRIV) == 0) return EACCES; - error = in_pcballoc(so, &divb6table, wait); - if (error) - return (error); - error = soreserve(so, atomic_load_int(&divert6_sendspace), atomic_load_int(&divert6_recvspace)); if (error) return (error); + error = in_pcballoc(so, &divb6table, wait); + if (error) + return (error); return (0); } diff --git a/usr.bin/systat/systat.1 b/usr.bin/systat/systat.1 index c1d12994a..aec0041f7 100644 --- a/usr.bin/systat/systat.1 +++ b/usr.bin/systat/systat.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: systat.1,v 1.123 2024/09/25 06:13:01 jmc Exp $ +.\" $OpenBSD: systat.1,v 1.124 2025/01/23 11:05:26 mpi Exp $ .\" $NetBSD: systat.1,v 1.6 1996/05/10 23:16:39 thorpej Exp $ .\" .\" Copyright (c) 1985, 1990, 1993 @@ -30,7 +30,7 @@ .\" .\" @(#)systat.1 8.2 (Berkeley) 12/30/93 .\" -.Dd $Mdocdate: September 25 2024 $ +.Dd $Mdocdate: January 23 2025 $ .Dt SYSTAT 1 .Os .Sh NAME @@ -687,18 +687,12 @@ target number of free pages target number of inactive pages .It wiredmax maximum number of wired pages -.It anonmin -minimum threshold for anon pages -.It vtextmin -minimum threshold for vtext pages -.It vnodemin -minimum threshold for vnode pages -.It anonminpct -minimum percent anon pages -.It vtextminpct -minimum percent vtext pages -.It vnodeminpct -minimum percent vnode pages +.Pp +.It Per-CPU Counters: +.It pcphit +pages allocated from a per-CPU cache since boot +.It pcpmiss +times a per-CPU cache was empty when allocating a page .Pp .It Swap Counters: .It nswapdev diff --git a/usr.bin/systat/uvm.c b/usr.bin/systat/uvm.c index 401623f52..4c8c85ce7 100644 --- a/usr.bin/systat/uvm.c +++ b/usr.bin/systat/uvm.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uvm.c,v 1.10 2024/05/18 09:02:34 jsg Exp $ */ +/* $OpenBSD: uvm.c,v 1.11 2025/01/23 11:05:26 mpi Exp $ */ /* * Copyright (c) 2008 Can Erkin Acar * Copyright (c) 2018 Kenneth R Westerback @@ -103,51 +103,51 @@ struct uvmline uvmline[] = { { &uvmexp.wiredmax, &last_uvmexp.wiredmax, "wiredmax", NULL, NULL, NULL, &uvmexp.flt_anon, &last_uvmexp.flt_anon, "flt_anon" }, - { &uvmexp.anonmin, &last_uvmexp.anonmin, "anonmin", - NULL, NULL, "Daemon Counters", + { NULL, NULL, NULL, + NULL, NULL, NULL, &uvmexp.flt_acow, &last_uvmexp.flt_acow, "flt_acow" }, - { &uvmexp.vtextmin, &last_uvmexp.vtextmin, "vtextmin", - &uvmexp.pdwoke, &last_uvmexp.pdwoke, "pdwoke", + { NULL, NULL, NULL, + NULL, NULL, "Daemon Counters", &uvmexp.flt_obj, &last_uvmexp.flt_obj, "flt_obj" }, - { &uvmexp.vnodemin, &last_uvmexp.vnodemin, "vnodemin", - &uvmexp.pdrevs, &last_uvmexp.pdrevs, "pdrevs", + { NULL, NULL, "Per-CPU Counters", + &uvmexp.pdwoke, &last_uvmexp.pdwoke, "pdwoke", &uvmexp.flt_prcopy, &last_uvmexp.flt_prcopy, "flt_prcopy" }, - { &uvmexp.anonminpct, &last_uvmexp.anonminpct, "anonminpct", - &uvmexp.pdswout, &last_uvmexp.pdswout, "pdswout", + { &uvmexp.pcphit, &last_uvmexp.pcphit, "pcphit", + &uvmexp.pdrevs, &last_uvmexp.pdrevs, "pdrevs", &uvmexp.flt_przero, &last_uvmexp.flt_przero, "flt_przero" }, - { &uvmexp.vtextminpct, &last_uvmexp.vtextminpct, "vtextminpct", - &uvmexp.swpgonly, &last_uvmexp.swpgonly, "swpgonly", + { &uvmexp.pcpmiss, &last_uvmexp.pcpmiss, "pcpmiss", + &uvmexp.pdswout, &last_uvmexp.pdswout, "pdswout", NULL, NULL, NULL }, - { &uvmexp.vnodeminpct, &last_uvmexp.vnodeminpct, "vnodeminpct", + { NULL, NULL, NULL, &uvmexp.pdfreed, &last_uvmexp.pdfreed, "pdfreed", - NULL, NULL, "Swap Counters" }, + NULL, NULL, NULL }, { NULL, NULL, NULL, &uvmexp.pdscans, &last_uvmexp.pdscans, "pdscans", - &uvmexp.nswapdev, &last_uvmexp.nswapdev, "nswapdev" }, + NULL, NULL, NULL }, { NULL, NULL, "Misc Counters", &uvmexp.pdanscan, &last_uvmexp.pdanscan, "pdanscan", - &uvmexp.swpages, &last_uvmexp.swpages, "swpages" }, + NULL, NULL, NULL }, { &uvmexp.fpswtch, &last_uvmexp.fpswtch, "fpswtch", &uvmexp.pdobscan, &last_uvmexp.pdobscan, "pdobscan", - &uvmexp.swpginuse, &last_uvmexp.swpginuse, "swpginuse" }, + NULL, NULL, NULL }, { &uvmexp.kmapent, &last_uvmexp.kmapent, "kmapent", &uvmexp.pdreact, &last_uvmexp.pdreact, "pdreact", - &uvmexp.swpgonly, &last_uvmexp.swpgonly, "swpgonly" }, + NULL, NULL, "Swap Counters" }, { NULL, NULL, NULL, &uvmexp.pdbusy, &last_uvmexp.pdbusy, "pdbusy", - &uvmexp.nswget, &last_uvmexp.nswget, "nswget" }, + &uvmexp.nswapdev, &last_uvmexp.nswapdev, "nswapdev" }, { NULL, NULL, "Constants", &uvmexp.pdpageouts, &last_uvmexp.pdpageouts, "pdpageouts", - NULL, NULL, NULL }, + &uvmexp.swpages, &last_uvmexp.swpages, "swpages" }, { &uvmexp.pagesize, &last_uvmexp.pagesize, "pagesize", &uvmexp.pdpending, &last_uvmexp.pdpending, "pdpending", - NULL, NULL, "Per-CPU Counters" }, + &uvmexp.swpginuse, &last_uvmexp.swpginuse, "swpginuse" }, { &uvmexp.pagemask, &last_uvmexp.pagemask, "pagemask", &uvmexp.pddeact, &last_uvmexp.pddeact, "pddeact", - &uvmexp.pcphit, &last_uvmexp.pcphit, "pcphit" }, + &uvmexp.swpgonly, &last_uvmexp.swpgonly, "swpgonly" }, { &uvmexp.pageshift, &last_uvmexp.pageshift, "pageshift", NULL, NULL, NULL, - &uvmexp.pcpmiss, &last_uvmexp.pcpmiss, "pcpmiss" } + &uvmexp.nswget, &last_uvmexp.nswget, "nswget" } }; field_def fields_uvm[] = { diff --git a/usr.sbin/btrace/bt_parse.y b/usr.sbin/btrace/bt_parse.y index 6e23b7bcd..8d534756f 100644 --- a/usr.sbin/btrace/bt_parse.y +++ b/usr.sbin/btrace/bt_parse.y @@ -1,4 +1,4 @@ -/* $OpenBSD: bt_parse.y,v 1.61 2024/11/07 09:20:09 mpi Exp $ */ +/* $OpenBSD: bt_parse.y,v 1.62 2025/01/23 11:17:32 mpi Exp $ */ /* * Copyright (c) 2019-2023 Martin Pieuchot @@ -62,7 +62,7 @@ struct bt_arg g_maxba = BA_INITIALIZER(LONG_MAX, B_AT_LONG); struct bt_rule *br_new(struct bt_probe *, struct bt_filter *, struct bt_stmt *); -struct bt_probe *bp_new(const char *, const char *, const char *, int32_t); +struct bt_probe *bp_new(const char *, const char *, const char *, long); struct bt_arg *ba_append(struct bt_arg *, struct bt_arg *); struct bt_arg *ba_op(enum bt_argtype, struct bt_arg *, struct bt_arg *); struct bt_stmt *bs_new(enum bt_action, struct bt_arg *, struct bt_var *); @@ -119,7 +119,7 @@ static int beflag = 0; /* BEGIN/END parsing context flag */ %token ERROR ENDFILT %token OP_EQ OP_NE OP_LE OP_LT OP_GE OP_GT OP_LAND OP_LOR /* Builtins */ -%token BUILTIN BEGIN ELSE END HZ IF STR +%token BUILTIN BEGIN ELSE END IF STR /* Functions and Map operators */ %token F_DELETE F_PRINT %token MFUNC FUNC0 FUNC1 FUNCN OP1 OP2 OP4 MOP0 MOP1 @@ -155,7 +155,7 @@ probe : { pflag = 1; } pname { $$ = $2; pflag = 0; } ; pname : STRING ':' STRING ':' STRING { $$ = bp_new($1, $3, $5, 0); } - | STRING ':' HZ ':' NUMBER { $$ = bp_new($1, "hz", NULL, $5); } + | STRING ':' STRING ':' NUMBER { $$ = bp_new($1, $3, NULL, $5); } ; mentry : GVAR '[' vargs ']' { $$ = bm_find($1, $3); } @@ -358,18 +358,55 @@ bt_new(struct bt_arg *ba, struct bt_stmt *condbs, struct bt_stmt *elsebs) return bs_new(B_AC_TEST, bop, (struct bt_var *)bc); } +/* + * interval and profile support the same units. + */ +static uint64_t +bp_unit_to_nsec(const char *unit, long value) +{ + static const struct { + const char *name; + enum { UNIT_HZ, UNIT_US, UNIT_MS, UNIT_S } id; + long long max; + } units[] = { + { .name = "hz", .id = UNIT_HZ, .max = 1000000LL }, + { .name = "us", .id = UNIT_US, .max = LLONG_MAX / 1000 }, + { .name = "ms", .id = UNIT_MS, .max = LLONG_MAX / 1000000 }, + { .name = "s", .id = UNIT_S, .max = LLONG_MAX / 1000000000 }, + }; + size_t i; + + for (i = 0; i < nitems(units); i++) { + if (strcmp(units[i].name, unit) == 0) { + if (value < 1) + yyerror("Number is invalid: %ld", value); + if (value > units[i].max) + yyerror("Number is too large: %ld", value); + switch (units[i].id) { + case UNIT_HZ: + return (1000000000LLU / value); + case UNIT_US: + return (value * 1000LLU); + case UNIT_MS: + return (value * 1000000LLU); + case UNIT_S: + return (value * 1000000000LLU); + } + } + } + yyerror("Invalid unit: %s", unit); + return 0; +} + /* Create a new probe */ struct bt_probe * -bp_new(const char *prov, const char *func, const char *name, int32_t rate) +bp_new(const char *prov, const char *func, const char *name, long number) { struct bt_probe *bp; enum bt_ptype ptype; - if (rate < 0 || rate > INT32_MAX) - errx(1, "only positive values permitted"); - if (prov == NULL && func == NULL && name == NULL) - ptype = rate; /* BEGIN or END */ + ptype = number; /* BEGIN or END */ else ptype = B_PT_PROBE; @@ -379,7 +416,8 @@ bp_new(const char *prov, const char *func, const char *name, int32_t rate) bp->bp_prov = prov; bp->bp_func = func; bp->bp_name = name; - bp->bp_rate = rate; + if (ptype == B_PT_PROBE && name == NULL) + bp->bp_nsecs = bp_unit_to_nsec(func, number); bp->bp_type = ptype; return bp; @@ -726,7 +764,6 @@ lookup(char *s) { "else", ELSE, 0 }, { "exit", FUNC0, B_AC_EXIT }, { "hist", OP1, 0 }, - { "hz", HZ, 0 }, { "if", IF, 0 }, { "kstack", BUILTIN, B_AT_BI_KSTACK }, { "lhist", OP4, 0 }, @@ -1077,14 +1114,10 @@ again: /* * Probe lexer backdoor, interpret the token as a string * rather than a keyword. Otherwise, reserved keywords - * would conflict with syscall names. The exception to - * this is 'hz', which hopefully will never be a - * syscall. + * would conflict with syscall names. */ - if (kwp->token != HZ) { - yylval.v.string = kwp->word; - return STRING; - } + yylval.v.string = kwp->word; + return STRING; } else if (beflag) { /* Interpret tokens in a BEGIN/END context. */ if (kwp->type >= B_AT_BI_ARG0 && diff --git a/usr.sbin/btrace/bt_parser.h b/usr.sbin/btrace/bt_parser.h index 081c0045c..5ec6f1e0f 100644 --- a/usr.sbin/btrace/bt_parser.h +++ b/usr.sbin/btrace/bt_parser.h @@ -1,4 +1,4 @@ -/* $OpenBSD: bt_parser.h,v 1.26 2024/03/30 07:41:45 mpi Exp $ */ +/* $OpenBSD: bt_parser.h,v 1.27 2025/01/23 11:17:32 mpi Exp $ */ /* * Copyright (c) 2019-2021 Martin Pieuchot @@ -31,7 +31,7 @@ * * "provider:function:name" * or - * "provider:time_unit:rate" + * "provider:time_unit:number" * * Multiple probes can be associated to the same action. */ @@ -40,7 +40,7 @@ struct bt_probe { const char *bp_prov; /* provider */ const char *bp_func; /* function or time unit */ const char *bp_name; - uint32_t bp_rate; + uint64_t bp_nsecs; #define bp_unit bp_func enum bt_ptype { B_PT_BEGIN = 1, diff --git a/usr.sbin/btrace/btrace.c b/usr.sbin/btrace/btrace.c index 7c2e3dcdc..930f1f879 100644 --- a/usr.sbin/btrace/btrace.c +++ b/usr.sbin/btrace/btrace.c @@ -1,4 +1,4 @@ -/* $OpenBSD: btrace.c,v 1.94 2024/12/04 09:33:41 mpi Exp $ */ +/* $OpenBSD: btrace.c,v 1.95 2025/01/23 11:17:32 mpi Exp $ */ /* * Copyright (c) 2019 - 2023 Martin Pieuchot @@ -363,12 +363,6 @@ dtpi_func(struct dtioc_probe_info *dtpi) return syscallnames[idx]; } -int -dtpi_is_unit(const char *unit) -{ - return !strncmp("hz", unit, sizeof("hz")); -} - struct dtioc_probe_info * dtpi_get_by_value(const char *prov, const char *func, const char *name) { @@ -377,20 +371,16 @@ dtpi_get_by_value(const char *prov, const char *func, const char *name) dtpi = dt_dtpis; for (i = 0; i < dt_ndtpi; i++, dtpi++) { - if (prov != NULL && - strncmp(prov, dtpi->dtpi_prov, DTNAMESIZE)) - continue; - - if (func != NULL) { - if (dtpi_is_unit(func)) - return dtpi; - - if (strncmp(func, dtpi_func(dtpi), DTNAMESIZE)) + if (prov != NULL) { + if (strncmp(prov, dtpi->dtpi_prov, DTNAMESIZE)) + continue; + } + if (func != NULL && name != NULL) { + if (strncmp(func, dtpi_func(dtpi), DTNAMESIZE)) + continue; + if (strncmp(name, dtpi->dtpi_name, DTNAMESIZE)) continue; } - - if (strncmp(name, dtpi->dtpi_name, DTNAMESIZE)) - continue; debug("matched probe %s:%s:%s\n", dtpi->dtpi_prov, dtpi_func(dtpi), dtpi->dtpi_name); @@ -400,6 +390,37 @@ dtpi_get_by_value(const char *prov, const char *func, const char *name) return NULL; } +static uint64_t +bp_nsecs_to_unit(struct bt_probe *bp) +{ + static const struct { + const char *name; + enum { UNIT_HZ, UNIT_US, UNIT_MS, UNIT_S } id; + } units[] = { + { .name = "hz", .id = UNIT_HZ }, + { .name = "us", .id = UNIT_US }, + { .name = "ms", .id = UNIT_MS }, + { .name = "s", .id = UNIT_S }, + }; + size_t i; + + for (i = 0; i < nitems(units); i++) { + if (strcmp(units[i].name, bp->bp_unit) == 0) { + switch (units[i].id) { + case UNIT_HZ: + return (1000000000LLU / bp->bp_nsecs); + case UNIT_US: + return (bp->bp_nsecs / 1000LLU); + case UNIT_MS: + return (bp->bp_nsecs / 1000000LLU); + case UNIT_S: + return (bp->bp_nsecs / 1000000000LLU); + } + } + } + return 0; +} + void probe_bail(struct bt_probe *bp) { @@ -420,9 +441,9 @@ probe_name(struct bt_probe *bp) assert(bp->bp_type == B_PT_PROBE); - if (bp->bp_rate) { - snprintf(buf, sizeof(buf), "%s:%s:%u", bp->bp_prov, - bp->bp_unit, bp->bp_rate); + if (bp->bp_nsecs) { + snprintf(buf, sizeof(buf), "%s:%s:%llu", bp->bp_prov, + bp->bp_unit, bp_nsecs_to_unit(bp)); } else { snprintf(buf, sizeof(buf), "%s:%s:%s", bp->bp_prov, bp->bp_unit, bp->bp_name); @@ -582,7 +603,7 @@ rules_setup(int fd) bp->bp_pbn = dtpi->dtpi_pbn; dtrq->dtrq_pbn = dtpi->dtpi_pbn; - dtrq->dtrq_rate = bp->bp_rate; + dtrq->dtrq_nsecs = bp->bp_nsecs; dtrq->dtrq_evtflags = evtflags; if (dtrq->dtrq_evtflags & DTEVT_KSTACK) dokstack = 1; diff --git a/usr.sbin/iscsid/pdu.c b/usr.sbin/iscsid/pdu.c index 7358a89be..91588a996 100644 --- a/usr.sbin/iscsid/pdu.c +++ b/usr.sbin/iscsid/pdu.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pdu.c,v 1.14 2025/01/22 10:14:54 claudio Exp $ */ +/* $OpenBSD: pdu.c,v 1.15 2025/01/23 12:17:48 claudio Exp $ */ /* * Copyright (c) 2009 Claudio Jeker @@ -191,14 +191,19 @@ text_to_num(const char *numstr, u_int64_t minval, u_int64_t maxval, int text_to_bool(const char *buf, const char **errstrp) { - int val = 0; + int val; if (strcmp(buf, "Yes") == 0) val = 1; - else if (strcmp(buf, "No") != 0) { + else if (strcmp(buf, "No") == 0) + val = 0; + else { if (errstrp != NULL) *errstrp = "invalid"; + return 0; } + if (errstrp != NULL) + *errstrp = NULL; return val; } @@ -227,6 +232,8 @@ text_to_digest(const char *buf, const char **errstrp) } buf = p; } + if (errstrp != NULL) + *errstrp = NULL; return val; } diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c index 722dc3287..c7d6e1435 100644 --- a/usr.sbin/syslogd/syslogd.c +++ b/usr.sbin/syslogd/syslogd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: syslogd.c,v 1.283 2024/11/07 10:12:18 bluhm Exp $ */ +/* $OpenBSD: syslogd.c,v 1.284 2025/01/23 12:27:42 henning Exp $ */ /* * Copyright (c) 2014-2021 Alexander Bluhm @@ -1214,9 +1214,27 @@ void tls_handshakecb(struct bufferevent *bufev, void *arg) { struct peer *p = arg; + const char *cn; + char *cntmp; log_debug("Completed tls handshake"); + if (tls_peer_cert_provided(p->p_ctx)) { + if ((cn = tls_peer_cert_common_name(p->p_ctx)) != NULL && + strlen(cn) > 0) { + if (stravis(&cntmp, cn, VIS_WHITE) == -1) + log_warn("tls_handshakecb stravis"); + else { + log_info(LOG_INFO, "%s using hostname \"%s\" " + "from certificate", p->p_hostname, cntmp); + free(p->p_hostname); + p->p_hostname = cntmp; + } + } else + log_info(LOG_NOTICE, + "cannot get hostname from peer certificate"); + } + bufferevent_setcb(bufev, tcp_readcb, NULL, tcp_closecb, p); }