diff options
42 files changed, 914 insertions, 617 deletions
diff --git a/bin/sh/tests/builtins/read11.0 b/bin/sh/tests/builtins/read11.0 index c75ed9c92a83..5bae80318b15 100644 --- a/bin/sh/tests/builtins/read11.0 +++ b/bin/sh/tests/builtins/read11.0 @@ -5,8 +5,8 @@ T=$(mktemp -d ${TMPDIR:-/tmp}/sh-test.XXXXXX) trap 'rm -rf "$T"' 0 cd $T mkfifo fifo1 -# Open fifo1 for writing and then read block on a dummy fifo -{ mkfifo fifo2; read dummy <fifo2; } >fifo1 & +# Open fifo1 for writing +{ sleep 10; } >fifo1 & # Wait for the child to open fifo1 for writing exec 3<fifo1 v=original_value diff --git a/cddl/contrib/opensolaris/cmd/dtrace/dtrace.1 b/cddl/contrib/opensolaris/cmd/dtrace/dtrace.1 index 456a9e319987..1a9f8029e6de 100644 --- a/cddl/contrib/opensolaris/cmd/dtrace/dtrace.1 +++ b/cddl/contrib/opensolaris/cmd/dtrace/dtrace.1 @@ -20,7 +20,7 @@ .\" .\" $FreeBSD$ .\" -.Dd November 4, 2025 +.Dd November 6, 2025 .Dt DTRACE 1 .Os .Sh NAME @@ -548,7 +548,7 @@ to disallow the possibility of enabling destructive actions system-wide at any p Any attempts to enable destructive actions will cause .Nm to exit with a runtime error. -.It Fl x Ar arg Op Ns = Ns value +.It Fl x Ar arg Ns Op = Ns Ar value Enable or modify a DTrace runtime option or D compiler option. Boolean options are enabled by specifying their name. Options with values are set by separating the option name and value with an @@ -1299,6 +1299,7 @@ in .Xr dtrace_ip 4 , .Xr dtrace_kinst 4 , .Xr dtrace_lockstat 4 , +.Xr dtrace_pid 4 , .Xr dtrace_proc 4 , .Xr dtrace_profile 4 , .Xr dtrace_sched 4 , diff --git a/etc/mtree/BSD.usr.dist b/etc/mtree/BSD.usr.dist index 54d408865fa5..79db101e74d9 100644 --- a/etc/mtree/BSD.usr.dist +++ b/etc/mtree/BSD.usr.dist @@ -242,8 +242,8 @@ .. legal .. - llvm - clang + llvm tags=package=clang + clang tags=package=clang .. .. ncurses @@ -857,7 +857,7 @@ scrnmaps .. .. - tabset + tabset tags=package=ncurses-lib .. vi catalog diff --git a/etc/termcap/Makefile b/etc/termcap/Makefile index cd5516f3e04b..ea8fab4e839e 100644 --- a/etc/termcap/Makefile +++ b/etc/termcap/Makefile @@ -1,6 +1,8 @@ .PATH: ${SRCTOP}/share/termcap -PACKAGE= runtime +# Note: This is in ncurses-lib rather than ncurses because without it, ncurses +# doesn't work, and the base ncurses package is optional. +PACKAGE= ncurses-lib CLEANFILES+= termcap.small CONFS= termcap.small diff --git a/lib/googletest/Makefile.inc b/lib/googletest/Makefile.inc index 231d7545f364..43ebace19a15 100644 --- a/lib/googletest/Makefile.inc +++ b/lib/googletest/Makefile.inc @@ -1,5 +1,7 @@ .include <googletest.test.inc.mk> +PACKAGE?= googletest + GTEST_DIR= ${SRCTOP}/contrib/googletest GOOGLEMOCK_SRCROOT= ${GTEST_DIR}/googlemock GOOGLETEST_SRCROOT= ${GTEST_DIR}/googletest diff --git a/lib/googletest/tests/Makefile b/lib/googletest/tests/Makefile index 886b1a2fe49d..350e0fe765fe 100644 --- a/lib/googletest/tests/Makefile +++ b/lib/googletest/tests/Makefile @@ -1,4 +1,7 @@ .PATH: ${SRCTOP}/tests + +PACKAGE= tests + KYUAFILE= yes # Note: we start the gmock_main and gmock tests first since those take up to diff --git a/lib/googletest/tests/Makefile.inc b/lib/googletest/tests/Makefile.inc index 9691aaa93ded..8d19e1fafdea 100644 --- a/lib/googletest/tests/Makefile.inc +++ b/lib/googletest/tests/Makefile.inc @@ -3,6 +3,8 @@ # rather than installing all of them to /usr/tests/lib/googletest TESTSDIR= ${TESTSBASE}/lib/googletest/${.CURDIR:T} +PACKAGE= tests + # Clang's optimizer spends a really long time on these tests at -O2. Changing # -O2 to -O1 reduces the -j32 time for lib/googletest/test from 131s to 71s. # Using -O0 further reduces the time to 29s, and also reduces the disk usage diff --git a/lib/libsys/Makefile.sys b/lib/libsys/Makefile.sys index 1d1a4f1136ce..5f149170b974 100644 --- a/lib/libsys/Makefile.sys +++ b/lib/libsys/Makefile.sys @@ -471,7 +471,9 @@ MLINKS+=intro.2 errno.2 MLINKS+=jail.2 jail_attach.2 \ jail.2 jail_get.2 \ jail.2 jail_remove.2 \ - jail.2 jail_set.2 + jail.2 jail_set.2 \ + jail.2 jail_attach_jd.2 \ + jail.2 jail_remove_jd.2 MLINKS+=kldunload.2 kldunloadf.2 MLINKS+=kqueue.2 kevent.2 \ kqueue.2 kqueue1.2 \ diff --git a/lib/ofed/Makefile.inc b/lib/ofed/Makefile.inc index 1b911c451c01..5a16e0015c07 100644 --- a/lib/ofed/Makefile.inc +++ b/lib/ofed/Makefile.inc @@ -1 +1,4 @@ +PACKAGE?= rdma +LIB_PACKAGE= + WARNS?= 0 diff --git a/libexec/makewhatis.local/Makefile b/libexec/makewhatis.local/Makefile index 765036623d49..b541dc8e4de1 100644 --- a/libexec/makewhatis.local/Makefile +++ b/libexec/makewhatis.local/Makefile @@ -1,3 +1,4 @@ +PACKAGE= mandoc SCRIPTS= makewhatis.local.sh MAN= makewhatis.local.8 SCRIPTSDIR= ${LIBEXECDIR} diff --git a/release/packages/ucl/googletest-all.ucl b/release/packages/ucl/googletest-all.ucl new file mode 100644 index 000000000000..889e8a65f314 --- /dev/null +++ b/release/packages/ucl/googletest-all.ucl @@ -0,0 +1,33 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2025 Lexi Winter <ivy@FreeBSD.org> + * + * 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. + */ + +comment = "Unit testing framework" + +desc = <<EOD +Google Test (gtest) is an xUnit-based unit testing framework for C++, +developed by Google LLC. + +This version of Google Test is provided for use by unit tests in the +base system, and is not intended for third-party users. A supported +version of Google Test may be found in the FreeBSD Ports Collection +as devel/googletest. +EOD + +annotations { + set = "optional,optional-jail" +} diff --git a/release/packages/ucl/tests-all.ucl b/release/packages/ucl/tests-all.ucl index 3ad2d0f50e6b..315ac2e8cce0 100644 --- a/release/packages/ucl/tests-all.ucl +++ b/release/packages/ucl/tests-all.ucl @@ -23,24 +23,6 @@ The test suite, installed in /usr/tests, allows the functionality of the installed system to be verified. EOD -deps { - # Nearly all the tests require atf to run. - "atf": { - version = "${VERSION}" - }, - - # The test framework requires Kyua. - "kyua": { - version = "${VERSION}" - }, - - # Since the purpose of the tests is to test the base system, the base - # system must be installed. - "set-base": { - version = "${VERSION}" - } -} - annotations { set = tests } diff --git a/release/packages/ucl/tests.ucl b/release/packages/ucl/tests.ucl index bac72f1534d3..da9eb59295bc 100644 --- a/release/packages/ucl/tests.ucl +++ b/release/packages/ucl/tests.ucl @@ -18,10 +18,29 @@ deps { + # Nearly all the tests require atf to run. + "atf": { + version = "${VERSION}" + }, + # Quite a few tests require flua. "flua" { version = "${VERSION}" }, -} + # Some tests need GoogleTest + "googletest": { + version = "${VERSION}" + }, + # The test framework requires Kyua. + "kyua": { + version = "${VERSION}" + }, + + # Since the purpose of the tests is to test the base system, the base + # system must be installed. + "set-base": { + version = "${VERSION}" + } +} diff --git a/release/tools/vmimage.subr b/release/tools/vmimage.subr index 8531e9b8f2d6..92f00f9cf7c3 100644 --- a/release/tools/vmimage.subr +++ b/release/tools/vmimage.subr @@ -449,7 +449,11 @@ vm_create_disk() { # Create an ESP espfilename=$(mktemp /tmp/efiboot.XXXXXX) make_esp_file ${espfilename} ${fat32min} ${BOOTFILES}/efi/loader_lua/loader_lua.efi - BOOTPARTS="${BOOTPARTS} -p efi/efiboot0:=${espfilename}" + espsuffix="" + if [ -z "${BOOTPARTS}" ]; then + espsuffix="${BOOTPARTSOFFSET}" + fi + BOOTPARTS="${BOOTPARTS} -p efi/efiboot0:=${espfilename}${espsuffix}" # Add this to fstab mkdir -p ${DESTDIR}/boot/efi diff --git a/sbin/dumpon/dumpon.8 b/sbin/dumpon/dumpon.8 index a57dfef7096d..4e4abb8d4b79 100644 --- a/sbin/dumpon/dumpon.8 +++ b/sbin/dumpon/dumpon.8 @@ -25,7 +25,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd April 23, 2020 +.Dd November 6, 2025 .Dt DUMPON 8 .Os .Sh NAME @@ -228,6 +228,20 @@ total amount of physical memory as reported by the .Va hw.physmem .Xr sysctl 8 variable. +.Sh SYSCTL VARIABLES +The following +.Xr sysctl 8 +variables can be used to modify or monitor the behavior of crash dumps: +.Bl -tag -width "machdep.dump_retry_count" +.It Va debug.minidump +Set the type of kernel crash dump. +Possible values are 0 for a full crash dump or 1 for a minidump. +The default is minidump. +.It Va machdep.dump_retry_count +The maximum number of times dump will retry before giving up. +The default value is 5. +This sysctl is only supported on PowerPC and AMD64. +.El .Sh IMPLEMENTATION NOTES Because the file system layer is already dead by the time a crash dump is taken, it is not possible to send crash dumps directly to a file. @@ -339,7 +353,7 @@ when binds to a server, .Xr dhclient-script 8 can be used to run -.Xr dumpon 8 . +.Nm . For example, to automatically configure .Xr netdump 4 on the vtnet0 interface, add the following to @@ -377,6 +391,7 @@ needed. .Xr loader 8 , .Xr rc 8 , .Xr savecore 8 , +.Xr sysctl 8 , .Xr swapon 8 , .Xr panic 9 .Sh HISTORY diff --git a/share/doc/llvm/Makefile b/share/doc/llvm/Makefile index 8fde27acf117..35398786a9cb 100644 --- a/share/doc/llvm/Makefile +++ b/share/doc/llvm/Makefile @@ -1,5 +1,7 @@ SUBDIR= clang +PACKAGE= clang + SRCDIR= ${SRCTOP}/contrib/llvm-project/llvm .PATH: ${SRCDIR} ${SRCDIR}/lib/Support diff --git a/share/doc/llvm/Makefile.inc b/share/doc/llvm/Makefile.inc new file mode 100644 index 000000000000..915410fe46c4 --- /dev/null +++ b/share/doc/llvm/Makefile.inc @@ -0,0 +1 @@ +PACKAGE?= clang diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile index 34edf6ad455d..fe1d285aec96 100644 --- a/share/man/man4/Makefile +++ b/share/man/man4/Makefile @@ -1012,6 +1012,7 @@ _dtrace_provs= dtrace_audit.4 \ dtrace_ip.4 \ dtrace_kinst.4 \ dtrace_lockstat.4 \ + dtrace_pid.4 \ dtrace_proc.4 \ dtrace_profile.4 \ dtrace_sched.4 \ diff --git a/share/man/man4/ciss.4 b/share/man/man4/ciss.4 index 28d6556ecd85..d731aaddad38 100644 --- a/share/man/man4/ciss.4 +++ b/share/man/man4/ciss.4 @@ -1,7 +1,7 @@ .\" Written by Tom Rhodes .\" This file is in the public domain. .\" -.Dd January 26, 2012 +.Dd November 6, 2025 .Dt CISS 4 .Os .Sh NAME @@ -87,9 +87,10 @@ might be solved by updating the firmware and/or setting the .Va hw.ciss.nop_message_heartbeat tunable to non-zero at boot time. .Sh HARDWARE -Controllers supported by the +The .Nm -driver include: +driver supports controllers implementing +Common Interface for SCSI-3 Support Open Specification v1.04, including: .Pp .Bl -bullet -compact .It @@ -145,6 +146,8 @@ HP Smart Array P430i .It HP Smart Array P431 .It +HP Smart Array P440ar +.It HP Smart Array P530 .It HP Smart Array P531 diff --git a/share/man/man4/dtrace_pid.4 b/share/man/man4/dtrace_pid.4 new file mode 100644 index 000000000000..1acbdd097ba8 --- /dev/null +++ b/share/man/man4/dtrace_pid.4 @@ -0,0 +1,99 @@ +.\" +.\" Copyright (c) 2025 Mateusz Piotrowski <0mp@FreeBSD.org> +.\" +.\" SPDX-License-Identifier: BSD-2-Clause +.\" +.Dd November 6, 2025 +.Dt DTRACE_PID 4 +.Os +.Sh NAME +.Nm dtrace_pid +.Nd a DTrace provider for dynamic userspace tracing based on function boundary instrumentation +.Sh SYNOPSIS +.Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&:entry +.\" XXX: For some reason Op renders here in bold, so use literal square +.\" brackets instead. +.Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&: Ns No \&[ Ns Ar offset Ns No \&] +.Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&:return +.Sh DESCRIPTION +The +.Nm pid +provider implements userspace dynamic tracing +by instrumenting the entry and return of functions in userspace programs. +Refer to +.Xr dtrace_fbt 4 +for more details about function boundary instrumentation. +.Pp +The +.Nm pid +provider provides the following probes: +.Bl -inset +.It Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&:entry +instruments the entry of the +.Ar function . +.It Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&: Ns Op Ar offset +instruments the instruction within the +.Ar function +located at +.Ar offset +bytes (expressed as a hexadecimal integer). +.It Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&:return +instruments the return from the +.Ar function . +.El +.Ss Probe Arguments +The arguments of the entry probe +.Pq Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&:entry +are the arguments of the traced function call. +.Bl -column -offset indent "Entry Probe Argument" "Definition" +.It Sy Entry Probe Argument Ta Sy Definition +.It Ft uint64_t Fa arg0 Ta Function's first argument +.It Ft uint64_t Fa arg1 Ta Function's second argument +.It Ft uint64_t Fa arg2 Ta Function's third argument +.It Fa ... Ta ... +.El +.Pp +The offset probes +.Pq Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&: Ns Op Ar offset +do not define any arguments. +Use +.Va uregs[] +to inspect the registers. +.Pp +The arguments of the return probe +.Pq Nm pid Ns Ar PID Ns Cm \&: Ns Ar module Ns Cm \&: Ns Ar function Ns Cm \&:return +are the program counter and the function's return value. +.Bl -column -offset indent "Return Probe Argument" "Definition" +.It Sy Return Probe Argument Ta Sy Definition +.It Ft uint64_t Fa arg0 Ta Program counter +.It Ft uint64_t Fa arg1 Ta Function's return value +.El +.Pp +Note that all probe arguments within the +.Nm pid +provider are of type +.Ft uint64_t . +.Sh SEE ALSO +.Xr dtrace 1 , +.Xr dtrace_fbt 4 , +.Xr dtrace_kinst 4 , +.Xr elf 5 , +.Xr d 7 , +.Xr tracing 7 +.Rs +.%A Brendan Gregg +.%A Jim Mauro +.%B DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD +.%I Prentice Hall +.%D 2011 +.%U https://www.brendangregg.com/dtracebook/ +.Re +.Rs +.%B The illumos Dynamic Tracing Guide +.%O Chapter pid Provider +.%D 2008 +.%U https://illumos.org/books/dtrace/chp-pid.html +.Re +.Sh AUTHORS +This manual page was written by +.An Mateusz Piotrowski Aq Mt 0mp@FreeBSD.org . diff --git a/share/man/man4/mpr.4 b/share/man/man4/mpr.4 index 8de46e4f9272..a88b99ae007b 100644 --- a/share/man/man4/mpr.4 +++ b/share/man/man4/mpr.4 @@ -103,8 +103,6 @@ Broadcom Ltd./Avago Tech (LSI) SAS 3808 (8 Port SAS/PCIe) .It Broadcom Ltd./Avago Tech (LSI) SAS 3816 (16 Port SAS/PCIe) .It -Broadcom Ltd./Avago Tech (LSI) SAS 3908 (8 Port SAS/PCIe) -.It Broadcom Ltd./Avago Tech (LSI) SAS 3916 (16 Port SAS/PCIe) .El .Sh CONFIGURATION diff --git a/share/man/man4/safe.4 b/share/man/man4/safe.4 index 89375d058bf7..914b2dd0dd1c 100644 --- a/share/man/man4/safe.4 +++ b/share/man/man4/safe.4 @@ -25,7 +25,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd November 22, 2024 +.Dd October 31, 2025 .Dt SAFE 4 .Os .Sh NAME @@ -57,6 +57,11 @@ In .Cd hw.safe.rngbufsize .Cd hw.safe.rngmaxalarm .Ed +.Sh DEPRECATION NOTICE +The +.Nm +driver is deprecated and is scheduled for removal in +.Fx 16.0 . .Sh DESCRIPTION The .Nm @@ -128,5 +133,14 @@ packet processing. .Xr random 4 , .Xr crypto 7 , .Xr crypto 9 +.Sh HISTORY +The +.Nm +driver first appeared in +.Fx 5.2 . +It is deprecated in +.Fx 15.0 +and removed in +.Fx 16.0 . .Sh BUGS Public key support is not implemented. diff --git a/share/man/man7/ports.7 b/share/man/man7/ports.7 index 75070ce852fe..24c1eb4b7f51 100644 --- a/share/man/man7/ports.7 +++ b/share/man/man7/ports.7 @@ -25,7 +25,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 September 10, 2025 +.Dd November 6, 2025 .Dt PORTS 7 .Os .Sh NAME @@ -597,6 +597,10 @@ data. The default ports directory. .It Pa /usr/ports/Mk/bsd.port.mk The big Kahuna. +.It Pa /var/db/ports +The directory where the results of configuring +.Va OPTIONS +are stored. .El .Sh EXAMPLES .Bl -tag -width 0n diff --git a/share/misc/bsd-family-tree b/share/misc/bsd-family-tree index 82e9ac45c495..01dfd4cc0cbf 100644 --- a/share/misc/bsd-family-tree +++ b/share/misc/bsd-family-tree @@ -83,410 +83,410 @@ FreeBSD 2.0.5 \ | BSD/OS 2.0.1 | | | | OpenBSD 2.3 | | | | | | BSD/OS 3.0 | FreeBSD 2.1 | | | | - | | | | *--NetBSD 1.1 -. BSD/OS 2.1 - | FreeBSD 2.1.5 | | | \ | - | | | | *--NetBSD 1.2 \ BSD/OS 3.0 - | FreeBSD 2.1.6 | | | \ OpenBSD 2.0 | - | | | | | \ | | - | FreeBSD 2.1.6.1 | | | \ | | - | | | | | \ | | - | FreeBSD 2.1.7 | | | | | | - | | | | | NetBSD 1.2.1 | | - | FreeBSD 2.1.7.1 | | | | | - | | | | | | - | | | | | | - *-FreeBSD 2.2 | | | | | - | \ | | | | | - | FreeBSD 2.2.1 | | | | | - | | | | | | | - | FreeBSD 2.2.2 | | | OpenBSD 2.1 | - | | | | | | | - | FreeBSD 2.2.5 | | | | | - | | | | | OpenBSD 2.2 | - | | | | *--NetBSD 1.3 | | - | FreeBSD 2.2.6 | | | | | | - | | | | | NetBSD 1.3.1 | BSD/OS 3.1 - | | | | | | OpenBSD 2.3 | - | | | | | NetBSD 1.3.2 | | - | FreeBSD 2.2.7 | | | | | | - | | | | | | | BSD/OS 4.0 - | FreeBSD 2.2.8 | | | | | | - | | | | | | | | - | v | | | | OpenBSD 2.4 | - | FreeBSD 2.2.9 | | | | | | - | | | | | | | -FreeBSD 3.0 <--------* | | v | | - | | | NetBSD 1.3.3 | | - *---FreeBSD 3.1 | | | | - | | | | | BSD/OS 4.0.1 - | FreeBSD 3.2----* | .--*--NetBSD 1.4 OpenBSD 2.5 | - | | | | | | | | | - | | | | | | | | | - | | | | | | | | | - | FreeBSD 3.3 | | | | NetBSD 1.4.1 | | - | | | | | | | OpenBSD 2.6 | - | FreeBSD 3.4 | | | | | | | - | | | | | | | | BSD/OS 4.1 -FreeBSD 4.0 | | | | | NetBSD 1.4.2 | | - | | | | | | | | | - | | | | | | | | | - | FreeBSD 3.5 | | | | | OpenBSD 2.7 | - | | | | | | | | | - | FreeBSD 3.5.1 | | | | | | | - | | | | | | | | - *---FreeBSD 4.1 | | | | | | | - | | | | | | | | | - | FreeBSD 4.1.1 | | / | | | | - | | | | / | | | | - | FreeBSD 4.2 Darwin/ | NetBSD 1.4.3 | | - | | Mac OS X | OpenBSD 2.8 BSD/OS 4.2 - | | | | | | - | | | | | | - | | 10.0 *--NetBSD 1.5 | | - | FreeBSD 4.3 | | | | | - | | | | | OpenBSD 2.9 | - | | | | NetBSD 1.5.1 | | - | | | | | | | - | FreeBSD 4.4-. | | NetBSD 1.5.2 | | - | | | Mac OS X | | | | - | | | 10.1 | | OpenBSD 3.0 | - | FreeBSD 4.5 | | | | | | - | | \ | | | | BSD/OS 4.3 - | FreeBSD 4.6 \ | | | OpenBSD 3.1 | - | | \ | | NetBSD 1.5.3 | | - | FreeBSD 4.6.2 Mac OS X | | | - | | 10.2 | | | - | FreeBSD 4.7 | | | | - | | | *--NetBSD 1.6 OpenBSD 3.2 | - | FreeBSD 4.8 | | | | | - | | | | NetBSD 1.6.1 | | - | |--------. | | | OpenBSD 3.3 BSD/OS 5.0 - | | \ | | | | | - | FreeBSD 4.9 | | | | OpenBSD 3.4 BSD/OS 5.1 ISE - | | | | | | | - | | | | | NetBSD 1.6.2 | - | | | | | | | - | | | | | | OpenBSD 3.5 - | | | | | v | - | FreeBSD 4.10 | | | | - | | | | | | - | FreeBSD 4.11 | | | | - | | | | | - | `-|------|-----------------|---------------------. - | | | | \ -FreeBSD 5.0 | | | | - | | | | | -FreeBSD 5.1 | | | DragonFly 1.0 - | \ | | | | - | ----- Mac OS X | | | - | 10.3 | | | -FreeBSD 5.2 | | | | - | | | | | | - | FreeBSD 5.2.1 | | | | - | | | | | - *-------FreeBSD 5.3 | | | | - | | | | OpenBSD 3.6 | - | | | *--NetBSD 2.0 | | - | | | | | | | DragonFly 1.2.0 - | | Mac OS X | | NetBSD 2.0.2 | | - | | 10.4 | | | | | - | FreeBSD 5.4 | | | | | | - | | | | | | OpenBSD 3.7 | - | | | | | NetBSD 2.0.3 | | - | | | | | | | | - *--FreeBSD | | | | v OpenBSD 3.8 | - | 6.0 | | | | | | - | | | | | \ | | - | | | | | NetBSD 2.1 | | - | | | | | | | - | | | | *--NetBSD 3.0 | | - | | | | | | | | DragonFly 1.4.0 - | | | | | | | OpenBSD 3.9 | - | FreeBSD | | | | | | | - | 6.1 | | | | | | | - | | FreeBSD 5.5 | | | | | | - | | | | | NetBSD 3.0.1 | DragonFly 1.6.0 - | | | | | | | | - | | | | | | OpenBSD 4.0 | - | | | | | NetBSD 3.0.2 | | - | | | | NetBSD 3.1 | | - | FreeBSD 6.2 | | | | - | | | | | DragonFly 1.8.0 - | | | | OpenBSD 4.1 | - | | | | | DragonFly 1.10.0 - | | Mac OS X | | | - | | 10.5 | | | - | | | | OpenBSD 4.2 | - | | | *--NetBSD 4.0 | | - | FreeBSD 6.3 | | | | | - | \ | | | | | - *--FreeBSD | | | | | DragonFly 1.12.0 - | 7.0 | | | | | | - | | | | | | OpenBSD 4.3 | - | | | | | NetBSD | DragonFly 2.0.0 - | | FreeBSD | | 4.0.1 OpenBSD 4.4 | - | | 6.4 | | | | - | | | | | | - | FreeBSD 7.1 | | | | - | | | | | DragonFly 2.2.0 - | FreeBSD 7.2 | *--NetBSD OpenBSD 4.5 | - | \ | | 5.0 | | - | \ | | / | \ | | - | | Mac OS X | | | \ | | - | | 10.6 | | | \ | | - | | | | | | NetBSD | DragonFly 2.4.0 - | | | | | | 5.0.1 OpenBSD 4.6 | - | | | | | | | | | - *--FreeBSD | | | | | | | | - | 8.0 | | | | | | | | - | | FreeBSD | | | | NetBSD | | - | | 7.3 | | | | 5.0.2 | DragonFly 2.6.0 - | | | | | | | OpenBSD 4.7 | - | FreeBSD | | | | | | | - | 8.1 | | | | | | | - | | | | | | | | DragonFly 2.8.2 - | | | | | | | OpenBSD 4.8 | - | | | | | | *--NetBSD | | - | FreeBSD FreeBSD | | | 5.1 | | - | 8.2 7.4 | | | | | DragonFly 2.10.1 - | | | | | | OpenBSD 4.9 | - | `-----. Mac OS X | | | | | - | \ 10.7 | | | | | - | | | | | | OpenBSD 5.0 | - *--FreeBSD | | | | | | | - | 9.0 | | | | NetBSD | DragonFly 3.0.1 - | | FreeBSD | | | 5.1.2 | | - | | 8.3 | | | | | | - | | | | | | NetBSD | | - | | | | | | 5.1.3 | | - | | | | | | | | | - | | | | | | NetBSD | | - | | | | | | 5.1.4 | | - | | | | | | OpenBSD 5.1 | - | | | Mac OS X | `--------. | | - | | | 10.8 | | | | - | | | | *--NetBSD | | | - | | | | | 6.0 | | | - | | | | | | | | OpenBSD 5.2 DragonFly 3.2.1 - | FreeBSD | | | | | NetBSD | | - | 9.1 | | | | | 5.2 | | - | | | | | | | | | | - | | | | | | | NetBSD | | - | | | | | | | 5.2.1 | | - | | | | | | | | | | - | | | | | | | NetBSD | | - | | | | | | | 5.2.2 | | - | | | | | | | | | - | | | | | | \ | | - | | | | | | NetBSD | | - | | | | | | 6.0.1 | | - | | | | | | | OpenBSD 5.3 DragonFly 3.4.1 - | | | | | | NetBSD | | - | | | | | | 6.0.2 | | - | | | | | | | | | - | | | | | | NetBSD | | - | | | | | | 6.0.3 | | - | | | | | | | | | - | | | | | | NetBSD | | - | | | | | | 6.0.4 | | - | | | | | | | | | - | | | | | | NetBSD | | - | | | | | | 6.0.5 | | - | | | | | | | | | - | | | | | | NetBSD | | - | | | | | | 6.0.6 | | - | | | | | | | | - | | | | | *--NetBSD | | - | | | | | 6.1 | | - | | FreeBSD | | | | | - | | 8.4 | | NetBSD | | - | | | | | 6.1.1 | | - | | | | | | | - | FreeBSD | | NetBSD | | - | 9.2 | | 6.1.2 | | - | | Mac OS X | | | | - | | 10.9 | | OpenBSD 5.4 | - | `-----. | | | | DragonFly 3.6.0 - | \ | | | | | - *--FreeBSD | | | NetBSD | | - | 10.0 | | | 6.1.3 | | - | | | | | | | | - | | | | | | | DragonFly 3.6.1 - | | | | | | | | - | | | | | | | | - | | | | | | | DragonFly 3.6.2 - | | | | | NetBSD | | - | | | | | 6.1.4 | | - | | | | | | | | - | | | | | | OpenBSD 5.5 | - | | | | | | | | - | | | | | | | DragonFly 3.8.0 - | | | | | | | | - | | | | | | | | - | | | | | | | DragonFly 3.8.1 - | | | | | | | | - | | | | | | | | - | | | | | | | DragonFly 3.6.3 - | | | | | | | | - | | FreeBSD | | | | | - | | 9.3 | | | | | - | | | | NetBSD | DragonFly 3.8.2 - | | | | 6.1.5 | | - | | Mac OS X | | | - | | 10.10 | | | - | | | | OpenBSD 5.6 | - | FreeBSD | | | | - | 10.1 | | | DragonFly 4.0.1 - | | | | | | - | | | | | DragonFly 4.0.2 - | | | | | | - | | | | | DragonFly 4.0.3 - | | | | | | - | | | | | DragonFly 4.0.4 - | | | | | | - | | | | | DragonFly 4.0.5 - | | | | | | - | | | | OpenBSD 5.7 | - | | | | | DragonFly 4.2.0 - | FreeBSD | | | | - | 10.2 | | | | - | | macOS *--NetBSD 7.0 | | - | | 10.11 | | | OpenBSD 5.8 | - | | | | | `--. | DragonFly 4.4.1 - | FreeBSD | | | | OpenBSD 5.9 | - | 10.3 | | | | | | - | | | | | NetBSD | | - | | | | | 7.0.1 | | - | `------. | | | | | DragonFly 4.6.0 - | | | | | | | | - | | | | | | | | - *--FreeBSD | macOS | | | OpenBSD 6.0 | - | 11.0 | 10.12 | | NetBSD | | - | | | | | | 7.0.2 | | - | | | | | | | | - | | | | | *--NetBSD | | - | | | | | | 7.1 | | - | | | | | | | | | - | | | | | | | | | - | | | macOS | | | | DragonFly 4.8.0 - | | | 10.13 | | | OpenBSD 6.1 | - | FreeBSD | | | | | | DragonFly 5.0.0 - | 11.1 FreeBSD | | | | | | - | | 10.4 | | | | OpenBSD 6.2 DragonFly 5.0.1 - | | | | | | | | - | `------. | | | NetBSD | DragonFly 5.0.2 - | | | | | 7.1.1 | | - | | | | | | | | - | | | | | NetBSD | | - | | | | | 7.1.2 `--. | - | | | | | | | - | | | | `-----. OpenBSD 6.3 | - | | | *--NetBSD | | DragonFly 5.2.0 - | | | | 8.0 | | | - | | | | | | | DragonFly 5.2.1 - | | | | | | | | - | | | | | | | DragonFly 5.2.2 - | FreeBSD | | | *--NetBSD | | - | 11.2 | | | 7.2 | | - | | macOS | | | | - | | 10.14 | | OpenBSD 6.4 | - | | | | | | | - | | | | | | DragonFly 5.4.0 - *--FreeBSD | | | | | | - | 12.0 | | | | | DragonFly 5.4.1 - | | | | | | OpenBSD 6.5 | - | | | | | | | | - | | | | | NetBSD | | - | | | | | 8.1 | DragonFly 5.6 - | | | | | | | | - | | | | | | | DragonFly 5.6.1 - | | FreeBSD macOS | | | | - | | 11.3 10.15 | | | | - | FreeBSD | | | | OpenBSD 6.6 | - | 12.1 | macOS | `-------. | | - | | | 10.15.1 | | | DragonFly 5.6.2 - | | | | *--NetBSD | | | - | | | | | 9.0 | | | - | | | | | | | | | - | | | | | | | | DragonFly 5.8 - | | | | | | | | | - | | | | | | | | DragonFly 5.6.3 - | | | | | | NetBSD | | - | | | | | | 8.2 | | - | | | | | | | | DragonFly 5.8.1 - | | | | | | | OpenBSD 6.7 | - | | FreeBSD | | | | | | - | | 11.4 | | | | | | - | | | | | | | DragonFly 5.8.2 - | | | | | | | DragonFly 5.8.3 - | | | | NetBSD | OpenBSD 6.8 | - | FreeBSD macOS | 9.1 | | | - | 12.2 11 | | | | | - | | | | | | | | - | `------. | | | | | | - | | | | | | | | - *--FreeBSD | | | | | | | - | 13.0 | | | NetBSD | OpenBSD 6.9 DragonFly 6.0.0 - | | | | | 9.2 | | | - | | | | | | | | DragonFly 6.0.1 - | | | | | | | | | - | | FreeBSD macOS | | | OpenBSD 7.0 | - | | 12.3 12 | | | | | - | | | | | | | | DragonFly 6.2.1 - | | | | | | | OpenBSD 7.1 | - | FreeBSD | | | | | | | - | 13.1 | | | | | | | - | | | | | | | | DragonFly 6.2.2 - | | | | | NetBSD | | | - | | | macOS | 9.3 | OpenBSD 7.2 | - | | | 13 | | | | | - | | FreeBSD | | | | | | - | | 12.4 | | | | | | - | | | | | | | DragonFly 6.4.0 - | | | | | | OpenBSD 7.3 | - | FreeBSD | | | | | | - | 13.2 | | | | | | - | | | | | | | | - | `------. | | | | | | - | | macOS | | | | | - | | 14 | | | | | - | | | | | | OpenBSD 7.4 | - *--FreeBSD | | | | | | | - | 14.0 | | | | | | | - | | | | | | | | | - | | FreeBSD | | NetBSD | | | - | | 13.3 | | 9.4 | | | - | | | | | | | | - | | | | *--NetBSD | | | - | | | | | 10.0 | | | - | | | | | | | | | - | | | | | | | OpenBSD 7.5 | - | | | | | | NetBSD | | - | | | | | | 8.3 | | - | FreeBSD | | | | | | - | 14.1 | | | | | | - | | | macOS | | | | - | | | 15 | | | | - | | FreeBSD | | | | | - | | 13.4 | | | OpenBSD 7.6 | - | FreeBSD | | | | | | - | 14.2 | | | | | | - | | | | | NetBSD | | - | | | | | 10.1 | | - | | FreeBSD | | | | - | | 13.5 | | | | - | | | | OpenBSD 7.7 | - | | | | | DragonFly 6.4.1 - | | | | | DragonFly 6.4.2 - | FreeBSD | | | | - | 14.3 | | | | - | macOS | | | - | 26 | | | - | | | OpenBSD 7.8 | - | | | | | -FreeBSD 16 -current | NetBSD -current OpenBSD -current DragonFly -current - | | | | | - v v v v v + | | | | *--NetBSD 1.1 ---. BSD/OS 2.1 + | FreeBSD 2.1.5 | | | \ | + | | | | *--NetBSD 1.2 \ BSD/OS 3.0 + | FreeBSD 2.1.6 | | | \ OpenBSD 2.0 | + | | | | | \ | | + | FreeBSD 2.1.6.1 | | | \ | | + | | | | | \ | | + | FreeBSD 2.1.7 | | | | | | + | | | | | NetBSD 1.2.1 | | + | FreeBSD 2.1.7.1 | | | | | + | | | | | | + | | | | | | + *-FreeBSD 2.2 | | | | | + | \ | | | | | + | FreeBSD 2.2.1 | | | | | + | | | | | | | + | FreeBSD 2.2.2 | | | OpenBSD 2.1 | + | | | | | | | + | FreeBSD 2.2.5 | | | | | + | | | | | OpenBSD 2.2 | + | | | | *--NetBSD 1.3 | | + | FreeBSD 2.2.6 | | | | | | + | | | | | NetBSD 1.3.1 | BSD/OS 3.1 + | | | | | | OpenBSD 2.3 | + | | | | | NetBSD 1.3.2 | | + | FreeBSD 2.2.7 | | | | | | + | | | | | | | BSD/OS 4.0 + | FreeBSD 2.2.8 | | | | | | + | | | | | | | | + | v | | | | OpenBSD 2.4 | + | FreeBSD 2.2.9 | | | | | | + | | | | | | | +FreeBSD 3.0 <--------* | | v | | + | | | NetBSD 1.3.3 | | + *---FreeBSD 3.1 | | | | + | | | | | BSD/OS 4.0.1 + | FreeBSD 3.2----* | .--*--NetBSD 1.4 OpenBSD 2.5 | + | | | | | | | | | + | | | | | | | | | + | | | | | | | | | + | FreeBSD 3.3 | | | | NetBSD 1.4.1 | | + | | | | | | | OpenBSD 2.6 | + | FreeBSD 3.4 | | | | | | | + | | | | | | | | BSD/OS 4.1 +FreeBSD 4.0 | | | | | NetBSD 1.4.2 | | + | | | | | | | | | + | | | | | | | | | + | FreeBSD 3.5 | | | | | OpenBSD 2.7 | + | | | | | | | | | + | FreeBSD 3.5.1 | | | | | | | + | | | | | | | | + *---FreeBSD 4.1 | | | | | | | + | | | | | | | | | + | FreeBSD 4.1.1 | | / | | | | + | | | | / | | | | + | FreeBSD 4.2 Darwin/ | NetBSD 1.4.3 | | + | | Mac OS X | OpenBSD 2.8 BSD/OS 4.2 + | | | | | | + | | | | | | + | | 10.0 *--NetBSD 1.5 | | + | FreeBSD 4.3 | | | | | + | | | | | OpenBSD 2.9 | + | | | | NetBSD 1.5.1 | | + | | | | | | | + | FreeBSD 4.4-. | | NetBSD 1.5.2 | | + | | | Mac OS X | | | | + | | | 10.1 | | OpenBSD 3.0 | + | FreeBSD 4.5 | | | | | | + | | \ | | | | BSD/OS 4.3 + | FreeBSD 4.6 \ | | | OpenBSD 3.1 | + | | \ | | NetBSD 1.5.3 | | + | FreeBSD 4.6.2 Mac OS X | | | + | | 10.2 | | | + | FreeBSD 4.7 | | | | + | | | *--NetBSD 1.6 OpenBSD 3.2 | + | FreeBSD 4.8 | | | | | + | | | | NetBSD 1.6.1 | | + | |--------. | | | OpenBSD 3.3 BSD/OS 5.0 + | | \ | | | | | + | FreeBSD 4.9 | | | | OpenBSD 3.4 BSD/OS 5.1 ISE + | | | | | | | + | | | | | NetBSD 1.6.2 | + | | | | | | | + | | | | | | OpenBSD 3.5 + | | | | | v | + | FreeBSD 4.10 | | | | + | | | | | | + | FreeBSD 4.11 | | | | + | | | | | + | `-|------|-------------------|-------------------. + | | | | \ +FreeBSD 5.0 | | | | + | | | | | +FreeBSD 5.1 | | | DragonFly 1.0 + | \ | | | | + | ----- Mac OS X | | | + | 10.3 | | | +FreeBSD 5.2 | | | | + | | | | | | + | FreeBSD 5.2.1 | | | | + | | | | | + *-------FreeBSD 5.3 | | | | + | | | | OpenBSD 3.6 | + | | | *--NetBSD 2.0 | | + | | | | | | | DragonFly 1.2.0 + | | Mac OS X | | NetBSD 2.0.2 | | + | | 10.4 | | | | | + | FreeBSD 5.4 | | | | | | + | | | | | | OpenBSD 3.7 | + | | | | | NetBSD 2.0.3 | | + | | | | | | | | + *--FreeBSD | | | | v OpenBSD 3.8 | + | 6.0 | | | | | | + | | | | | \ | | + | | | | | NetBSD 2.1 | | + | | | | | | | + | | | | *--NetBSD 3.0 | | + | | | | | | | | DragonFly 1.4.0 + | | | | | | | OpenBSD 3.9 | + | FreeBSD | | | | | | | + | 6.1 | | | | | | | + | | FreeBSD 5.5 | | | | | | + | | | | | NetBSD 3.0.1 | DragonFly 1.6.0 + | | | | | | | | + | | | | | | OpenBSD 4.0 | + | | | | | NetBSD 3.0.2 | | + | | | | NetBSD 3.1 | | + | FreeBSD 6.2 | | | | + | | | | | DragonFly 1.8.0 + | | | | OpenBSD 4.1 | + | | | | | DragonFly 1.10.0 + | | Mac OS X | | | + | | 10.5 | | | + | | | | OpenBSD 4.2 | + | | | *--NetBSD 4.0 | | + | FreeBSD 6.3 | | | | | + | \ | | | | | + *--FreeBSD | | | | | DragonFly 1.12.0 + | 7.0 | | | | | | + | | | | | | OpenBSD 4.3 | + | | | | | NetBSD | DragonFly 2.0.0 + | | FreeBSD | | 4.0.1 OpenBSD 4.4 | + | | 6.4 | | | | + | | | | | | + | FreeBSD 7.1 | | | | + | | | | | DragonFly 2.2.0 + | FreeBSD 7.2 | *--NetBSD OpenBSD 4.5 | + | \ | | 5.0 | | + | \ | | / | \ | | + | | Mac OS X | | | \ | | + | | 10.6 | | | \ | | + | | | | | | NetBSD | DragonFly 2.4.0 + | | | | | | 5.0.1 OpenBSD 4.6 | + | | | | | | | | | + *--FreeBSD | | | | | | | | + | 8.0 | | | | | | | | + | | FreeBSD | | | | NetBSD | | + | | 7.3 | | | | 5.0.2 | DragonFly 2.6.0 + | | | | | | | OpenBSD 4.7 | + | FreeBSD | | | | | | | + | 8.1 | | | | | | | + | | | | | | | | DragonFly 2.8.2 + | | | | | | | OpenBSD 4.8 | + | | | | | | *--NetBSD | | + | FreeBSD FreeBSD | | | 5.1 | | + | 8.2 7.4 | | | | | DragonFly 2.10.1 + | | | | | | OpenBSD 4.9 | + | `-----. Mac OS X | | | | | + | \ 10.7 | | | | | + | | | | | | OpenBSD 5.0 | + *--FreeBSD | | | | | | | + | 9.0 | | | | NetBSD | DragonFly 3.0.1 + | | FreeBSD | | | 5.1.2 | | + | | 8.3 | | | | | | + | | | | | | NetBSD | | + | | | | | | 5.1.3 | | + | | | | | | | | | + | | | | | | NetBSD | | + | | | | | | 5.1.4 | | + | | | | | | OpenBSD 5.1 | + | | | Mac OS X | `--------. | | + | | | 10.8 | | | | + | | | | *--NetBSD | | | + | | | | | 6.0 | | | + | | | | | | | | OpenBSD 5.2 DragonFly 3.2.1 + | FreeBSD | | | | | NetBSD | | + | 9.1 | | | | | 5.2 | | + | | | | | | | | | | + | | | | | | | NetBSD | | + | | | | | | | 5.2.1 | | + | | | | | | | | | | + | | | | | | | NetBSD | | + | | | | | | | 5.2.2 | | + | | | | | | | | | + | | | | | | \ | | + | | | | | | NetBSD | | + | | | | | | 6.0.1 | | + | | | | | | | OpenBSD 5.3 DragonFly 3.4.1 + | | | | | | NetBSD | | + | | | | | | 6.0.2 | | + | | | | | | | | | + | | | | | | NetBSD | | + | | | | | | 6.0.3 | | + | | | | | | | | | + | | | | | | NetBSD | | + | | | | | | 6.0.4 | | + | | | | | | | | | + | | | | | | NetBSD | | + | | | | | | 6.0.5 | | + | | | | | | | | | + | | | | | | NetBSD | | + | | | | | | 6.0.6 | | + | | | | | | | | + | | | | | *--NetBSD | | + | | | | | 6.1 | | + | | FreeBSD | | | | | + | | 8.4 | | NetBSD | | + | | | | | 6.1.1 | | + | | | | | | | + | FreeBSD | | NetBSD | | + | 9.2 | | 6.1.2 | | + | | Mac OS X | | | | + | | 10.9 | | OpenBSD 5.4 | + | `-----. | | | | DragonFly 3.6.0 + | \ | | | | | + *--FreeBSD | | | NetBSD | | + | 10.0 | | | 6.1.3 | | + | | | | | | | | + | | | | | | | DragonFly 3.6.1 + | | | | | | | | + | | | | | | | | + | | | | | | | DragonFly 3.6.2 + | | | | | NetBSD | | + | | | | | 6.1.4 | | + | | | | | | | | + | | | | | | OpenBSD 5.5 | + | | | | | | | | + | | | | | | | DragonFly 3.8.0 + | | | | | | | | + | | | | | | | | + | | | | | | | DragonFly 3.8.1 + | | | | | | | | + | | | | | | | | + | | | | | | | DragonFly 3.6.3 + | | | | | | | | + | | FreeBSD | | | | | + | | 9.3 | | | | | + | | | | NetBSD | DragonFly 3.8.2 + | | | | 6.1.5 | | + | | Mac OS X | | | + | | 10.10 | | | + | | | | OpenBSD 5.6 | + | FreeBSD | | | | + | 10.1 | | | DragonFly 4.0.1 + | | | | | | + | | | | | DragonFly 4.0.2 + | | | | | | + | | | | | DragonFly 4.0.3 + | | | | | | + | | | | | DragonFly 4.0.4 + | | | | | | + | | | | | DragonFly 4.0.5 + | | | | | | + | | | | OpenBSD 5.7 | + | | | | | DragonFly 4.2.0 + | FreeBSD | | | | + | 10.2 | | | | + | | macOS *--NetBSD 7.0 | | + | | 10.11 | | | OpenBSD 5.8 | + | | | | | `--. | DragonFly 4.4.1 + | FreeBSD | | | | OpenBSD 5.9 | + | 10.3 | | | | | | + | | | | | NetBSD | | + | | | | | 7.0.1 | | + | `------. | | | | | DragonFly 4.6.0 + | | | | | | | | + | | | | | | | | + *--FreeBSD | macOS | | | OpenBSD 6.0 | + | 11.0 | 10.12 | | NetBSD | | + | | | | | | 7.0.2 | | + | | | | | | | | + | | | | | *--NetBSD | | + | | | | | | 7.1 | | + | | | | | | | | | + | | | | | | | | | + | | | macOS | | | | DragonFly 4.8.0 + | | | 10.13 | | | OpenBSD 6.1 | + | FreeBSD | | | | | | DragonFly 5.0.0 + | 11.1 FreeBSD | | | | | | + | | 10.4 | | | | OpenBSD 6.2 DragonFly 5.0.1 + | | | | | | | | + | `------. | | | NetBSD | DragonFly 5.0.2 + | | | | | 7.1.1 | | + | | | | | | | | + | | | | | NetBSD | | + | | | | | 7.1.2 `--. | + | | | | | | | + | | | | `-----. OpenBSD 6.3 | + | | | *--NetBSD | | DragonFly 5.2.0 + | | | | 8.0 | | | + | | | | | | | DragonFly 5.2.1 + | | | | | | | | + | | | | | | | DragonFly 5.2.2 + | FreeBSD | | | *--NetBSD | | + | 11.2 | | | 7.2 | | + | | macOS | | | | + | | 10.14 | | OpenBSD 6.4 | + | | | | | | | + | | | | | | DragonFly 5.4.0 + *--FreeBSD | | | | | | + | 12.0 | | | | | DragonFly 5.4.1 + | | | | | | OpenBSD 6.5 | + | | | | | | | | + | | | | | NetBSD | | + | | | | | 8.1 | DragonFly 5.6 + | | | | | | | | + | | | | | | | DragonFly 5.6.1 + | | FreeBSD macOS | | | | + | | 11.3 10.15 | | | | + | FreeBSD | | | | OpenBSD 6.6 | + | 12.1 | macOS | `-------. | | + | | | 10.15.1 | | | DragonFly 5.6.2 + | | | | *--NetBSD | | | + | | | | | 9.0 | | | + | | | | | | | | | + | | | | | | | | DragonFly 5.8 + | | | | | | | | | + | | | | | | | | DragonFly 5.6.3 + | | | | | | NetBSD | | + | | | | | | 8.2 | | + | | | | | | | | DragonFly 5.8.1 + | | | | | | | OpenBSD 6.7 | + | | FreeBSD | | | | | | + | | 11.4 | | | | | | + | | | | | | | DragonFly 5.8.2 + | | | | | | | DragonFly 5.8.3 + | | | | NetBSD | OpenBSD 6.8 | + | FreeBSD macOS | 9.1 | | | + | 12.2 11 | | | | | + | | | | | | | | + | `------. | | | | | | + | | | | | | | | + *--FreeBSD | | | | | | | + | 13.0 | | | NetBSD | OpenBSD 6.9 DragonFly 6.0.0 + | | | | | 9.2 | | | + | | | | | | | | DragonFly 6.0.1 + | | | | | | | | | + | | FreeBSD macOS | | | OpenBSD 7.0 | + | | 12.3 12 | | | | | + | | | | | | | | DragonFly 6.2.1 + | | | | | | | OpenBSD 7.1 | + | FreeBSD | | | | | | | + | 13.1 | | | | | | | + | | | | | | | | DragonFly 6.2.2 + | | | | | NetBSD | | | + | | | macOS | 9.3 | OpenBSD 7.2 | + | | | 13 | | | | | + | | FreeBSD | | | | | | + | | 12.4 | | | | | | + | | | | | | | DragonFly 6.4.0 + | | | | | | OpenBSD 7.3 | + | FreeBSD | | | | | | + | 13.2 | | | | | | + | | | | | | | | + | `------. | | | | | | + | | macOS | | | | | + | | 14 | | | | | + | | | | | | OpenBSD 7.4 | + *--FreeBSD | | | | | | | + | 14.0 | | | | | | | + | | | | | | | | | + | | FreeBSD | | NetBSD | | | + | | 13.3 | | 9.4 | | | + | | | | | | | | + | | | | *--NetBSD | | | + | | | | | 10.0 | | | + | | | | | | | | | + | | | | | | | OpenBSD 7.5 | + | | | | | | NetBSD | | + | | | | | | 8.3 | | + | FreeBSD | | | | | | + | 14.1 | | | | | | + | | | macOS | | | | + | | | 15 | | | | + | | FreeBSD | | | | | + | | 13.4 | | | OpenBSD 7.6 | + | FreeBSD | | | | | | + | 14.2 | | | | | | + | | | | | NetBSD | | + | | | | | 10.1 | | + | | FreeBSD | | | | + | | 13.5 | | | | + | | | | OpenBSD 7.7 | + | | | | | DragonFly 6.4.1 + | | | | | DragonFly 6.4.2 + | FreeBSD | | | | + | 14.3 | | | | + | macOS | | | + | 26 | | | + | | | OpenBSD 7.8 | + | | | | | +FreeBSD 16 -current | NetBSD -current OpenBSD -current DragonFly -current + | | | | | + v v v v v Time ---------------- diff --git a/share/tabset/Makefile b/share/tabset/Makefile index fe7519084716..4da1a3650888 100644 --- a/share/tabset/Makefile +++ b/share/tabset/Makefile @@ -1,3 +1,5 @@ +PACKAGE= ncurses-lib + FILES= 3101 9837 aa aed512 beehive diablo dtc382 hp700-wy ibm3101 std \ stdcrt tandem653 teleray vt100 vt100-w wyse-adds xerox1720 xerox1730 \ xerox1730-lm zenith29 diff --git a/share/termcap/Makefile b/share/termcap/Makefile index 34ad41fd520a..603b098e4de1 100644 --- a/share/termcap/Makefile +++ b/share/termcap/Makefile @@ -1,10 +1,13 @@ # reorder gives an editor command for most common terminals # (in reverse order from n'th to 1'st most commonly used) # to move them to the front of termcap -# -MAN= termcap.5 -PACKAGE= runtime +MAN= termcap.5 +MANPACKAGE= ncurses + +# Note: This is in ncurses-lib rather than ncurses because without it, ncurses +# doesn't work, and the base ncurses package is optional. +PACKAGE= ncurses-lib FILES= termcap termcap.db FILESDIR= ${BINDIR}/misc CLEANFILES+= termcap.db @@ -16,7 +19,7 @@ termcap.db: termcap ${CAP_MKDB_CMD} ${CAP_MKDB_ENDIAN} -f ${.TARGET:R} ${.ALLSRC} etc-termcap: - ${INSTALL_SYMLINK} -T "package=runtime" \ + ${INSTALL_SYMLINK} -T "package=ncurses-lib" \ ${BINDIR}/misc/termcap ${DESTDIR}/etc/termcap .include <bsd.prog.mk> diff --git a/stand/libsa/zfs/zfsimpl.c b/stand/libsa/zfs/zfsimpl.c index f15d9b016068..e5920004bd9d 100644 --- a/stand/libsa/zfs/zfsimpl.c +++ b/stand/libsa/zfs/zfsimpl.c @@ -128,6 +128,7 @@ static const char *features_for_read[] = { "org.open-zfs:large_blocks", "org.openzfs:blake3", "org.zfsonlinux:large_dnode", + "com.klarasystems:dynamic_gang_header", NULL }; @@ -141,6 +142,8 @@ static uint64_t dnode_cache_bn; static char *dnode_cache_buf; static int zio_read(const spa_t *spa, const blkptr_t *bp, void *buf); +static int zio_read_impl(const spa_t *spa, const blkptr_t *bp, void *buf, + bool print); static int zfs_get_root(const spa_t *spa, uint64_t *objid); static int zfs_rlookup(const spa_t *spa, uint64_t objnum, char *result); static int zap_lookup(const spa_t *spa, const dnode_phys_t *dnode, @@ -530,7 +533,7 @@ vdev_indirect_mapping_duplicate_adjacent_entries(vdev_t *vd, uint64_t offset, } static vdev_t * -vdev_lookup_top(spa_t *spa, uint64_t vdev) +vdev_lookup_top(const spa_t *spa, uint64_t vdev) { vdev_t *rvd; vdev_list_t *vlist; @@ -2270,45 +2273,77 @@ ilog2(int n) return (-1); } +static inline uint64_t +gbh_nblkptrs(uint64_t size) +{ + ASSERT(IS_P2ALIGNED(size, sizeof(blkptr_t))); + return ((size - sizeof(zio_eck_t)) / sizeof(blkptr_t)); +} + static int zio_read_gang(const spa_t *spa, const blkptr_t *bp, void *buf) { blkptr_t gbh_bp; - zio_gbh_phys_t zio_gb; + void *gbuf; char *pbuf; - int i; + uint64_t gangblocksize; + int err, i; + + gangblocksize = UINT64_MAX; + for (int dva = 0; dva < BP_GET_NDVAS(bp); dva++) { + vdev_t *vd = vdev_lookup_top(spa, + DVA_GET_VDEV(&bp->blk_dva[dva])); + gangblocksize = MIN(gangblocksize, 1ULL << vd->v_ashift); + } /* Artificial BP for gang block header. */ gbh_bp = *bp; - BP_SET_PSIZE(&gbh_bp, SPA_GANGBLOCKSIZE); - BP_SET_LSIZE(&gbh_bp, SPA_GANGBLOCKSIZE); + BP_SET_PSIZE(&gbh_bp, gangblocksize); + BP_SET_LSIZE(&gbh_bp, gangblocksize); BP_SET_CHECKSUM(&gbh_bp, ZIO_CHECKSUM_GANG_HEADER); BP_SET_COMPRESS(&gbh_bp, ZIO_COMPRESS_OFF); for (i = 0; i < SPA_DVAS_PER_BP; i++) DVA_SET_GANG(&gbh_bp.blk_dva[i], 0); + gbuf = malloc(gangblocksize); + if (gbuf == NULL) + return (ENOMEM); /* Read gang header block using the artificial BP. */ - if (zio_read(spa, &gbh_bp, &zio_gb)) + err = zio_read_impl(spa, &gbh_bp, gbuf, false); + if ((err == EIO || err == ECKSUM) && + gangblocksize > SPA_OLD_GANGBLOCKSIZE) { + /* This might be a legacy gang block header, try again. */ + gangblocksize = SPA_OLD_GANGBLOCKSIZE; + BP_SET_PSIZE(&gbh_bp, gangblocksize); + BP_SET_LSIZE(&gbh_bp, gangblocksize); + err = zio_read(spa, &gbh_bp, gbuf); + } + if (err != 0) { + free(gbuf); return (EIO); + } pbuf = buf; - for (i = 0; i < SPA_GBH_NBLKPTRS; i++) { - blkptr_t *gbp = &zio_gb.zg_blkptr[i]; + for (i = 0; i < gbh_nblkptrs(gangblocksize); i++) { + blkptr_t *gbp = &((blkptr_t *)gbuf)[i]; if (BP_IS_HOLE(gbp)) continue; - if (zio_read(spa, gbp, pbuf)) + if (zio_read(spa, gbp, pbuf)) { + free(gbuf); return (EIO); + } pbuf += BP_GET_PSIZE(gbp); } + free(gbuf); if (zio_checksum_verify(spa, bp, buf)) return (EIO); return (0); } static int -zio_read(const spa_t *spa, const blkptr_t *bp, void *buf) +zio_read_impl(const spa_t *spa, const blkptr_t *bp, void *buf, bool print) { int cpfunc = BP_GET_COMPRESS(bp); uint64_t align, size; @@ -2340,7 +2375,7 @@ zio_read(const spa_t *spa, const blkptr_t *bp, void *buf) size, buf, BP_GET_LSIZE(bp)); free(pbuf); } - if (error != 0) + if (error != 0 && print) printf("ZFS: i/o error - unable to decompress " "block pointer data, error %d\n", error); return (error); @@ -2394,7 +2429,7 @@ zio_read(const spa_t *spa, const blkptr_t *bp, void *buf) BP_GET_PSIZE(bp), buf, BP_GET_LSIZE(bp)); else if (size != BP_GET_PSIZE(bp)) bcopy(pbuf, buf, BP_GET_PSIZE(bp)); - } else { + } else if (print) { printf("zio_read error: %d\n", error); } if (buf != pbuf) @@ -2402,13 +2437,19 @@ zio_read(const spa_t *spa, const blkptr_t *bp, void *buf) if (error == 0) break; } - if (error != 0) + if (error != 0 && print) printf("ZFS: i/o error - all block copies unavailable\n"); return (error); } static int +zio_read(const spa_t *spa, const blkptr_t *bp, void *buf) +{ + return (zio_read_impl(spa, bp, buf, true)); +} + +static int dnode_read(const spa_t *spa, const dnode_phys_t *dnode, off_t offset, void *buf, size_t buflen) { diff --git a/sys/cam/ata/ata_da.c b/sys/cam/ata/ata_da.c index 08747cd59131..9434756b87f9 100644 --- a/sys/cam/ata/ata_da.c +++ b/sys/cam/ata/ata_da.c @@ -2328,15 +2328,38 @@ adastart(struct cam_periph *periph, union ccb *start_ccb) { struct ada_softc *softc = (struct ada_softc *)periph->softc; struct ccb_ataio *ataio = &start_ccb->ataio; + uint32_t priority = start_ccb->ccb_h.pinfo.priority; CAM_DEBUG(periph->path, CAM_DEBUG_TRACE, ("adastart\n")); + /* + * When we're running the state machine, we should only accept DEV CCBs. + * When we're doing normal I/O we should only accept NORMAL CCBs. + * + * While in the state machine, we carefully single step the queue, but + * there's no protection for 'extra' calls to xpt_schedule() at the + * wrong priority. Guard against that so that we filter any CCBs that + * are offered at the wrong priority. This avoids generating requests + * that are at normal priority. +` */ + if ((softc->state != ADA_STATE_NORMAL && priority != CAM_PRIORITY_DEV) || + (softc->state == ADA_STATE_NORMAL && priority != CAM_PRIORITY_NORMAL)) { + xpt_print(periph->path, "Bad priority for state %d prio %d\n", + softc->state, priority); + xpt_release_ccb(start_ccb); + return; + } + switch (softc->state) { case ADA_STATE_NORMAL: { struct bio *bp; uint8_t tag_code; + KASSERT(priority == CAM_PRIORITY_NORMAL, + ("Expected priority %d, found %d in state normal", + CAM_PRIORITY_NORMAL, priority)); + bp = cam_iosched_next_bio(softc->cam_iosched); if (bp == NULL) { xpt_release_ccb(start_ccb); @@ -2555,6 +2578,11 @@ out: case ADA_STATE_RAHEAD: case ADA_STATE_WCACHE: { + KASSERT(priority == CAM_PRIORITY_DEV, + ("Expected priority %d, found %d in state %s", + CAM_PRIORITY_DEV, priority, + softc->state == ADA_STATE_RAHEAD ? "rahead" : "wcache")); + cam_fill_ataio(ataio, 1, adadone, @@ -2581,6 +2609,10 @@ out: { struct ata_gp_log_dir *log_dir; + KASSERT(priority == CAM_PRIORITY_DEV, + ("Expected priority %d, found %d in state logdir", + CAM_PRIORITY_DEV, priority)); + if ((softc->flags & ADA_FLAG_CAN_LOG) == 0) { adaprobedone(periph, start_ccb); break; @@ -2615,6 +2647,10 @@ out: { struct ata_identify_log_pages *id_dir; + KASSERT(priority == CAM_PRIORITY_DEV, + ("Expected priority %d, found %d in state iddir", + CAM_PRIORITY_DEV, priority)); + id_dir = malloc(sizeof(*id_dir), M_ATADA, M_NOWAIT | M_ZERO); if (id_dir == NULL) { xpt_print(periph->path, "Couldn't malloc id_dir " @@ -2643,6 +2679,10 @@ out: { struct ata_identify_log_sup_cap *sup_cap; + KASSERT(priority == CAM_PRIORITY_DEV, + ("Expected priority %d, found %d in state sup_cap", + CAM_PRIORITY_DEV, priority)); + sup_cap = malloc(sizeof(*sup_cap), M_ATADA, M_NOWAIT|M_ZERO); if (sup_cap == NULL) { xpt_print(periph->path, "Couldn't malloc sup_cap " @@ -2671,6 +2711,10 @@ out: { struct ata_zoned_info_log *ata_zone; + KASSERT(priority == CAM_PRIORITY_DEV, + ("Expected priority %d, found %d in state zone", + CAM_PRIORITY_DEV, priority)); + ata_zone = malloc(sizeof(*ata_zone), M_ATADA, M_NOWAIT|M_ZERO); if (ata_zone == NULL) { xpt_print(periph->path, "Couldn't malloc ata_zone " @@ -2896,6 +2940,10 @@ adadone(struct cam_periph *periph, union ccb *done_ccb) struct bio *bp; int error; + KASSERT(priority == CAM_PRIORITY_NORMAL, + ("Expected priority %d, found %d for normal I/O", + CAM_PRIORITY_NORMAL, priority)); + cam_periph_lock(periph); bp = (struct bio *)done_ccb->ccb_h.ccb_bp; if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { @@ -3000,6 +3048,10 @@ adadone(struct cam_periph *periph, union ccb *done_ccb) } case ADA_CCB_RAHEAD: { + KASSERT(priority == CAM_PRIORITY_DEV, + ("Expected priority %d, found %d in ccb state rahead", + CAM_PRIORITY_DEV, priority)); + if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { if (adaerror(done_ccb, 0, 0) == ERESTART) { /* Drop freeze taken due to CAM_DEV_QFREEZE */ @@ -3023,6 +3075,10 @@ adadone(struct cam_periph *periph, union ccb *done_ccb) } case ADA_CCB_WCACHE: { + KASSERT(priority == CAM_PRIORITY_DEV, + ("Expected priority %d, found %d in ccb state wcache", + CAM_PRIORITY_DEV, priority)); + if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { if (adaerror(done_ccb, 0, 0) == ERESTART) { /* Drop freeze taken due to CAM_DEV_QFREEZE */ @@ -3054,6 +3110,10 @@ adadone(struct cam_periph *periph, union ccb *done_ccb) { int error; + KASSERT(priority == CAM_PRIORITY_DEV, + ("Expected priority %d, found %d in ccb state logdir", + CAM_PRIORITY_DEV, priority)); + if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) { error = 0; softc->valid_logdir_len = 0; @@ -3123,6 +3183,10 @@ adadone(struct cam_periph *periph, union ccb *done_ccb) case ADA_CCB_IDDIR: { int error; + KASSERT(priority == CAM_PRIORITY_DEV, + ("Expected priority %d, found %d in ccb state iddir", + CAM_PRIORITY_DEV, priority)); + if ((ataio->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) { off_t entries_offset, max_entries; error = 0; @@ -3208,6 +3272,10 @@ adadone(struct cam_periph *periph, union ccb *done_ccb) case ADA_CCB_SUP_CAP: { int error; + KASSERT(priority == CAM_PRIORITY_DEV, + ("Expected priority %d, found %d in ccb state sup_cap", + CAM_PRIORITY_DEV, priority)); + if ((ataio->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) { uint32_t valid_len; size_t needed_size; @@ -3312,6 +3380,10 @@ adadone(struct cam_periph *periph, union ccb *done_ccb) case ADA_CCB_ZONE: { int error; + KASSERT(priority == CAM_PRIORITY_DEV, + ("Expected priority %d, found %d in ccb state zone", + CAM_PRIORITY_DEV, priority)); + if ((ataio->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) { struct ata_zoned_info_log *zi_log; uint32_t valid_len; diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c index c0c0be12856b..773a786d08f7 100644 --- a/sys/cam/scsi/scsi_da.c +++ b/sys/cam/scsi/scsi_da.c @@ -3369,12 +3369,33 @@ static void dastart(struct cam_periph *periph, union ccb *start_ccb) { struct da_softc *softc; + uint32_t priority = start_ccb->ccb_h.pinfo.priority; cam_periph_assert(periph, MA_OWNED); softc = (struct da_softc *)periph->softc; CAM_DEBUG(periph->path, CAM_DEBUG_TRACE, ("dastart\n")); + /* + * When we're running the state machine, we should only accept DEV CCBs. + * When we're doing normal I/O we should only accept NORMAL CCBs. + * + * While in the state machine, we carefully single step the queue, but + * there's no protection for 'extra' calls to xpt_schedule() at the + * wrong priority. Guard against that so that we filter any CCBs that + * are offered at the wrong priority. This avoids generating requests + * that are at normal priority. In addition, though we can't easily + * enforce it, one must not transition to the NORMAL state via the + * skipstate mechanism. +` */ + if ((softc->state != DA_STATE_NORMAL && priority != CAM_PRIORITY_DEV) || + (softc->state == DA_STATE_NORMAL && priority != CAM_PRIORITY_NORMAL)) { + xpt_print(periph->path, "Bad priority for state %d prio %d\n", + softc->state, priority); + xpt_release_ccb(start_ccb); + return; + } + skipstate: switch (softc->state) { case DA_STATE_NORMAL: diff --git a/sys/cddl/boot/zfs/zfsimpl.h b/sys/cddl/boot/zfs/zfsimpl.h index c9de1fe4c391..d3ae3c32635d 100644 --- a/sys/cddl/boot/zfs/zfsimpl.h +++ b/sys/cddl/boot/zfs/zfsimpl.h @@ -94,6 +94,7 @@ typedef enum { B_FALSE, B_TRUE } boolean_t; #define P2END(x, align) (-(~(x) & -(align))) #define P2PHASEUP(x, align, phase) ((phase) - (((phase) - (x)) & -(align))) #define P2BOUNDARY(off, len, align) (((off) ^ ((off) + (len) - 1)) > (align) - 1) +#define IS_P2ALIGNED(v, a) ((((uintptr_t)(v)) & ((uintptr_t)(a) - 1)) == 0) /* * General-purpose 32-bit and 64-bit bitfield encodings. @@ -498,19 +499,7 @@ typedef struct zio_eck { * Gang block headers are self-checksumming and contain an array * of block pointers. */ -#define SPA_GANGBLOCKSIZE SPA_MINBLOCKSIZE -#define SPA_GBH_NBLKPTRS ((SPA_GANGBLOCKSIZE - \ - sizeof (zio_eck_t)) / sizeof (blkptr_t)) -#define SPA_GBH_FILLER ((SPA_GANGBLOCKSIZE - \ - sizeof (zio_eck_t) - \ - (SPA_GBH_NBLKPTRS * sizeof (blkptr_t))) /\ - sizeof (uint64_t)) - -typedef struct zio_gbh { - blkptr_t zg_blkptr[SPA_GBH_NBLKPTRS]; - uint64_t zg_filler[SPA_GBH_FILLER]; - zio_eck_t zg_tail; -} zio_gbh_phys_t; +#define SPA_OLD_GANGBLOCKSIZE SPA_MINBLOCKSIZE #define VDEV_RAIDZ_MAXPARITY 3 diff --git a/sys/dev/safe/safe.c b/sys/dev/safe/safe.c index c512f3fc62c0..569bbe51e125 100644 --- a/sys/dev/safe/safe.c +++ b/sys/dev/safe/safe.c @@ -424,6 +424,8 @@ safe_attach(device_t dev) #ifdef SAFE_DEBUG safec = sc; /* for use by hw.safe.dump */ #endif + gone_in(16, "%s(4) is deprecated in 15.0 and removed in 16.0\n", + safe_driver->name); return (0); bad4: crypto_unregister_all(sc->sc_cid); diff --git a/sys/kern/kern_jail.c b/sys/kern/kern_jail.c index 1b9bd4cf62d5..26a994ef0c32 100644 --- a/sys/kern/kern_jail.c +++ b/sys/kern/kern_jail.c @@ -1065,8 +1065,10 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags) * than duplicate it under a different name. */ error = vfs_buildopts(optuio, &opts); - if (error) + if (error) { + opts = NULL; goto done_free; + } cuflags = flags & (JAIL_CREATE | JAIL_UPDATE); if (!cuflags) { @@ -2331,7 +2333,8 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags) (void)kern_close(td, jfd_out); if (g_path != NULL) free(g_path, M_TEMP); - vfs_freeopts(opts); + if (opts != NULL) + vfs_freeopts(opts); prison_free(mypr); return (error); } @@ -3043,19 +3046,14 @@ do_jail_attach(struct thread *td, struct prison *pr, int drflags) PROC_LOCK(p); oldcred = crcopysafe(p, newcred); newcred->cr_prison = pr; + proc_set_cred(p, newcred); + setsugid(p); #ifdef RACCT racct_proc_ucred_changed(p, oldcred, newcred); #endif #ifdef RCTL crhold(newcred); #endif - /* - * Takes over 'newcred''s reference, so 'newcred' must not be used - * besides this point except on RCTL where we took an additional - * reference above. - */ - proc_set_cred(p, newcred); - setsugid(p); PROC_UNLOCK(p); #ifdef RCTL rctl_proc_ucred_changed(p, newcred); diff --git a/sys/kern/kern_loginclass.c b/sys/kern/kern_loginclass.c index 07d388f18f8d..0c111c4f78d8 100644 --- a/sys/kern/kern_loginclass.c +++ b/sys/kern/kern_loginclass.c @@ -222,18 +222,13 @@ sys_setloginclass(struct thread *td, struct setloginclass_args *uap) PROC_LOCK(p); oldcred = crcopysafe(p, newcred); newcred->cr_loginclass = newlc; + proc_set_cred(p, newcred); #ifdef RACCT racct_proc_ucred_changed(p, oldcred, newcred); #endif #ifdef RCTL crhold(newcred); #endif - /* - * Takes over 'newcred''s reference, so 'newcred' must not be used - * besides this point except on RCTL where we took an additional - * reference above. - */ - proc_set_cred(p, newcred); PROC_UNLOCK(p); #ifdef RCTL rctl_proc_ucred_changed(p, newcred); diff --git a/sys/kern/kern_prot.c b/sys/kern/kern_prot.c index f93cee6d7698..3c145851b683 100644 --- a/sys/kern/kern_prot.c +++ b/sys/kern/kern_prot.c @@ -832,31 +832,22 @@ kern_setcred(struct thread *const td, const u_int flags, if (error != 0) goto unlock_finish; -#ifdef RACCT /* - * Hold a reference to 'new_cred', as we need to call some functions on - * it after proc_set_cred_enforce_proc_lim(). + * Set the new credentials, noting that they have changed. */ - crhold(new_cred); -#endif - - /* Set the new credentials. */ cred_set = proc_set_cred_enforce_proc_lim(p, new_cred); if (cred_set) { setsugid(p); + to_free_cred = old_cred; #ifdef RACCT - /* Adjust RACCT counters. */ racct_proc_ucred_changed(p, old_cred, new_cred); #endif - to_free_cred = old_cred; - MPASS(error == 0); - } else { -#ifdef RACCT - /* Matches the crhold() just before the containing 'if'. */ - crfree(new_cred); +#ifdef RCTL + crhold(new_cred); #endif + MPASS(error == 0); + } else error = EAGAIN; - } unlock_finish: PROC_UNLOCK(p); @@ -866,12 +857,10 @@ unlock_finish: * finishing operations. */ -#ifdef RACCT - if (cred_set) { #ifdef RCTL + if (cred_set) { rctl_proc_ucred_changed(p, new_cred); -#endif - /* Paired with the crhold() above. */ + /* Paired with the crhold() just above. */ crfree(new_cred); } #endif @@ -1002,19 +991,16 @@ sys_setuid(struct thread *td, struct setuid_args *uap) change_euid(newcred, uip); setsugid(p); } - + /* + * This also transfers the proc count to the new user. + */ + proc_set_cred(p, newcred); #ifdef RACCT racct_proc_ucred_changed(p, oldcred, newcred); #endif #ifdef RCTL crhold(newcred); #endif - /* - * Takes over 'newcred''s reference, so 'newcred' must not be used - * besides this point except on RCTL where we took an additional - * reference above. - */ - proc_set_cred(p, newcred); PROC_UNLOCK(p); #ifdef RCTL rctl_proc_ucred_changed(p, newcred); @@ -1418,18 +1404,13 @@ sys_setreuid(struct thread *td, struct setreuid_args *uap) change_svuid(newcred, newcred->cr_uid); setsugid(p); } + proc_set_cred(p, newcred); #ifdef RACCT racct_proc_ucred_changed(p, oldcred, newcred); #endif #ifdef RCTL crhold(newcred); #endif - /* - * Takes over 'newcred''s reference, so 'newcred' must not be used - * besides this point except on RCTL where we took an additional - * reference above. - */ - proc_set_cred(p, newcred); PROC_UNLOCK(p); #ifdef RCTL rctl_proc_ucred_changed(p, newcred); @@ -1571,18 +1552,13 @@ sys_setresuid(struct thread *td, struct setresuid_args *uap) change_svuid(newcred, suid); setsugid(p); } + proc_set_cred(p, newcred); #ifdef RACCT racct_proc_ucred_changed(p, oldcred, newcred); #endif #ifdef RCTL crhold(newcred); #endif - /* - * Takes over 'newcred''s reference, so 'newcred' must not be used - * besides this point except on RCTL where we took an additional - * reference above. - */ - proc_set_cred(p, newcred); PROC_UNLOCK(p); #ifdef RCTL rctl_proc_ucred_changed(p, newcred); @@ -2807,7 +2783,7 @@ cru2xt(struct thread *td, struct xucred *xcr) * 'enforce_proc_lim' being true and if no new process can be accounted to the * new real UID because of the current limit (see the inner comment for more * details) and the caller does not have privilege (PRIV_PROC_LIMIT) to override - * that. In this case, the reference to 'newcred' is not taken over. + * that. */ static bool _proc_set_cred(struct proc *p, struct ucred *newcred, bool enforce_proc_lim) diff --git a/sys/kern/kern_racct.c b/sys/kern/kern_racct.c index d1324935bdc3..17b64ad00bb5 100644 --- a/sys/kern/kern_racct.c +++ b/sys/kern/kern_racct.c @@ -949,10 +949,8 @@ racct_proc_exit(struct proc *p) } /* - * Called to signal credentials change, to move resource utilisation - * between raccts. Must be called with the proc lock held, in the same span as - * the credentials change itself (i.e., without the proc lock being unlocked - * between the two), but the order does not matter. + * Called after credentials change, to move resource utilisation + * between raccts. */ void racct_proc_ucred_changed(struct proc *p, struct ucred *oldcred, diff --git a/sys/modules/iwlwifi/Makefile b/sys/modules/iwlwifi/Makefile index 5d4830537a0b..6fe64a611900 100644 --- a/sys/modules/iwlwifi/Makefile +++ b/sys/modules/iwlwifi/Makefile @@ -91,7 +91,7 @@ CFLAGS+= -DCONFIG_IWLWIFI_DEVICE_TRACING=1 #CFLAGS+= -DCONFIG_THERMAL=1 #CFLAGS+= -DCONFIG_EFI=1 -# XXX-BZ how to do this just for pcie/drv.c (and gcc vs. clang)? -CFLAGS += -Wno-override-init -Wno-initializer-overrides +CWARNFLAGS.clang.drv.c+= -Wno-initializer-overrides +CWARNFLAGS.drv.c+= -Wno-override-init ${CWARNFLAGS.${COMPILER_TYPE}.${.IMPSRC:T}} .include <bsd.kmod.mk> diff --git a/sys/netinet/tcp_syncache.c b/sys/netinet/tcp_syncache.c index fa7035771714..6c072e0fec38 100644 --- a/sys/netinet/tcp_syncache.c +++ b/sys/netinet/tcp_syncache.c @@ -535,6 +535,10 @@ syncache_timer(void *xsch) TCPSTAT_INC(tcps_sndtotal); TCPSTAT_INC(tcps_sc_retransmitted); } else { + /* + * Most likely we are memory constrained, so free + * resources. + */ syncache_drop(sc, sch); TCPSTAT_INC(tcps_sc_dropped); } @@ -734,7 +738,7 @@ syncache_unreach(struct in_conninfo *inc, tcp_seq th_seq, uint16_t port) goto done; /* - * If we've rertransmitted 3 times and this is our second error, + * If we've retransmitted 3 times and this is our second error, * we remove the entry. Otherwise, we allow it to continue on. * This prevents us from incorrectly nuking an entry during a * spurious network outage. @@ -1562,6 +1566,10 @@ syncache_add(struct in_conninfo *inc, struct tcpopt *to, struct tcphdr *th, TCPSTAT_INC(tcps_sndacks); TCPSTAT_INC(tcps_sndtotal); } else { + /* + * Most likely we are memory constrained, so free + * resources. + */ syncache_drop(sc, sch); TCPSTAT_INC(tcps_sc_dropped); } @@ -1747,6 +1755,9 @@ syncache_add(struct in_conninfo *inc, struct tcpopt *to, struct tcphdr *th, TCPSTAT_INC(tcps_sndacks); TCPSTAT_INC(tcps_sndtotal); } else { + /* + * Most likely we are memory constrained, so free resources. + */ if (sc != &scs) syncache_free(sc); TCPSTAT_INC(tcps_sc_dropped); diff --git a/usr.sbin/freebsd-update/freebsd-update.sh b/usr.sbin/freebsd-update/freebsd-update.sh index 143d93a6dcc0..2a07bc1fb7bc 100644 --- a/usr.sbin/freebsd-update/freebsd-update.sh +++ b/usr.sbin/freebsd-update/freebsd-update.sh @@ -1103,7 +1103,7 @@ IDS_check_params () { check_pkgbase() { # Packaged base requires that pkg is bootstrapped. - if ! pkg -r ${BASEDIR} -N >/dev/null 2>/dev/null; then + if ! pkg -N -r ${BASEDIR} >/dev/null 2>/dev/null; then return 1 fi # uname(1) is used by pkg to determine ABI, so it should exist. diff --git a/usr.sbin/jail/jail.8 b/usr.sbin/jail/jail.8 index 9aed9b671b9e..3a925bda8174 100644 --- a/usr.sbin/jail/jail.8 +++ b/usr.sbin/jail/jail.8 @@ -1,3 +1,6 @@ +.\" +.\" SPDX-License-Identifier: BSD-2-Clause +.\" .\" Copyright (c) 2000, 2003 Robert N. M. Watson .\" Copyright (c) 2008-2012 James Gritton .\" All rights reserved. @@ -23,7 +26,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd October 8, 2025 +.Dd November 6, 2025 .Dt JAIL 8 .Os .Sh NAME @@ -1120,7 +1123,7 @@ process. This manual page documents the configuration steps necessary to support either of these steps, although the configuration steps may need to be refined based on local requirements. -.Ss "Setting up a Jail Directory Tree" +.Ss Setting up a Jail Directory Tree From Source To set up a jail directory tree containing an entire .Fx distribution, the following @@ -1133,8 +1136,19 @@ mkdir -p $D make world DESTDIR=$D make distribution DESTDIR=$D .Ed +.Ss Setting up a Jail Directory Tree from Distribution Files +To set up a jail directory tree containing an entire +.Fx +distribution, the following +.Xr sh 1 +command script can be used: +.Bd -literal -offset indent +D=/here/is/the/jail +mkdir -p $D +tar -xf /usr/freebsd-dist/base.txz -C $D --unlink +.Ed .Pp -In many cases this example would put far more in the jail than needed. +In many cases these examples would put far more in the jail than needed. In the other extreme case a jail might contain only one file: the executable to be run in the jail. .Pp diff --git a/usr.sbin/mixer/mixer.8 b/usr.sbin/mixer/mixer.8 index 819d8ae73ab1..d7de675bceee 100644 --- a/usr.sbin/mixer/mixer.8 +++ b/usr.sbin/mixer/mixer.8 @@ -19,7 +19,7 @@ .\" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN .\" THE SOFTWARE. .\" -.Dd August 14, 2024 +.Dd October 31, 2025 .Dt MIXER 8 .Os .Sh NAME @@ -28,7 +28,7 @@ .Sh SYNOPSIS .Nm .Op Fl f Ar device -.Op Fl d Ar pcmN | N Op Fl V Ar voss_device:mode +.Op Fl d Ar pcmX | X Op Fl V Ar voss_device:mode .Op Fl os .Op Ar dev Ns Op Cm \&. Ns Ar control Ns Op Cm \&= Ns Ar value .Ar ... @@ -47,10 +47,10 @@ The options are as follows: .It Fl a Print the values for all mixer devices available in the system .Pq see Sx FILES . -.It Fl d Ar pcmN | N +.It Fl d Ar pcmX | X Change the default audio card to -.Ar pcmN , -where N is the unit number (e.g for pcm0, the unit number is 0). +.Ar pcmX , +where X is the device's unit number (e.g for pcm0, the unit number is 0). See .Sx EXAMPLES on how to list all available audio devices in the system. @@ -246,30 +246,22 @@ makes the only recording device. .El .Sh FILES -.Bl -tag -width /dev/mixerN -compact -.It Pa /dev/mixerN -The mixer device, where -.Ar N -is the number of that device, for example -.Ar /dev/mixer0 . -PCM cards and mixers have a 1:1 relationship, which means that +.Bl -tag -width "/dev/mixerX" -compact +.It Pa /dev/mixerX +The mixer device, where X is the unit number of that device, +.Pa /dev/dsp* +devices and +.Pa /dev/mixer* +devices have a 1:1 relationship, which means that, for instance, .Pa /dev/mixer0 -is the mixer for -.Pa /dev/pcm0 -and so on. -By default, +is the mixer device for +.Pa /dev/dsp0 . +.It /dev/mixer +Alias to the default device's mixer device. .Nm -prints both the audio card's number and the mixer associated with it -in the form of -.Ar pcmN:mixer . -The -.Pa /dev/mixer -file, although it does not exist in the filesystem, points to the default -mixer device and is the file -.Nm -opens when the +opens this when the .Fl f Ar device -option has not been specified. +option is not specified. .El .Sh EXAMPLES List all available audio devices in the system: diff --git a/usr.sbin/periodic/etc/weekly/Makefile b/usr.sbin/periodic/etc/weekly/Makefile index d194a988acf0..a5483534c029 100644 --- a/usr.sbin/periodic/etc/weekly/Makefile +++ b/usr.sbin/periodic/etc/weekly/Makefile @@ -8,12 +8,11 @@ CONFS= 340.noid \ # NB: keep these sorted by MK_* knobs -.if ${MK_LOCATE} != "no" -CONFS+= 310.locate -.endif +CONFGROUPS.${MK_LOCATE}+= LOCATE +LOCATE= 310.locate -.if ${MK_MAN_UTILS} != "no" -CONFS+= 320.whatis -.endif +CONFGROUPS.${MK_MAN_UTILS}+= WHATIS +WHATISPACKAGE= mandoc +WHATIS= 320.whatis .include <bsd.prog.mk> diff --git a/usr.sbin/sysrc/sysrc.8 b/usr.sbin/sysrc/sysrc.8 index bdf3353c2cf9..cb32f72ea587 100644 --- a/usr.sbin/sysrc/sysrc.8 +++ b/usr.sbin/sysrc/sysrc.8 @@ -1,3 +1,6 @@ +.\" +.\" SPDX-License-Identifier: BSD-2-Clause +.\" .\" Copyright (c) 2011-2016 Devin Teske .\" All rights reserved. .\" @@ -408,62 +411,52 @@ and .It Pa /usr/local/etc/rc.conf.d/name/* .El .Sh EXAMPLES -Below are some simple examples of how -.Nm -can be used to query certain values from the -.Xr rc.conf 5 -collection of system configuration files: -.Pp -.Nm -sshd_enable -.Dl returns the value of $sshd_enable, usually YES or NO . +.Ss Working with rc.conf files +Ask the value of +.Cm sshd_enable , +usually YES or NO: +.Dl sysrc sshd_enable .Pp -.Nm -defaultrouter -.Dl returns IP address of default router Pq if configured . -.Pp -Working on other files, such as +Return the IP address of default router +.Pq if configured : +.Dl sysrc defaultrouter +.Ss Working with other files +Return the value of the MAILTO setting, if configured, from .Xr crontab 5 : +.Dl sysrc -f /etc/crontab MAILTO .Pp -.Nm --f /etc/crontab MAILTO -.Dl returns the value of the MAILTO setting Pq if configured . -.Pp -Appending to existing values: -.Pp -.Nm -\&cloned_interfaces+=gif0 -.Dl appends Qo gif0 Qc to $cloned_interfaces Pq see APPENDING VALUES . -.Pp -.Nm -\&cloned_interfaces-=gif0 -.Dl removes Qo gif0 Qc from $cloned_interfaces Pq see SUBTRACTING VALUES . -.Pp -In addition to the above syntax, -.Nm -also supports inline -.Xr sh 1 -PARAMETER expansion for changing the way values are reported, shown below: +Append +.Dq gif0 +to $cloned_interfaces +.Pq see Sx APPENDING VALUES : +.Dl sysrc cloned_interfaces+=gif0 .Pp -.Nm -\&'hostname%%.*' -.Dl returns $hostname up to (but not including) first `.' . +Remove +.Dq gif0 +from $cloned_interfaces +.Pq see Sx SUBTRACTING VALUES : +.Dl sysrc cloned_interfaces-=gif0 +.Ss Inline shell parameter expansion +Return $hostname up to, but not including, first +.Ql \&. : +.Dl sysrc 'hostname%%.*' .Pp -.Nm -\&'network_interfaces%%[$IFS]*' -.Dl returns first word of $network_interfaces . +Return first word of $network_interfaces: +.Dl sysrc 'network_interfaces%%[$IFS]*' .Pp -.Nm -\&'ntpdate_flags##*[$IFS]' -.Dl returns last word of $ntpdate_flags (time server address) . +Return last word of $ntpdate_flags +.Pq time server address : +.Dl sysrc 'ntpdate_flags##*[$IFS]' .Pp -.Nm -usbd_flags-"default" -.Dl returns $usbd_flags or "default" if unset or NULL . +Return $usbd_flags or +.Dq default +if unset or NULL: +.Dl sysrc usbd_flags-"default" .Pp -.Nm -cloned_interfaces+"alternate" -.Dl returns "alternate" if $cloned_interfaces is set . +Return +.Dq alternate +if $cloned_interfaces is set: +.Dl sysrc cloned_interfaces+"alternate" .Sh SEE ALSO .Xr rc.conf 5 , .Xr jail 8 , |
