diff options
79 files changed, 1031 insertions, 279 deletions
| diff --git a/contrib/llvm-project/clang/lib/Driver/ToolChains/FreeBSD.h b/contrib/llvm-project/clang/lib/Driver/ToolChains/FreeBSD.h index 7ab63905ed4f..7d090ba682b3 100644 --- a/contrib/llvm-project/clang/lib/Driver/ToolChains/FreeBSD.h +++ b/contrib/llvm-project/clang/lib/Driver/ToolChains/FreeBSD.h @@ -78,6 +78,11 @@ public:    void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs,                           llvm::opt::ArgStringList &CC1Args) const override; +  bool IsAArch64OutlineAtomicsDefault( +      const llvm::opt::ArgList &Args) const override { +    return true; +  } +    UnwindTableLevel    getDefaultUnwindTableLevel(const llvm::opt::ArgList &Args) const override;    bool isPIEDefault(const llvm::opt::ArgList &Args) const override; diff --git a/contrib/pjdfstest/tests/ftruncate/12.t b/contrib/pjdfstest/tests/ftruncate/12.t index 98f3daeaf461..022f2cdae47a 100644 --- a/contrib/pjdfstest/tests/ftruncate/12.t +++ b/contrib/pjdfstest/tests/ftruncate/12.t @@ -22,7 +22,7 @@ EFBIG|EINVAL)  	;;  *)  	echo "not ok ${ntest}" -	ntest=`expr ${ntest} + 1` +	ntest=$((ntest + 1))  	;;  esac  expect 0 unlink ${n0} diff --git a/contrib/pjdfstest/tests/link/05.t b/contrib/pjdfstest/tests/link/05.t index 5a18c2103e1d..4641e3605efb 100644 --- a/contrib/pjdfstest/tests/link/05.t +++ b/contrib/pjdfstest/tests/link/05.t @@ -2,7 +2,7 @@  # vim: filetype=sh noexpandtab ts=8 sw=8  # $FreeBSD: head/tools/regression/pjdfstest/tests/link/05.t 211352 2010-08-15 21:24:17Z pjd $ -desc="link returns EMLINK if the link count of the file named by name1 would exceed 32767" +desc="link returns EMLINK if the link count of the file named by name1 would exceed {PC_LINK_MAX}"  dir=`dirname $0`  . ${dir}/../misc.sh @@ -16,19 +16,20 @@ n1=`namegen`  n2=`namegen`  expect 0 mkdir ${n0} 0755 -n=`mdconfig -a -n -t malloc -s 1m` || exit +n=`mdconfig -a -n -t malloc -s 2m` || exit  newfs -i 1 /dev/md${n} >/dev/null || exit  mount /dev/md${n} ${n0} || exit +link_max=`${fstest} pathconf ${n0} _PC_LINK_MAX`  expect 0 create ${n0}/${n1} 0644  i=1 -while :; do +while [ ${i} -le ${link_max} ]; do  	link ${n0}/${n1} ${n0}/${i} >/dev/null 2>&1  	if [ $? -ne 0 ]; then  		break  	fi -	i=`expr $i + 1` +	i=$((i + 1))  done -test_check $i -eq 32767 +test_check $i -eq ${link_max}  expect EMLINK link ${n0}/${n1} ${n0}/${n2} diff --git a/contrib/pjdfstest/tests/link/15.t b/contrib/pjdfstest/tests/link/15.t index cb41ad503370..0dc7648df5cb 100644 --- a/contrib/pjdfstest/tests/link/15.t +++ b/contrib/pjdfstest/tests/link/15.t @@ -26,7 +26,7 @@ while :; do  	if [ $? -ne 0 ]; then  		break  	fi -	i=`expr $i + 1` +	i=$((i + 1))  done  expect ENOSPC link ${n0}/${n1} ${n0}/${n2}  umount /dev/md${n} diff --git a/contrib/pjdfstest/tests/mkdir/11.t b/contrib/pjdfstest/tests/mkdir/11.t index 118ca3af8896..f162f6d4eb86 100644 --- a/contrib/pjdfstest/tests/mkdir/11.t +++ b/contrib/pjdfstest/tests/mkdir/11.t @@ -24,7 +24,7 @@ while :; do  	if [ $? -ne 0 ]; then  		break  	fi -	i=`expr $i + 1` +	i=$((i + 1))  done  expect ENOSPC mkdir ${n0}/${n1} 0755  umount /dev/md${n} diff --git a/contrib/pjdfstest/tests/mkfifo/11.t b/contrib/pjdfstest/tests/mkfifo/11.t index 39cfea4e40f7..73d4a5d09f30 100644 --- a/contrib/pjdfstest/tests/mkfifo/11.t +++ b/contrib/pjdfstest/tests/mkfifo/11.t @@ -24,7 +24,7 @@ while :; do  	if [ $? -ne 0 ]; then  		break  	fi -	i=`expr $i + 1` +	i=$((i + 1))  done  expect ENOSPC mkfifo ${n0}/${n1} 0644  umount /dev/md${n} diff --git a/contrib/pjdfstest/tests/open/19.t b/contrib/pjdfstest/tests/open/19.t index 4bc2df2a4313..e3c5b35fd96b 100644 --- a/contrib/pjdfstest/tests/open/19.t +++ b/contrib/pjdfstest/tests/open/19.t @@ -24,7 +24,7 @@ while :; do  	if [ $? -ne 0 ]; then  		break  	fi -	i=`expr $i + 1` +	i=$((i + 1))  done  expect ENOSPC open ${n0}/${i} O_RDONLY,O_CREAT 0644  umount /dev/md${n} diff --git a/contrib/pjdfstest/tests/symlink/11.t b/contrib/pjdfstest/tests/symlink/11.t index b1be674370ad..5d5e864674d6 100644 --- a/contrib/pjdfstest/tests/symlink/11.t +++ b/contrib/pjdfstest/tests/symlink/11.t @@ -24,7 +24,7 @@ while :; do  	if [ $? -ne 0 ]; then  		break  	fi -	i=`expr $i + 1` +	i=$((i + 1))  done  expect ENOSPC symlink test ${n0}/${n1}  umount /dev/md${n} diff --git a/contrib/pjdfstest/tests/truncate/12.t b/contrib/pjdfstest/tests/truncate/12.t index 98f3daeaf461..022f2cdae47a 100644 --- a/contrib/pjdfstest/tests/truncate/12.t +++ b/contrib/pjdfstest/tests/truncate/12.t @@ -22,7 +22,7 @@ EFBIG|EINVAL)  	;;  *)  	echo "not ok ${ntest}" -	ntest=`expr ${ntest} + 1` +	ntest=$((ntest + 1))  	;;  esac  expect 0 unlink ${n0} diff --git a/lib/geom/shsec/gshsec.8 b/lib/geom/shsec/gshsec.8 index d4477de3a71e..f80ab9384fe3 100644 --- a/lib/geom/shsec/gshsec.8 +++ b/lib/geom/shsec/gshsec.8 @@ -1,3 +1,6 @@ +.\" +.\" SPDX-License-Identifier: BSD-2-Clause +.\"  .\" Copyright (c) 2005 Pawel Jakub Dawidek <pjd@FreeBSD.org>  .\" All rights reserved.  .\" @@ -64,7 +67,7 @@ the rest of them.  The first argument to  .Nm  indicates an action to be performed: -.Bl -tag -width ".Cm destroy" +.Bl -tag -width indent  .It Cm label  Set up a shared secret device from the given components with the specified  .Ar name . @@ -92,7 +95,7 @@ See  .El  .Pp  Additional options: -.Bl -tag -width ".Fl f" +.Bl -tag -width indent  .It Fl f  Force the removal of the specified shared secret device.  .It Fl h diff --git a/lib/libc/gen/sysconf.3 b/lib/libc/gen/sysconf.3 index e38357b898a7..290ef0dc158c 100644 --- a/lib/libc/gen/sysconf.3 +++ b/lib/libc/gen/sysconf.3 @@ -25,7 +25,7 @@  .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  .\" SUCH DAMAGE.  .\" -.Dd April 26, 2013 +.Dd August 30, 2025  .Dt SYSCONF 3  .Os  .Sh NAME @@ -77,7 +77,9 @@ The maximum number of supplemental groups.  .It Li _SC_NPROCESSORS_CONF  The number of processors configured.  .It Li _SC_NPROCESSORS_ONLN -The number of processors currently online. +The number of processors currently online, taking into account current jail +restrictions to report only the number of processors that are usable to the +process.  .It Li _SC_OPEN_MAX  One more than the maximum value the system may assign to a new file descriptor.  .It Li _SC_PAGESIZE diff --git a/lib/libc/gen/sysconf.c b/lib/libc/gen/sysconf.c index b5b732eed05d..87aedc07c110 100644 --- a/lib/libc/gen/sysconf.c +++ b/lib/libc/gen/sysconf.c @@ -72,6 +72,7 @@ long  sysconf(int name)  {  	struct rlimit rl; +	cpuset_t cpus;  	size_t len;  	int mib[2], sverrno, value;  	long lvalue, defaultresult; @@ -581,8 +582,21 @@ yesno:  		return (_POSIX_IPV6);  #endif -	case _SC_NPROCESSORS_CONF:  	case _SC_NPROCESSORS_ONLN: +		/* +		 * Consult our root set first, because our CPU availability +		 * may not match the total number of CPUs available on the +		 * system and we may have a non-uniform layout even within +		 * userland.  In particular, each jail has a root set that can +		 * be constrained by its parent and processes within the jail +		 * cannot widen beyond those constraints, so to those processes +		 * it makes sense to claim the more limited count. +		 */ +		if (cpuset_getaffinity(CPU_LEVEL_ROOT, CPU_WHICH_PID, -1, +		    sizeof(cpus), &cpus) == 0) +			return (CPU_COUNT(&cpus)); +		/* FALLTHROUGH */ +	case _SC_NPROCESSORS_CONF:  		if (_elf_aux_info(AT_NCPUS, &value, sizeof(value)) == 0)  			return ((long)value);  		mib[0] = CTL_HW; diff --git a/lib/libc/tests/sys/cpuset_test.c b/lib/libc/tests/sys/cpuset_test.c index 53d6a8215bbc..c8ad225fadfc 100644 --- a/lib/libc/tests/sys/cpuset_test.c +++ b/lib/libc/tests/sys/cpuset_test.c @@ -34,8 +34,10 @@  #include <sys/uio.h>  #include <sys/wait.h> +#include <assert.h>  #include <errno.h>  #include <stdio.h> +#include <stdlib.h>  #include <unistd.h>  #include <atf-c.h> @@ -107,6 +109,19 @@ skip_ltncpu(int ncpu, cpuset_t *mask)  		atf_tc_skip("Test requires %d or more cores.", ncpu);  } +static void +skip_ltncpu_root(int ncpu, cpuset_t *mask) +{ + +	CPU_ZERO(mask); +	ATF_REQUIRE_EQ(0, cpuset_getaffinity(CPU_LEVEL_ROOT, CPU_WHICH_PID, +	    -1, sizeof(*mask), mask)); +	if (CPU_COUNT(mask) < ncpu) { +		atf_tc_skip("Test requires cpuset root with %d or more cores.", +		    ncpu); +	} +} +  ATF_TC(newset);  ATF_TC_HEAD(newset, tc)  { @@ -234,9 +249,8 @@ ATF_TC_BODY(deadlk, tc)  }  static int -do_jail(int sock) +create_jail(void)  { -	struct jail_test_info info;  	struct iovec iov[2];  	char *name;  	int error; @@ -250,8 +264,22 @@ do_jail(int sock)  	iov[1].iov_base = name;  	iov[1].iov_len = strlen(name) + 1; -	if (jail_set(iov, 2, JAIL_CREATE | JAIL_ATTACH) < 0) +	error = jail_set(iov, 2, JAIL_CREATE | JAIL_ATTACH); +	free(name); +	if (error < 0)  		return (FAILURE_JAIL); +	return (0); +} + +static int +do_jail(int sock) +{ +	struct jail_test_info info; +	int error; + +	error = create_jail(); +	if (error != 0) +		return (error);  	/* Record parameters, kick them over, then make a swift exit. */  	CPU_ZERO(&info.jail_tidmask); @@ -641,6 +669,111 @@ ATF_TC_BODY(jail_attach_disjoint, tc)  	try_attach(jid, &smask);  } +struct nproc_info { +	long		nproc_init; +	long		nproc_final; +	long		nproc_global; +}; + +ATF_TC(jail_nproc); +ATF_TC_HEAD(jail_nproc, tc) +{ +	atf_tc_set_md_var(tc, "descr", +	    "Test that _SC_PROCESSORS_ONLN reflects jail cpuset constraints"); +} +ATF_TC_BODY(jail_nproc, tc) +{ +	cpuset_t jmask; +	struct nproc_info ninfo = { }; +	int sockpair[2]; +	cpusetid_t setid; +	ssize_t readsz; +	pid_t pid; +	int fcpu, error, pfd, sock; +	char okb = 0x7f, rcvb; + +	skip_ltncpu_root(2, &jmask); +	fcpu = CPU_FFS(&jmask) - 1; + +	/* +	 * Just adjusting our affinity should not affect the number of +	 * processors considered online- we want to be sure that it's only +	 * adjusted if our jail's root set is. +	 */ +	CPU_CLR(fcpu, &jmask); +	error = cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, +	    sizeof(jmask), &jmask); +	ATF_REQUIRE_EQ(0, error); +	ATF_REQUIRE(sysconf(_SC_NPROCESSORS_ONLN) > CPU_COUNT(&jmask)); + +	ATF_REQUIRE_EQ(0, socketpair(PF_UNIX, SOCK_STREAM, 0, sockpair)); + +	/* We'll wait on the procdesc, too, so we can fail faster if it dies. */ +	ATF_REQUIRE((pid = pdfork(&pfd, 0)) != -1); + +	if (pid == 0) { +		/* First child sets up the jail. */ +		sock = sockpair[SP_CHILD]; +		close(sockpair[SP_PARENT]); + +		error = create_jail(); +		if (error != 0) +			_exit(error); + +		ninfo.nproc_init = sysconf(_SC_NPROCESSORS_ONLN); + +		/* Signal the parent that we're jailed. */ +		readsz = write(sock, &okb, sizeof(okb)); +		assert(readsz == sizeof(okb)); + +		/* Wait for parent to adjust our mask and signal OK. */ +		readsz = read(sock, &rcvb, sizeof(rcvb)); +		assert(readsz == sizeof(rcvb)); +		assert(rcvb == okb); + +		ninfo.nproc_final = sysconf(_SC_NPROCESSORS_ONLN); +		ninfo.nproc_global = sysconf(_SC_NPROCESSORS_CONF); +		readsz = write(sock, &ninfo, sizeof(ninfo)); +		assert(readsz == sizeof(ninfo)); + +		_exit(0); +	} + +	close(sockpair[SP_CHILD]); +	sock = sockpair[SP_PARENT]; + +	/* Wait for signal that they are jailed. */ +	readsz = read(sock, &rcvb, sizeof(rcvb)); +	assert(readsz == sizeof(rcvb)); +	assert(rcvb == okb); + +	/* Grab the cpuset id and adjust it. */ +	error = cpuset_getid(CPU_LEVEL_ROOT, CPU_WHICH_PID, pid, &setid); +	ATF_REQUIRE_EQ(0, error); +	error = cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_CPUSET, +	    setid, sizeof(jmask), &jmask); +	ATF_REQUIRE_EQ(0, error); + +	/* Signal OK to proceed. */ +	readsz = write(sock, &okb, sizeof(okb)); +	ATF_REQUIRE_EQ(sizeof(okb), readsz); + +	/* Grab our final nproc info. */ +	readsz = read(sock, &ninfo, sizeof(ninfo)); +	ATF_REQUIRE_EQ(sizeof(ninfo), readsz); + +	/* +	 * We set our own affinity to jmask, which is derived from *our* root +	 * set, at the beginning of the test.  The jail would inherit from this +	 * set, so we just re-use that mask here to confirm that +	 * _SC_NPROCESSORS_ONLN did actually drop in response to us limiting the +	 * jail, and that its _SC_NPROCESSORS_CONF did not. +	 */ +	ATF_REQUIRE_EQ(CPU_COUNT(&jmask) + 1, ninfo.nproc_init); +	ATF_REQUIRE_EQ(CPU_COUNT(&jmask) + 1, ninfo.nproc_global); +	ATF_REQUIRE_EQ(CPU_COUNT(&jmask), ninfo.nproc_final); +} +  ATF_TC(badparent);  ATF_TC_HEAD(badparent, tc)  { @@ -686,6 +819,7 @@ ATF_TP_ADD_TCS(tp)  	ATF_TP_ADD_TC(tp, jail_attach_prevbase);  	ATF_TP_ADD_TC(tp, jail_attach_plain);  	ATF_TP_ADD_TC(tp, jail_attach_disjoint); +	ATF_TP_ADD_TC(tp, jail_nproc);  	ATF_TP_ADD_TC(tp, badparent);  	return (atf_no_error());  } diff --git a/lib/libutil/login_class.c b/lib/libutil/login_class.c index c3c1b0ddda27..9478b4dc98ca 100644 --- a/lib/libutil/login_class.c +++ b/lib/libutil/login_class.c @@ -543,7 +543,7 @@ setusercontext(login_cap_t *lc, const struct passwd *pwd, uid_t uid, unsigned in      /* we need a passwd entry to set these */      if (pwd == NULL) -	flags &= ~(LOGIN_SETGROUP | LOGIN_SETLOGIN | LOGIN_SETMAC); +	flags &= ~(LOGIN_SETGROUP | LOGIN_SETLOGIN);      /* Set the process priority */      if (flags & LOGIN_SETPRIORITY) @@ -564,6 +564,27 @@ setusercontext(login_cap_t *lc, const struct passwd *pwd, uid_t uid, unsigned in  	}      } +    /* Set the sessions login */ +    if ((flags & LOGIN_SETLOGIN) && setlogin(pwd->pw_name) != 0) { +	syslog(LOG_ERR, "setlogin(%s): %m", pwd->pw_name); +	login_close(llc); +	return (-1); +    } + +    /* Inform the kernel about current login class */ +    if (lc != NULL && lc->lc_class != NULL && (flags & LOGIN_SETLOGINCLASS)) { +	error = setloginclass(lc->lc_class); +	if (error != 0) { +	    syslog(LOG_ERR, "setloginclass(%s): %m", lc->lc_class); +#ifdef notyet +	    login_close(llc); +	    return (-1); +#endif +	} +    } + +    setlogincontext(lc, pwd, flags); +      /* Set up the user's MAC label. */      if ((flags & LOGIN_SETMAC) && mac_is_present(NULL) == 1) {  	const char *label_string; @@ -572,8 +593,10 @@ setusercontext(login_cap_t *lc, const struct passwd *pwd, uid_t uid, unsigned in  	label_string = login_getcapstr(lc, "label", NULL, NULL);  	if (label_string != NULL) {  	    if (mac_from_text(&label, label_string) == -1) { -		syslog(LOG_ERR, "mac_from_text('%s') for %s: %m", -		    pwd->pw_name, label_string); +		syslog(LOG_ERR, "mac_from_text('%s') for %s %s: %m", +		    label_string, pwd != NULL ? "user" : "class", +		    pwd != NULL ? pwd->pw_name : lc->lc_class); +		login_close(llc);  		return (-1);  	    }  	    if (mac_set_proc(label) == -1) @@ -582,33 +605,15 @@ setusercontext(login_cap_t *lc, const struct passwd *pwd, uid_t uid, unsigned in  		error = 0;  	    mac_free(label);  	    if (error != 0) { -		syslog(LOG_ERR, "mac_set_proc('%s') for %s: %s", -		    label_string, pwd->pw_name, strerror(error)); +		syslog(LOG_ERR, "mac_set_proc('%s') for %s %s: %s", +		    label_string, pwd != NULL ? "user" : "class", +		    pwd != NULL ? pwd->pw_name : lc->lc_class, strerror(error)); +		login_close(llc);  		return (-1);  	    }  	}      } -    /* Set the sessions login */ -    if ((flags & LOGIN_SETLOGIN) && setlogin(pwd->pw_name) != 0) { -	syslog(LOG_ERR, "setlogin(%s): %m", pwd->pw_name); -	login_close(llc); -	return (-1); -    } - -    /* Inform the kernel about current login class */ -    if (lc != NULL && lc->lc_class != NULL && (flags & LOGIN_SETLOGINCLASS)) { -	error = setloginclass(lc->lc_class); -	if (error != 0) { -	    syslog(LOG_ERR, "setloginclass(%s): %m", lc->lc_class); -#ifdef notyet -	    login_close(llc); -	    return (-1); -#endif -	} -    } - -    setlogincontext(lc, pwd, flags);      login_close(llc);      /* This needs to be done after anything that needs root privs */ diff --git a/libexec/rc/rc.subr b/libexec/rc/rc.subr index 8317ff5c0922..e4ad14f582d6 100644 --- a/libexec/rc/rc.subr +++ b/libexec/rc/rc.subr @@ -121,11 +121,22 @@ dotted=  dot()  {  	local f verify +	local dot_dir dot_file  	o_verify_set off verify  	for f in "$@"; do  		if [ -f $f -a -s $f ]; then  			dotted="$dotted $f" +			case $f in +			*/*) +				dot_dir=${f%/*} +				dot_file=${f##*/} +				;; +			*) +				dot_dir=. +				dot_file=$f +				;; +			esac  			. $f  		fi  	done @@ -152,8 +163,7 @@ vdot()  	for f in "$@"; do  		[ -f $f -a -s $f ] || continue  		if is_verified $f 2> /dev/null; then -			dotted="$dotted $f" -			. $f +			dot $f  		else  			rc=80	# EAUTH  		fi diff --git a/release/Makefile.vm b/release/Makefile.vm index 336e8fc82299..a04f779ebebb 100644 --- a/release/Makefile.vm +++ b/release/Makefile.vm @@ -101,10 +101,13 @@ QEMUTGT=emulator-portinstall  .endif  QEMUTGT?= +.if (defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE)) || \ +    (defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES))  .if (defined(WITHOUT_QEMU) && !defined(NO_ROOT)) || \    (!defined(WITHOUT_QEMU) && defined(NO_ROOT))  .error WITHOUT_QEMU requires NO_ROOT (and vice versa)  .endif +.endif  .if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)  . for _CW in ${CLOUDWARE} diff --git a/sbin/ifconfig/ifconfig.8 b/sbin/ifconfig/ifconfig.8 index d4f8d2b5747a..627b7cd3f9e3 100644 --- a/sbin/ifconfig/ifconfig.8 +++ b/sbin/ifconfig/ifconfig.8 @@ -630,6 +630,9 @@ This is useful for devices which have multiple physical layer interfaces  .It Cm name Ar name  Set the interface name to  .Ar name . +The +.Ar name +may not be longer than 15 characters.  .It Cm rxcsum , txcsum , rxcsum6 , txcsum6  If the driver supports user-configurable checksum offloading,  enable receive (or transmit) checksum offloading on the interface. diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c index 3d2632c1cf74..02d6c9c84a32 100644 --- a/sbin/pfctl/pfctl.c +++ b/sbin/pfctl/pfctl.c @@ -2618,6 +2618,8 @@ pfctl_apply_limit(struct pfctl *pf, const char *opt, unsigned int limit)  int  pfctl_load_limit(struct pfctl *pf, unsigned int index, unsigned int limit)  { +	static int restore_limit_handler_armed = 0; +  	if (pfctl_set_limit(pf->h, index, limit)) {  		if (errno == EBUSY)  			warnx("Current pool size exceeds requested %s limit %u", @@ -2626,6 +2628,9 @@ pfctl_load_limit(struct pfctl *pf, unsigned int index, unsigned int limit)  			warnx("Cannot set %s limit to %u",  			    pf_limits[index].name, limit);  		return (1); +	} else if (restore_limit_handler_armed == 0) { +		atexit(pfctl_restore_limits); +		restore_limit_handler_armed = 1;  	}  	return (0);  } @@ -3474,7 +3479,6 @@ main(int argc, char *argv[])  	if ((opts & PF_OPT_NOACTION) == 0) {  		pfctl_read_limits(pfh); -		atexit(pfctl_restore_limits);  	}  	if (opts & PF_OPT_DISABLE) diff --git a/share/examples/mdoc/example.4 b/share/examples/mdoc/example.4 index e627f81af530..6983fb75fada 100644 --- a/share/examples/mdoc/example.4 +++ b/share/examples/mdoc/example.4 @@ -26,6 +26,9 @@ module at boot time, place the following line in  .Bd -literal -offset indent  example_load="YES"  .Ed +.Sh DEPRECATION NOTICE +This driver is scheduled for removal prior to the release of +.Fx 13.0 .  .Sh DESCRIPTION  This is an example device driver manual page for the  .Nm diff --git a/share/man/man5/style.Makefile.5 b/share/man/man5/style.Makefile.5 index fe8754924575..9a2f1b069d99 100644 --- a/share/man/man5/style.Makefile.5 +++ b/share/man/man5/style.Makefile.5 @@ -1,7 +1,7 @@  .\"  .\" SPDX-License-Identifier: BSD-3-Clause  .\" -.\" Copyright (c) 2002-2003, 2023 David O'Brien <obrien@FreeBSD.org> +.\" Copyright (c) 2002-2003, 2023, 2025 David O'Brien <deo@NUXI.org>  .\" All rights reserved.  .\"  .\" Redistribution and use in source and binary forms, with or without @@ -28,7 +28,7 @@  .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  .\" SUCH DAMAGE.  .\" -.Dd July 17, 2023 +.Dd October 29, 2025  .Dt STYLE.MAKEFILE 5  .Os  .Sh NAME @@ -179,6 +179,21 @@ settings between the  and  .Fl I Ns 's.  .It +Lists that span more than one line should be formatted as follows: +.Bd -literal -offset indent +SRCS+=<SP>\\ +<TAB>main.c<SP>\\ +<TAB>trace.c<SP>\\ +<TAB>zoo.c \\ +\& +.Ed +Specifically, the last item in the list should have a trailing '\\'. +This is to avoid causing a "false diff" or "false blame" when +a new item is appended at the end. +In general the list should be English language alphabetized. +A list of libraries or header inclusion paths are notable exceptions +if needed for proper building. +.It  Do not use GCCisms (such as  .Fl g  and @@ -233,9 +248,6 @@ For variables that are only checked with  .Fn defined ,  do not provide any fake value.  .El -.Pp -The desire to express a logical grouping often means not obeying some of the -above.  .Sh EXAMPLES  The simplest program  .Pa Makefile @@ -270,5 +282,7 @@ manual page and first appeared in  .An David O'Brien Aq deo@NUXI.org  .Sh BUGS  There are few hard and fast style rules here. +The desire to express a logical grouping sometimes means not obeying some of the +above.  The style of many things is too dependent on the context of the whole makefile,  or the lines surrounding it. diff --git a/share/man/man9/bus_alloc_resource.9 b/share/man/man9/bus_alloc_resource.9 index 84a4c9c530c9..5d309229a34e 100644 --- a/share/man/man9/bus_alloc_resource.9 +++ b/share/man/man9/bus_alloc_resource.9 @@ -26,7 +26,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 May 20, 2016 +.Dd October 30, 2025  .Dt BUS_ALLOC_RESOURCE 9  .Os  .Sh NAME @@ -43,14 +43,14 @@  .In machine/resource.h  .Ft struct resource *  .Fo bus_alloc_resource -.Fa "device_t dev" "int type" "int *rid" "rman_res_t start" "rman_res_t end" +.Fa "device_t dev" "int type" "int rid" "rman_res_t start" "rman_res_t end"  .Fa "rman_res_t count" "u_int flags"  .Fc  .Ft struct resource * -.Fn bus_alloc_resource_any "device_t dev" "int type" "int *rid" "u_int flags" +.Fn bus_alloc_resource_any "device_t dev" "int type" "int rid" "u_int flags"  .Ft struct resource *  .Fo bus_alloc_resource_anywhere -.Fa "device_t dev" "int type" "int *rid" "rman_res_t count" "u_int flags" +.Fa "device_t dev" "int type" "int rid" "rman_res_t count" "u_int flags"  .Fc  .Sh DESCRIPTION  This is an easy interface to the resource-management functions. @@ -106,15 +106,13 @@ for I/O memory  .El  .It  .Fa rid -points to a bus specific handle that identifies the resource being allocated. +is a bus specific handle that identifies the resource being allocated.  For ISA this is an index into an array of resources that have been setup  for this device by either the PnP mechanism, or via the hints mechanism.  For PCCARD, this is an index into the array of resources described by the PC Card's  CIS entry.  For PCI, the offset into PCI config space which has the BAR to use to access  the resource. -The bus methods are free to change the RIDs that they are given as a parameter. -You must not depend on the value you gave it earlier.  .It  .Fa start  and @@ -175,20 +173,12 @@ A pointer to  is returned on success, a null pointer otherwise.  .Sh EXAMPLES  This is some example code that allocates a 32 byte I/O port range and an IRQ. -The values of -.Va portid -and -.Va irqid -should be saved in the softc of the device after these calls.  .Bd -literal  	struct resource *portres, *irqres; -	int portid, irqid; -	portid = 0; -	irqid = 0; -	portres = bus_alloc_resource(dev, SYS_RES_IOPORT, &portid, +	portres = bus_alloc_resource(dev, SYS_RES_IOPORT, 0,  			0ul, ~0ul, 32, RF_ACTIVE); -	irqres = bus_alloc_resource_any(dev, SYS_RES_IRQ, &irqid, +	irqres = bus_alloc_resource_any(dev, SYS_RES_IRQ, 0,  			RF_ACTIVE | RF_SHAREABLE);  .Ed  .Sh SEE ALSO diff --git a/share/man/man9/bus_attach_children.9 b/share/man/man9/bus_attach_children.9 index 5e3ca4c5e906..81a24a428d8e 100644 --- a/share/man/man9/bus_attach_children.9 +++ b/share/man/man9/bus_attach_children.9 @@ -105,7 +105,7 @@ Detached devices are not deleted.  .Pp  .Fn bus_detach_children  is typically called at the start of a bus driver's -.Xr DEVICE_ATTACH 9 +.Xr DEVICE_DETACH 9  method to give child devices a chance to veto the detach request.  It is usually paired with a later call to  .Fn device_delete_children 9 diff --git a/sys/arm/broadcom/bcm2835/bcm2835_audio.c b/sys/arm/broadcom/bcm2835/bcm2835_audio.c index 13f309dd3f11..2df6ac76124f 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_audio.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_audio.c @@ -132,6 +132,7 @@ struct bcm2835_audio_info {  	uint32_t flags_pending; +	int verbose_trace;  	/* Worker thread state */  	int worker_state;  }; @@ -140,6 +141,29 @@ struct bcm2835_audio_info {  #define BCM2835_AUDIO_LOCKED(sc)	mtx_assert(&(sc)->lock, MA_OWNED)  #define BCM2835_AUDIO_UNLOCK(sc)	mtx_unlock(&(sc)->lock) +#define BCM2835_LOG_ERROR(sc,...)				\ +	do {							\ +		device_printf((sc)->dev, __VA_ARGS__);		\ +	} while(0) + +#define BCM2835_LOG_INFO(sc,...)				\ +	do {							\ +		if (sc->verbose_trace > 0)			\ +			device_printf((sc)->dev, __VA_ARGS__);	\ +	} while(0) + +#define BCM2835_LOG_WARN(sc,...) \ +	do {							\ +		if (sc->verbose_trace > 1)			\ +			device_printf((sc)->dev, __VA_ARGS__);	\ +	} while(0) + +#define BCM2835_LOG_TRACE(sc,...)				\ +	do {							\ +		if(sc->verbose_trace > 2)			\ +			device_printf((sc)->dev, __VA_ARGS__);	\ +	} while(0) +  static const char *  dest_description(uint32_t dest)  { @@ -236,8 +260,9 @@ bcm2835_audio_callback(void *param, const VCHI_CALLBACK_REASON_T reason, void *m  					device_printf(sc->dev, "available_space == %d, count = %d, perr=%d\n",  					    ch->available_space, count, perr);  					device_printf(sc->dev, -					    "retrieved_samples = %lld, submitted_samples = %lld\n", -					    ch->retrieved_samples, ch->submitted_samples); +					    "retrieved_samples = %ju, submitted_samples = %ju\n", +					    (uintmax_t)ch->retrieved_samples, +					    (uintmax_t)ch->submitted_samples);  				}  				ch->available_space += count;  				ch->retrieved_samples += count; @@ -247,7 +272,8 @@ bcm2835_audio_callback(void *param, const VCHI_CALLBACK_REASON_T reason, void *m  		}  		BCM2835_AUDIO_UNLOCK(sc);  	} else -		printf("%s: unknown m.type: %d\n", __func__, m.type); +		BCM2835_LOG_WARN(sc, "%s: unknown m.type: %d\n", __func__, +		    m.type);  }  /* VCHIQ stuff */ @@ -259,13 +285,13 @@ bcm2835_audio_init(struct bcm2835_audio_info *sc)  	/* Initialize and create a VCHI connection */  	status = vchi_initialise(&sc->vchi_instance);  	if (status != 0) { -		printf("vchi_initialise failed: %d\n", status); +		BCM2835_LOG_ERROR(sc, "vchi_initialise failed: %d\n", status);  		return;  	}  	status = vchi_connect(NULL, 0, sc->vchi_instance);  	if (status != 0) { -		printf("vchi_connect failed: %d\n", status); +		BCM2835_LOG_ERROR(sc, "vchi_connect failed: %d\n", status);  		return;  	} @@ -297,7 +323,8 @@ bcm2835_audio_release(struct bcm2835_audio_info *sc)  	if (sc->vchi_handle != VCHIQ_SERVICE_HANDLE_INVALID) {  		success = vchi_service_close(sc->vchi_handle);  		if (success != 0) -			printf("vchi_service_close failed: %d\n", success); +			BCM2835_LOG_ERROR(sc, "vchi_service_close failed: %d\n", +			    success);  		vchi_service_release(sc->vchi_handle);  		sc->vchi_handle = VCHIQ_SERVICE_HANDLE_INVALID;  	} @@ -327,7 +354,9 @@ bcm2835_audio_start(struct bcm2835_audio_chinfo *ch)  		    &m, sizeof m, VCHI_FLAGS_BLOCK_UNTIL_QUEUED, NULL);  		if (ret != 0) -			printf("%s: vchi_msg_queue failed (err %d)\n", __func__, ret); +			BCM2835_LOG_ERROR(sc, +			    "%s: vchi_msg_queue failed (err %d)\n", __func__, +			    ret);  	}  } @@ -346,7 +375,9 @@ bcm2835_audio_stop(struct bcm2835_audio_chinfo *ch)  		    &m, sizeof m, VCHI_FLAGS_BLOCK_UNTIL_QUEUED, NULL);  		if (ret != 0) -			printf("%s: vchi_msg_queue failed (err %d)\n", __func__, ret); +			BCM2835_LOG_ERROR(sc, +			    "%s: vchi_msg_queue failed (err %d)\n", __func__, +			    ret);  	}  } @@ -362,7 +393,9 @@ bcm2835_audio_open(struct bcm2835_audio_info *sc)  		    &m, sizeof m, VCHI_FLAGS_BLOCK_UNTIL_QUEUED, NULL);  		if (ret != 0) -			printf("%s: vchi_msg_queue failed (err %d)\n", __func__, ret); +			BCM2835_LOG_ERROR(sc, +			    "%s: vchi_msg_queue failed (err %d)\n", __func__, +			    ret);  	}  } @@ -384,7 +417,9 @@ bcm2835_audio_update_controls(struct bcm2835_audio_info *sc, uint32_t volume, ui  		    &m, sizeof m, VCHI_FLAGS_BLOCK_UNTIL_QUEUED, NULL);  		if (ret != 0) -			printf("%s: vchi_msg_queue failed (err %d)\n", __func__, ret); +			BCM2835_LOG_ERROR(sc, +			    "%s: vchi_msg_queue failed (err %d)\n", __func__, +			    ret);  	}  } @@ -404,7 +439,9 @@ bcm2835_audio_update_params(struct bcm2835_audio_info *sc, uint32_t fmt, uint32_  		    &m, sizeof m, VCHI_FLAGS_BLOCK_UNTIL_QUEUED, NULL);  		if (ret != 0) -			printf("%s: vchi_msg_queue failed (err %d)\n", __func__, ret); +			BCM2835_LOG_ERROR(sc, +			    "%s: vchi_msg_queue failed (err %d)\n", __func__, +			    ret);  	}  } @@ -452,14 +489,15 @@ bcm2835_audio_write_samples(struct bcm2835_audio_chinfo *ch, void *buf, uint32_t  	    &m, sizeof m, VCHI_FLAGS_BLOCK_UNTIL_QUEUED, NULL);  	if (ret != 0) -		printf("%s: vchi_msg_queue failed (err %d)\n", __func__, ret); +		BCM2835_LOG_ERROR(sc, "%s: vchi_msg_queue failed (err %d)\n", +		    __func__, ret);  	while (count > 0) {  		int bytes = MIN((int)m.u.write.max_packet, (int)count);  		ret = vchi_msg_queue(sc->vchi_handle,  		    buf, bytes, VCHI_FLAGS_BLOCK_UNTIL_QUEUED, NULL);  		if (ret != 0) -			printf("%s: vchi_msg_queue failed: %d\n", +			BCM2835_LOG_ERROR(sc, "%s: vchi_msg_queue failed: %d\n",  			    __func__, ret);  		buf = (char *)buf + bytes;  		count -= bytes; @@ -577,7 +615,8 @@ bcm2835_audio_create_worker(struct bcm2835_audio_info *sc)  	sc->worker_state = WORKER_RUNNING;  	if (kproc_create(bcm2835_audio_worker, (void*)sc, &newp, 0, 0,  	    "bcm2835_audio_worker") != 0) { -		printf("failed to create bcm2835_audio_worker\n"); +		BCM2835_LOG_ERROR(sc, +		    "failed to create bcm2835_audio_worker\n");  	}  } @@ -830,6 +869,9 @@ vchi_audio_sysctl_init(struct bcm2835_audio_info *sc)  	SYSCTL_ADD_INT(ctx, tree, OID_AUTO, "starved",  			CTLFLAG_RD, &sc->pch.starved,  			sc->pch.starved, "number of starved conditions"); +	SYSCTL_ADD_INT(ctx, tree, OID_AUTO, "trace", +			CTLFLAG_RW, &sc->verbose_trace, +			sc->verbose_trace, "enable tracing of transfers");  }  static void @@ -861,6 +903,7 @@ bcm2835_audio_delayed_init(void *xsc)  	bcm2835_audio_open(sc);  	sc->volume = 75;  	sc->dest = DEST_AUTO; +	sc->verbose_trace = 0;      	if (mixer_init(sc->dev, &bcmmixer_class, sc)) {  		device_printf(sc->dev, "mixer_init failed\n"); diff --git a/sys/arm/mv/mv_cp110_icu.c b/sys/arm/mv/mv_cp110_icu.c index 25ec19bee575..d30f337f56fc 100644 --- a/sys/arm/mv/mv_cp110_icu.c +++ b/sys/arm/mv/mv_cp110_icu.c @@ -257,7 +257,7 @@ mv_cp110_icu_init(struct mv_cp110_icu_softc *sc, uint64_t addr)  		WR4(sc, ICU_SETSPI_SEI_AH, (addr >> 32) & UINT32_MAX);  		break;  	default: -		panic("Unkown ICU type."); +		panic("Unknown ICU type.");  	}  	sc->initialized = true; diff --git a/sys/arm/ti/cpsw/if_cpsw.c b/sys/arm/ti/cpsw/if_cpsw.c index dc3d8b1f9023..e2cc9ee0d7b2 100644 --- a/sys/arm/ti/cpsw/if_cpsw.c +++ b/sys/arm/ti/cpsw/if_cpsw.c @@ -1646,7 +1646,7 @@ cpsw_rx_dequeue(struct cpsw_softc *sc)  		port = (bd.flags & CPDMA_BD_PORT_MASK) - 1;  		KASSERT(port >= 0 && port <= 1, -		    ("patcket received with invalid port: %d", port)); +		    ("packet received with invalid port: %d", port));  		psc = device_get_softc(sc->port[port].dev);  		/* Set up mbuf */ diff --git a/sys/arm64/nvidia/tegra210/max77620_regulators.c b/sys/arm64/nvidia/tegra210/max77620_regulators.c index af1a5af20ec3..d52aeaef1287 100644 --- a/sys/arm64/nvidia/tegra210/max77620_regulators.c +++ b/sys/arm64/nvidia/tegra210/max77620_regulators.c @@ -364,7 +364,7 @@ max77620_get_sel(struct max77620_reg_sc *sc, uint8_t *sel)  	rv = RD1(sc->base_sc, sc->def->volt_reg, sel);  	if (rv != 0) { -		printf("%s: cannot read volatge selector: %d\n", +		printf("%s: cannot read voltage selector: %d\n",  		    regnode_get_name(sc->regnode), rv);  		return (rv);  	} @@ -384,7 +384,7 @@ max77620_set_sel(struct max77620_reg_sc *sc, uint8_t sel)  	rv = RM1(sc->base_sc, sc->def->volt_reg,  	    sc->def->volt_vsel_mask, sel);  	if (rv != 0) { -		printf("%s: cannot set volatge selector: %d\n", +		printf("%s: cannot set voltage selector: %d\n",  		    regnode_get_name(sc->regnode), rv);  		return (rv);  	} diff --git a/sys/cam/ctl/ctl.c b/sys/cam/ctl/ctl.c index e110281f7c85..442ef1d30542 100644 --- a/sys/cam/ctl/ctl.c +++ b/sys/cam/ctl/ctl.c @@ -2123,7 +2123,7 @@ ctl_remove_initiator(struct ctl_port *port, int iid)  	mtx_assert(&softc->ctl_lock, MA_NOTOWNED);  	if (iid > CTL_MAX_INIT_PER_PORT) { -		printf("%s: initiator ID %u > maximun %u!\n", +		printf("%s: initiator ID %u > maximum %u!\n",  		       __func__, iid, CTL_MAX_INIT_PER_PORT);  		return (-1);  	} diff --git a/sys/cam/scsi/scsi_enc.c b/sys/cam/scsi/scsi_enc.c index 9705a0b890b4..65df32ead371 100644 --- a/sys/cam/scsi/scsi_enc.c +++ b/sys/cam/scsi/scsi_enc.c @@ -732,7 +732,7 @@ enc_update_request(enc_softc_t *enc, uint32_t action)  {  	if ((enc->pending_actions & (0x1 << action)) == 0) {  		enc->pending_actions |= (0x1 << action); -		ENC_DLOG(enc, "%s: queing requested action %d\n", +		ENC_DLOG(enc, "%s: queueing requested action %d\n",  		    __func__, action);  		if (enc->current_action == ENC_UPDATE_NONE)  			wakeup(enc->enc_daemon); diff --git a/sys/cam/scsi/scsi_enc_ses.c b/sys/cam/scsi/scsi_enc_ses.c index 3a362eaf11a4..838eecf78ad6 100644 --- a/sys/cam/scsi/scsi_enc_ses.c +++ b/sys/cam/scsi/scsi_enc_ses.c @@ -1623,7 +1623,7 @@ ses_process_status(enc_softc_t *enc, struct enc_fsm_state *state,  	} else {  		if (cur_stat <= last_stat)  			ENC_VLOG(enc, "Status page, exhausted objects before " -				"exhausing page\n"); +				"exhausting page\n");  		enc_update_request(enc, SES_PUBLISH_CACHE);  		err = 0;  	} diff --git a/sys/cddl/dev/fbt/aarch64/fbt_isa.c b/sys/cddl/dev/fbt/aarch64/fbt_isa.c index ffe2f37a6d16..6c789530442d 100644 --- a/sys/cddl/dev/fbt/aarch64/fbt_isa.c +++ b/sys/cddl/dev/fbt/aarch64/fbt_isa.c @@ -104,7 +104,7 @@ fbt_provide_module_function(linker_file_t lf, int symindx,  	 */  	 if (strcmp(name, "handle_el1h_sync") == 0 ||  	    strcmp(name, "do_el1h_sync") == 0) -		return (1); +		return (0);  	instr = (uint32_t *)(symval->value);  	limit = (uint32_t *)(symval->value + symval->size); diff --git a/sys/compat/linuxkpi/common/include/linux/pm.h b/sys/compat/linuxkpi/common/include/linux/pm.h index c8d943027909..932697e0eda8 100644 --- a/sys/compat/linuxkpi/common/include/linux/pm.h +++ b/sys/compat/linuxkpi/common/include/linux/pm.h @@ -97,4 +97,18 @@ pm_wakeup_event(struct device *dev __unused, unsigned int x __unused)  	pr_debug("%s: TODO\n", __func__);  } +/* + * We do not need to specify anything here as a VT switch always happens on + * suspend/resume. + */ +static inline void +pm_vt_switch_required(struct device *dev __unused, bool required __unused) +{ +} + +static inline void +pm_vt_switch_unregister(struct device *dev __unused) +{ +} +  #endif	/* _LINUXKPI_LINUX_PM_H */ diff --git a/sys/compat/linuxkpi/common/src/linux_page.c b/sys/compat/linuxkpi/common/src/linux_page.c index 628af17df853..9cc981b2ba43 100644 --- a/sys/compat/linuxkpi/common/src/linux_page.c +++ b/sys/compat/linuxkpi/common/src/linux_page.c @@ -345,6 +345,10 @@ retry:  	page = vm_page_grab_iter(vm_obj, pindex, VM_ALLOC_NOCREAT, &pages);  	if (page == NULL) {  		page = PHYS_TO_VM_PAGE(IDX_TO_OFF(pfn)); +		if (page == NULL) { +			pctrie_iter_reset(&pages); +			return (VM_FAULT_SIGBUS); +		}  		if (!vm_page_busy_acquire(page, VM_ALLOC_WAITFAIL)) {  			pctrie_iter_reset(&pages);  			goto retry; diff --git a/sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c b/sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c index 0150ce72f0a4..f4aee12dec53 100644 --- a/sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c +++ b/sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c @@ -204,8 +204,8 @@ vchiq_platform_init(VCHIQ_STATE_T *state)  	bcm_mbox_write(BCM2835_MBOX_CHAN_VCHIQ, (unsigned int)g_slot_phys);  	vchiq_log_info(vchiq_arm_log_level, -		"vchiq_init - done (slots %x, phys %x)", -		(unsigned int)vchiq_slot_zero, g_slot_phys); +		"vchiq_init - done (slots %zx, phys %zx)", +		(size_t)vchiq_slot_zero, g_slot_phys);     vchiq_call_connected_callbacks(); @@ -451,10 +451,7 @@ create_pagelist(char __user *buf, size_t count, unsigned short type,  	}  	vchiq_log_trace(vchiq_arm_log_level, -		"create_pagelist - %x (%d bytes @%p)", (unsigned int)pagelist, count, buf); - -	if (!pagelist) -		return -ENOMEM; +		"create_pagelist - %zx (%zu bytes @%p)", (size_t)pagelist, count, buf);  	addrs = pagelist->addrs;  	pages = (vm_page_t*)(addrs + num_pages); @@ -549,7 +546,7 @@ free_pagelist(BULKINFO_T *bi, int actual)  	pagelist = bi->pagelist;  	vchiq_log_trace(vchiq_arm_log_level, -		"free_pagelist - %x, %d (%lu bytes @%p)", (unsigned int)pagelist, actual, pagelist->length, bi->buf); +		"free_pagelist - %zx, %d (%u bytes @%p)", (size_t)pagelist, actual, pagelist->length, bi->buf);  	num_pages =  		(pagelist->length + pagelist->offset + PAGE_SIZE - 1) / diff --git a/sys/contrib/vchiq/interface/vchiq_arm/vchiq_arm.c b/sys/contrib/vchiq/interface/vchiq_arm/vchiq_arm.c index 763cd9ce9417..e25c4d738922 100644 --- a/sys/contrib/vchiq/interface/vchiq_arm/vchiq_arm.c +++ b/sys/contrib/vchiq/interface/vchiq_arm/vchiq_arm.c @@ -442,8 +442,8 @@ vchiq_ioctl(struct cdev *cdev, u_long cmd, caddr_t arg, int fflag,  #define	_IOC_TYPE(x)	IOCGROUP(x)  	vchiq_log_trace(vchiq_arm_log_level, -		 "vchiq_ioctl - instance %x, cmd %s, arg %p", -		(unsigned int)instance, +		 "vchiq_ioctl - instance %zx, cmd %s, arg %p", +		(size_t)instance,  		((_IOC_TYPE(cmd) == VCHIQ_IOC_MAGIC) &&  		(_IOC_NR(cmd) <= VCHIQ_IOC_MAX)) ?  		ioctl_names[_IOC_NR(cmd)] : "<invalid>", arg); @@ -745,8 +745,8 @@ vchiq_ioctl(struct cdev *cdev, u_long cmd, caddr_t arg, int fflag,  				break;  			}  			vchiq_log_info(vchiq_arm_log_level, -				"found bulk_waiter %x for pid %d", -				(unsigned int)waiter, current->p_pid); +				"found bulk_waiter %zx for pid %d", +				(size_t)waiter, current->p_pid);  			args.userdata = &waiter->bulk_waiter;  		}  		status = vchiq_bulk_transfer @@ -776,8 +776,8 @@ vchiq_ioctl(struct cdev *cdev, u_long cmd, caddr_t arg, int fflag,  			list_add(&waiter->list, &instance->bulk_waiter_list);  			lmutex_unlock(&instance->bulk_waiter_list_mutex);  			vchiq_log_info(vchiq_arm_log_level, -				"saved bulk_waiter %x for pid %d", -				(unsigned int)waiter, current->p_pid); +				"saved bulk_waiter %zx for pid %d", +				(size_t)waiter, current->p_pid);  			memcpy((void *)  				&(((VCHIQ_QUEUE_BULK_TRANSFER_T *) @@ -860,9 +860,9 @@ vchiq_ioctl(struct cdev *cdev, u_long cmd, caddr_t arg, int fflag,  					if (args.msgbufsize < msglen) {  						vchiq_log_error(  							vchiq_arm_log_level, -							"header %x: msgbufsize" +							"header %zx: msgbufsize"  							" %x < msglen %x", -							(unsigned int)header, +							(size_t)header,  							args.msgbufsize,  							msglen);  						WARN(1, "invalid message " @@ -1031,8 +1031,8 @@ vchiq_ioctl(struct cdev *cdev, u_long cmd, caddr_t arg, int fflag,  				ret = -EFAULT;  		} else {  			vchiq_log_error(vchiq_arm_log_level, -				"header %x: bufsize %x < size %x", -				(unsigned int)header, args.bufsize, +				"header %zx: bufsize %x < size %x", +				(size_t)header, args.bufsize,  				header->size);  			WARN(1, "invalid size\n");  			ret = -EMSGSIZE; @@ -1435,9 +1435,9 @@ vchiq_dump_platform_instances(void *dump_context)  			instance = service->instance;  			if (instance && !instance->mark) {  				len = snprintf(buf, sizeof(buf), -					"Instance %x: pid %d,%s completions " +					"Instance %zx: pid %d,%s completions "  						"%d/%d", -					(unsigned int)instance, instance->pid, +					(size_t)instance, instance->pid,  					instance->connected ? " connected, " :  						"",  					instance->completion_insert - @@ -1465,8 +1465,8 @@ vchiq_dump_platform_service_state(void *dump_context, VCHIQ_SERVICE_T *service)  	char buf[80];  	int len; -	len = snprintf(buf, sizeof(buf), "  instance %x", -		(unsigned int)service->instance); +	len = snprintf(buf, sizeof(buf), "  instance %zx", +		(size_t)service->instance);  	if ((service->base.callback == service_callback) &&  		user_service->is_vchi) { diff --git a/sys/dev/acpica/acpi_pcib_acpi.c b/sys/dev/acpica/acpi_pcib_acpi.c index 3913ec612f79..2fadd6cd32ee 100644 --- a/sys/dev/acpica/acpi_pcib_acpi.c +++ b/sys/dev/acpica/acpi_pcib_acpi.c @@ -179,7 +179,7 @@ acpi_pcib_producer_handler(ACPI_RESOURCE *res, void *context)  	switch (res->Type) {  	case ACPI_RESOURCE_TYPE_START_DEPENDENT:  	case ACPI_RESOURCE_TYPE_END_DEPENDENT: -		panic("host bridge has depenedent resources"); +		panic("host bridge has dependent resources");  	case ACPI_RESOURCE_TYPE_ADDRESS16:  	case ACPI_RESOURCE_TYPE_ADDRESS32:  	case ACPI_RESOURCE_TYPE_ADDRESS64: diff --git a/sys/dev/aic7xxx/aic79xx.c b/sys/dev/aic7xxx/aic79xx.c index cee45fa5cc8a..d25f5de282d0 100644 --- a/sys/dev/aic7xxx/aic79xx.c +++ b/sys/dev/aic7xxx/aic79xx.c @@ -2015,7 +2015,7 @@ ahd_handle_lqiphase_error(struct ahd_softc *ahd, u_int lqistat1)  		ahd_outb(ahd, CLRINT, CLRSCSIINT);  		ahd_unpause(ahd);  	} else { -		printf("Reseting Channel for LQI Phase error\n"); +		printf("Resetting Channel for LQI Phase error\n");  		AHD_CORRECTABLE_ERROR(ahd);  		ahd_dump_card_state(ahd);  		ahd_reset_channel(ahd, 'A', /*Initiate Reset*/TRUE); @@ -8179,7 +8179,7 @@ ahd_handle_scsi_status(struct ahd_softc *ahd, struct scb *scb)  					AHD_UNCORRECTABLE_ERROR(ahd);  					break;  				case SIU_PFC_TMF_NOT_SUPPORTED: -					printf("TMF not supportd\n"); +					printf("TMF not supported\n");  					AHD_UNCORRECTABLE_ERROR(ahd);  					break;  				case SIU_PFC_TMF_FAILED: @@ -8313,7 +8313,7 @@ ahd_handle_scsi_status(struct ahd_softc *ahd, struct scb *scb)  		break;  	}  	case SCSI_STATUS_OK: -		printf("%s: Interrupted for staus of 0???\n", +		printf("%s: Interrupted for status of 0???\n",  		       ahd_name(ahd));  		/* FALLTHROUGH */  	default: diff --git a/sys/dev/aic7xxx/aic7xxx.c b/sys/dev/aic7xxx/aic7xxx.c index 18f68b806948..ce7f8a062b49 100644 --- a/sys/dev/aic7xxx/aic7xxx.c +++ b/sys/dev/aic7xxx/aic7xxx.c @@ -78,7 +78,7 @@ struct ahc_hard_error_entry {  static struct ahc_hard_error_entry ahc_hard_errors[] = {  	{ ILLHADDR,	"Illegal Host Access" }, -	{ ILLSADDR,	"Illegal Sequencer Address referrenced" }, +	{ ILLSADDR,	"Illegal Sequencer Address referenced" },  	{ ILLOPCODE,	"Illegal Opcode in sequencer program" },  	{ SQPARERR,	"Sequencer Parity Error" },  	{ DPARERR,	"Data-path Parity Error" }, @@ -476,7 +476,7 @@ ahc_handle_seqint(struct ahc_softc *ahc, u_int intstat)  		aic_set_scsi_status(scb, hscb->shared_data.status.scsi_status);  		switch (hscb->shared_data.status.scsi_status) {  		case SCSI_STATUS_OK: -			printf("%s: Interrupted for staus of 0???\n", +			printf("%s: Interrupted for status of 0???\n",  			       ahc_name(ahc));  			break;  		case SCSI_STATUS_CMD_TERMINATED: diff --git a/sys/dev/ale/if_ale.c b/sys/dev/ale/if_ale.c index fa2306f1525e..09e0820d2c74 100644 --- a/sys/dev/ale/if_ale.c +++ b/sys/dev/ale/if_ale.c @@ -813,7 +813,7 @@ ale_sysctl_node(struct ale_softc *sc)  	/* Misc statistics. */  	ALE_SYSCTL_STAT_ADD32(ctx, child, "reset_brk_seq",  	    &stats->reset_brk_seq, -	    "Controller resets due to broken Rx sequnce number"); +	    "Controller resets due to broken Rx sequence number");  	tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats",  	    CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "ATE statistics"); diff --git a/sys/dev/gpio/acpi_gpiobus.c b/sys/dev/gpio/acpi_gpiobus.c index 0d2455cab399..0c31f4fec16d 100644 --- a/sys/dev/gpio/acpi_gpiobus.c +++ b/sys/dev/gpio/acpi_gpiobus.c @@ -304,6 +304,12 @@ acpi_gpiobus_attach_aei(struct acpi_gpiobus_softc *sc, ACPI_HANDLE handle)  		devi->gpiobus.pins[i] = pins[i + 1];  	free(pins, M_DEVBUF); +	status = AcpiAttachData(aei_handle, acpi_fake_objhandler, child); +	if (ACPI_FAILURE(status)) { +		printf("WARNING: Unable to attach object data to %s - %s\n", +		    acpi_name(aei_handle), AcpiFormatException(status)); +	} +  	bus_attach_children(sc->super_sc.sc_busdev);  } @@ -427,6 +433,16 @@ acpi_gpiobus_child_location(device_t bus, device_t child, struct sbuf *sb)  	return (0);  } +static void +acpi_gpiobus_child_deleted(device_t bus, device_t child) +{ +	struct acpi_gpiobus_ivar *devi = device_get_ivars(child); + +	if (acpi_get_device(devi->handle) == child) +		AcpiDetachData(devi->handle, acpi_fake_objhandler); +	gpiobus_child_deleted(bus, child); +} +  static device_method_t acpi_gpiobus_methods[] = {  	/* Device interface */  	DEVMETHOD(device_probe,		acpi_gpiobus_probe), @@ -437,6 +453,7 @@ static device_method_t acpi_gpiobus_methods[] = {  	DEVMETHOD(bus_read_ivar,	acpi_gpiobus_read_ivar),  	DEVMETHOD(bus_add_child,	acpi_gpiobus_add_child),  	DEVMETHOD(bus_child_location,	acpi_gpiobus_child_location), +	DEVMETHOD(bus_child_deleted,	acpi_gpiobus_child_deleted),  	DEVMETHOD_END  }; diff --git a/sys/dev/gpio/gpiobus.c b/sys/dev/gpio/gpiobus.c index 698b5e5fdd01..596e468d35f3 100644 --- a/sys/dev/gpio/gpiobus.c +++ b/sys/dev/gpio/gpiobus.c @@ -618,7 +618,7 @@ gpiobus_detach(device_t dev)  	    ("gpiobus mutex not initialized"));  	GPIOBUS_LOCK_DESTROY(sc); -	if ((err = bus_detach_children(dev)) != 0) +	if ((err = bus_generic_detach(dev)) != 0)  		return (err);  	rman_fini(&sc->sc_intr_rman); @@ -734,7 +734,7 @@ gpiobus_add_child(device_t dev, u_int order, const char *name, int unit)  	    sizeof(struct gpiobus_ivar)));  } -static void +void  gpiobus_child_deleted(device_t dev, device_t child)  {  	struct gpiobus_ivar *devi; diff --git a/sys/dev/gpio/gpiobus_internal.h b/sys/dev/gpio/gpiobus_internal.h index 58f862343403..be76450b2432 100644 --- a/sys/dev/gpio/gpiobus_internal.h +++ b/sys/dev/gpio/gpiobus_internal.h @@ -43,6 +43,7 @@ int gpiobus_read_ivar(device_t, device_t, int, uintptr_t *);  int gpiobus_acquire_pin(device_t, uint32_t);  void gpiobus_release_pin(device_t, uint32_t);  int gpiobus_child_location(device_t, device_t, struct sbuf *); +void gpiobus_child_deleted(device_t, device_t);  device_t gpiobus_add_child_common(device_t, u_int, const char *, int, size_t);  int gpiobus_add_gpioc(device_t); diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c index f212759a5500..e607667decf5 100644 --- a/sys/dev/nvme/nvme_ctrlr.c +++ b/sys/dev/nvme/nvme_ctrlr.c @@ -1762,9 +1762,14 @@ noadminq:  		bus_release_resource(ctrlr->dev, SYS_RES_IRQ,  		    rman_get_rid(ctrlr->res), ctrlr->res); -	if (ctrlr->bar4_resource != NULL) { +	if (ctrlr->msix_table_resource != NULL) {  		bus_release_resource(dev, SYS_RES_MEMORY, -		    ctrlr->bar4_resource_id, ctrlr->bar4_resource); +		    ctrlr->msix_table_resource_id, ctrlr->msix_table_resource); +	} + +	if (ctrlr->msix_pba_resource != NULL) { +		bus_release_resource(dev, SYS_RES_MEMORY, +		    ctrlr->msix_pba_resource_id, ctrlr->msix_pba_resource);  	}  	bus_release_resource(dev, SYS_RES_MEMORY, diff --git a/sys/dev/nvme/nvme_pci.c b/sys/dev/nvme/nvme_pci.c index c07a68d2f0dc..cecb05ca0a92 100644 --- a/sys/dev/nvme/nvme_pci.c +++ b/sys/dev/nvme/nvme_pci.c @@ -152,11 +152,15 @@ static int  nvme_ctrlr_allocate_bar(struct nvme_controller *ctrlr)  {  	ctrlr->resource_id = PCIR_BAR(0); +	ctrlr->msix_table_resource_id = -1; +	ctrlr->msix_table_resource = NULL; +	ctrlr->msix_pba_resource_id = -1; +	ctrlr->msix_pba_resource = NULL;  	ctrlr->resource = bus_alloc_resource_any(ctrlr->dev, SYS_RES_MEMORY,  	    &ctrlr->resource_id, RF_ACTIVE); -	if(ctrlr->resource == NULL) { +	if (ctrlr->resource == NULL) {  		nvme_printf(ctrlr, "unable to allocate pci resource\n");  		return (ENOMEM);  	} @@ -166,15 +170,32 @@ nvme_ctrlr_allocate_bar(struct nvme_controller *ctrlr)  	ctrlr->regs = (struct nvme_registers *)ctrlr->bus_handle;  	/* -	 * The NVMe spec allows for the MSI-X table to be placed behind -	 *  BAR 4/5, separate from the control/doorbell registers.  Always -	 *  try to map this bar, because it must be mapped prior to calling -	 *  pci_alloc_msix().  If the table isn't behind BAR 4/5, -	 *  bus_alloc_resource() will just return NULL which is OK. +	 * The NVMe spec allows for the MSI-X tables to be placed behind +	 *  BAR 4 and/or 5, separate from the control/doorbell registers.  	 */ -	ctrlr->bar4_resource_id = PCIR_BAR(4); -	ctrlr->bar4_resource = bus_alloc_resource_any(ctrlr->dev, SYS_RES_MEMORY, -	    &ctrlr->bar4_resource_id, RF_ACTIVE); + +	ctrlr->msix_table_resource_id = pci_msix_table_bar(ctrlr->dev); +	ctrlr->msix_pba_resource_id = pci_msix_pba_bar(ctrlr->dev); + +	if (ctrlr->msix_table_resource_id >= 0 && +	    ctrlr->msix_table_resource_id != ctrlr->resource_id) { +		ctrlr->msix_table_resource = bus_alloc_resource_any(ctrlr->dev, +		    SYS_RES_MEMORY, &ctrlr->msix_table_resource_id, RF_ACTIVE); +		if (ctrlr->msix_table_resource == NULL) { +			nvme_printf(ctrlr, "unable to allocate msi-x table resource\n"); +			return (ENOMEM); +		} +	} +	if (ctrlr->msix_pba_resource_id >= 0 && +	    ctrlr->msix_pba_resource_id != ctrlr->resource_id && +	    ctrlr->msix_pba_resource_id != ctrlr->msix_table_resource_id) { +		ctrlr->msix_pba_resource = bus_alloc_resource_any(ctrlr->dev, +		    SYS_RES_MEMORY, &ctrlr->msix_pba_resource_id, RF_ACTIVE); +		if (ctrlr->msix_pba_resource == NULL) { +			nvme_printf(ctrlr, "unable to allocate msi-x pba resource\n"); +			return (ENOMEM); +		} +	}  	return (0);  } @@ -200,9 +221,14 @@ bad:  		    ctrlr->resource_id, ctrlr->resource);  	} -	if (ctrlr->bar4_resource != NULL) { +	if (ctrlr->msix_table_resource != NULL) { +		bus_release_resource(dev, SYS_RES_MEMORY, +		    ctrlr->msix_table_resource_id, ctrlr->msix_table_resource); +	} + +	if (ctrlr->msix_pba_resource != NULL) {  		bus_release_resource(dev, SYS_RES_MEMORY, -		    ctrlr->bar4_resource_id, ctrlr->bar4_resource); +		    ctrlr->msix_pba_resource_id, ctrlr->msix_pba_resource);  	}  	if (ctrlr->tag) diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h index 04a47d799350..dd45e1acd0aa 100644 --- a/sys/dev/nvme/nvme_private.h +++ b/sys/dev/nvme/nvme_private.h @@ -235,8 +235,10 @@ struct nvme_controller {  	 *  separate from the control registers which are in BAR 0/1.  These  	 *  members track the mapping of BAR 4/5 for that reason.  	 */ -	int			bar4_resource_id; -	struct resource		*bar4_resource; +	int			msix_table_resource_id; +	struct resource		*msix_table_resource; +	int			msix_pba_resource_id; +	struct resource		*msix_pba_resource;  	int			msi_count;  	uint32_t		enable_aborts; diff --git a/sys/dev/thunderbolt/nhi.c b/sys/dev/thunderbolt/nhi.c index 205e69c16253..30a72652535a 100644 --- a/sys/dev/thunderbolt/nhi.c +++ b/sys/dev/thunderbolt/nhi.c @@ -322,6 +322,7 @@ nhi_detach(struct nhi_softc *sc)  	tbdev_remove_interface(sc);  	nhi_pci_disable_interrupts(sc); +	nhi_pci_free_interrupts(sc);  	nhi_free_ring0(sc); diff --git a/sys/dev/thunderbolt/nhi_pci.c b/sys/dev/thunderbolt/nhi_pci.c index 7dacff523cef..865963e275ec 100644 --- a/sys/dev/thunderbolt/nhi_pci.c +++ b/sys/dev/thunderbolt/nhi_pci.c @@ -67,7 +67,7 @@ static int	nhi_pci_suspend(device_t);  static int	nhi_pci_resume(device_t);  static void	nhi_pci_free(struct nhi_softc *);  static int	nhi_pci_allocate_interrupts(struct nhi_softc *); -static void	nhi_pci_free_interrupts(struct nhi_softc *); +static void	nhi_pci_free_resources(struct nhi_softc *);  static int	nhi_pci_icl_poweron(struct nhi_softc *);  static device_method_t nhi_methods[] = { @@ -253,7 +253,7 @@ static void  nhi_pci_free(struct nhi_softc *sc)  { -	nhi_pci_free_interrupts(sc); +	nhi_pci_free_resources(sc);  	if (sc->parent_dmat != NULL) {  		bus_dma_tag_destroy(sc->parent_dmat); @@ -307,7 +307,7 @@ nhi_pci_allocate_interrupts(struct nhi_softc *sc)  	return (error);  } -static void +void  nhi_pci_free_interrupts(struct nhi_softc *sc)  {  	int i; @@ -319,7 +319,11 @@ nhi_pci_free_interrupts(struct nhi_softc *sc)  	}  	pci_release_msi(sc->dev); +} +static void +nhi_pci_free_resources(struct nhi_softc *sc) +{  	if (sc->irq_table != NULL) {  		bus_release_resource(sc->dev, SYS_RES_MEMORY,  		    sc->irq_table_rid, sc->irq_table); diff --git a/sys/dev/thunderbolt/nhi_var.h b/sys/dev/thunderbolt/nhi_var.h index 2b9e878af47d..e79ecc954c1f 100644 --- a/sys/dev/thunderbolt/nhi_var.h +++ b/sys/dev/thunderbolt/nhi_var.h @@ -217,6 +217,7 @@ struct nhi_dispatch {  int nhi_pci_configure_interrupts(struct nhi_softc *sc);  void nhi_pci_enable_interrupt(struct nhi_ring_pair *r);  void nhi_pci_disable_interrupts(struct nhi_softc *sc); +void nhi_pci_free_interrupts(struct nhi_softc *sc);  int nhi_pci_get_uuid(struct nhi_softc *sc);  int nhi_read_lc_mailbox(struct nhi_softc *, u_int reg, uint32_t *val);  int nhi_write_lc_mailbox(struct nhi_softc *, u_int reg, uint32_t val); diff --git a/sys/dev/usb/wlan/if_upgt.c b/sys/dev/usb/wlan/if_upgt.c index 1ab833301b3c..a860cc3e0fa9 100644 --- a/sys/dev/usb/wlan/if_upgt.c +++ b/sys/dev/usb/wlan/if_upgt.c @@ -1174,7 +1174,7 @@ upgt_eeprom_parse_freq3(struct upgt_softc *sc, uint8_t *data, int len)  		sc->sc_eeprom_freq3[channel] = freq3[i]; -		DPRINTF(sc, UPGT_DEBUG_FW, "frequence=%d, channel=%d\n", +		DPRINTF(sc, UPGT_DEBUG_FW, "frequency=%d, channel=%d\n",  		    le16toh(sc->sc_eeprom_freq3[channel].freq), channel);  	}  } @@ -1216,7 +1216,7 @@ upgt_eeprom_parse_freq4(struct upgt_softc *sc, uint8_t *data, int len)  			sc->sc_eeprom_freq4[channel][j].pad = 0;  		} -		DPRINTF(sc, UPGT_DEBUG_FW, "frequence=%d, channel=%d\n", +		DPRINTF(sc, UPGT_DEBUG_FW, "frequency=%d, channel=%d\n",  		    le16toh(freq4_1[i].freq), channel);  	}  } @@ -1244,7 +1244,7 @@ upgt_eeprom_parse_freq6(struct upgt_softc *sc, uint8_t *data, int len)  		sc->sc_eeprom_freq6[channel] = freq6[i]; -		DPRINTF(sc, UPGT_DEBUG_FW, "frequence=%d, channel=%d\n", +		DPRINTF(sc, UPGT_DEBUG_FW, "frequency=%d, channel=%d\n",  		    le16toh(sc->sc_eeprom_freq6[channel].freq), channel);  	}  } diff --git a/sys/dev/usb/wlan/if_zyd.c b/sys/dev/usb/wlan/if_zyd.c index 7affdcdce089..b7dfc941224d 100644 --- a/sys/dev/usb/wlan/if_zyd.c +++ b/sys/dev/usb/wlan/if_zyd.c @@ -827,7 +827,7 @@ zyd_cmd(struct zyd_softc *sc, uint16_t code, const void *idata, int ilen,  	if (error)  		device_printf(sc->sc_dev, "command timeout\n");  	STAILQ_REMOVE(&sc->sc_rqh, &rq, zyd_rq, rq); -	DPRINTF(sc, ZYD_DEBUG_CMD, "finsihed cmd %p, error = %d \n", +	DPRINTF(sc, ZYD_DEBUG_CMD, "finished cmd %p, error = %d \n",  	    &rq, error);  	return (error); diff --git a/sys/fs/nfsclient/nfs_clrpcops.c b/sys/fs/nfsclient/nfs_clrpcops.c index b88169ba69d5..b61218958550 100644 --- a/sys/fs/nfsclient/nfs_clrpcops.c +++ b/sys/fs/nfsclient/nfs_clrpcops.c @@ -9760,7 +9760,7 @@ nfsm_split(struct mbuf *mp, uint64_t xfer)  		pgno++;  	} while (pgno < m->m_epg_npgs);  	if (pgno == m->m_epg_npgs) -		panic("nfsm_split: eroneous ext_pgs mbuf"); +		panic("nfsm_split: erroneous ext_pgs mbuf");  	m2 = mb_alloc_ext_pgs(M_WAITOK, mb_free_mext_pgs, 0);  	m2->m_epg_flags |= EPG_FLAG_ANON; diff --git a/sys/fs/nfsclient/nfs_clvfsops.c b/sys/fs/nfsclient/nfs_clvfsops.c index 5ea7eab07632..212c88f28930 100644 --- a/sys/fs/nfsclient/nfs_clvfsops.c +++ b/sys/fs/nfsclient/nfs_clvfsops.c @@ -927,7 +927,7 @@ nfs_mount(struct mount *mp)  	struct vnode *vp;  	struct thread *td;  	char *hst; -	u_char nfh[NFSX_FHMAX], krbname[100], dirpath[100], srvkrbname[100]; +	u_char nfh[NFSX_FHMAX], krbname[100], *dirpath, srvkrbname[100];  	char *cp, *opt, *name, *secname, *tlscertname;  	int nametimeo = NFS_DEFAULT_NAMETIMEO;  	int negnametimeo = NFS_DEFAULT_NEGNAMETIMEO; @@ -943,6 +943,7 @@ nfs_mount(struct mount *mp)  	newflag = 0;  	tlscertname = NULL;  	hst = malloc(MNAMELEN, M_TEMP, M_WAITOK); +	dirpath = malloc(MNAMELEN, M_TEMP, M_WAITOK);  	if (vfs_filteropt(mp->mnt_optnew, nfs_opts)) {  		error = EINVAL;  		goto out; @@ -1329,7 +1330,7 @@ nfs_mount(struct mount *mp)  			goto out;  	} else if (nfs_mount_parse_from(mp->mnt_optnew,  	    &args.hostname, (struct sockaddr_in **)&nam, dirpath, -	    sizeof(dirpath), &dirlen) == 0) { +	    MNAMELEN, &dirlen) == 0) {  		has_nfs_from_opt = 1;  		bcopy(args.hostname, hst, MNAMELEN);  		hst[MNAMELEN - 1] = '\0'; @@ -1387,7 +1388,7 @@ nfs_mount(struct mount *mp)  	if (has_nfs_from_opt == 0) {  		if (vfs_getopt(mp->mnt_optnew,  		    "dirpath", (void **)&name, NULL) == 0) -			strlcpy(dirpath, name, sizeof (dirpath)); +			strlcpy(dirpath, name, MNAMELEN);  		else  			dirpath[0] = '\0';  		dirlen = strlen(dirpath); @@ -1472,6 +1473,7 @@ out:  		MNT_IUNLOCK(mp);  	}  	free(hst, M_TEMP); +	free(dirpath, M_TEMP);  	return (error);  } diff --git a/sys/geom/geom_vfs.c b/sys/geom/geom_vfs.c index d9e9a6c82da1..9b5e5a84191f 100644 --- a/sys/geom/geom_vfs.c +++ b/sys/geom/geom_vfs.c @@ -153,7 +153,7 @@ g_vfs_done(struct bio *bip)  			g_print_bio("g_vfs_done():", bip, "error = %d%s",  			    bip->bio_error,  			    bip->bio_error != ENXIO ? "" : -			    " supressing further ENXIO"); +			    " suppressing further ENXIO");  		}  	}  	bp->b_error = bip->bio_error; diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c index bf5bda7e058d..b84f69cfd03e 100644 --- a/sys/kern/subr_bus.c +++ b/sys/kern/subr_bus.c @@ -4633,7 +4633,7 @@ bus_release_resources(device_t dev, const struct resource_spec *rs,   * parent of @p dev.   */  struct resource * -bus_alloc_resource(device_t dev, int type, int *rid, rman_res_t start, +(bus_alloc_resource)(device_t dev, int type, int *rid, rman_res_t start,      rman_res_t end, rman_res_t count, u_int flags)  {  	struct resource *res; diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h index 8aefe514946e..52db00f6ce0b 100644 --- a/sys/net/pfvar.h +++ b/sys/net/pfvar.h @@ -2435,6 +2435,7 @@ extern struct pf_ksrc_node	*pf_find_src_node(struct pf_addr *,  				    struct pf_srchash **, pf_sn_types_t, bool);  extern void			 pf_unlink_src_node(struct pf_ksrc_node *);  extern u_int			 pf_free_src_nodes(struct pf_ksrc_node_list *); +extern void			 pf_free_src_node(struct pf_ksrc_node *);  extern void			 pf_print_state(struct pf_kstate *);  extern void			 pf_print_flags(uint16_t);  extern int			 pf_addr_wrap_neq(struct pf_addr_wrap *, @@ -2521,6 +2522,9 @@ uint16_t	pf_qname2qid(const char *, bool);  void	pfr_initialize(void);  void	pfr_cleanup(void); +struct pfr_kentry * +	pfr_kentry_byaddr(struct pfr_ktable *, struct pf_addr *, sa_family_t, +	    int);  int	pfr_match_addr(struct pfr_ktable *, struct pf_addr *, sa_family_t);  void	pfr_update_stats(struct pfr_ktable *, struct pf_addr *, sa_family_t,  	    u_int64_t, int, int, int); diff --git a/sys/netipsec/ipsec_offload.c b/sys/netipsec/ipsec_offload.c index 8a09d5f37b4a..59a107881676 100644 --- a/sys/netipsec/ipsec_offload.c +++ b/sys/netipsec/ipsec_offload.c @@ -300,7 +300,7 @@ ipsec_accel_sa_newkey_cb(if_t ifp, void *arg)  		dprintf("ipsec_accel_sa_install_newkey: cannot alloc "  		    "drv_spi if %s spi %#x\n", if_name(ifp),  		    be32toh(tq->sav->spi)); -		return (ENOMEM); +		return (0);  	}  	error = ifp->if_ipsec_accel_m->if_sa_newkey(ifp, tq->sav,  	    drv_spi, &priv); @@ -329,7 +329,7 @@ ipsec_accel_sa_newkey_cb(if_t ifp, void *arg)  		}  	}  out: -	return (error); +	return (0);  }  static void @@ -663,7 +663,7 @@ ipsec_accel_spdadd_cb(if_t ifp, void *arg)  	if (error != 0) {  		dprintf("ipsec_accel_spdadd: %s if_spdadd %p remember res %d\n",  		    if_name(ifp), sp, error); -		return (error); +		return (0);  	}  	error = ifp->if_ipsec_accel_m->if_spdadd(ifp, sp, inp, &i->ifdata);  	if (error != 0) { @@ -671,7 +671,7 @@ ipsec_accel_spdadd_cb(if_t ifp, void *arg)  		dprintf("ipsec_accel_spdadd: %s if_spdadd %p res %d\n",  		    if_name(ifp), sp, error);  	} -	return (error); +	return (0);  }  static void diff --git a/sys/netpfil/pf/if_pfsync.c b/sys/netpfil/pf/if_pfsync.c index 66bc99df2afa..de69ecbb0985 100644 --- a/sys/netpfil/pf/if_pfsync.c +++ b/sys/netpfil/pf/if_pfsync.c @@ -546,6 +546,9 @@ pfsync_state_import(union pfsync_state_union *sp, int flags, int msg_version)  	PF_RULES_RASSERT(); +	if (strnlen(sp->pfs_1301.ifname, IFNAMSIZ) == IFNAMSIZ) +		return (EINVAL); +  	if (sp->pfs_1301.creatorid == 0) {  		if (V_pf_status.debug >= PF_DEBUG_MISC)  			printf("%s: invalid creator id: %08x\n", __func__, diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c index fd70fb1c8a36..a39f5fe58cd6 100644 --- a/sys/netpfil/pf/pf.c +++ b/sys/netpfil/pf/pf.c @@ -1007,7 +1007,7 @@ pf_src_node_exists(struct pf_ksrc_node **sn, struct pf_srchash *sh)  	return (false);  } -static void +void  pf_free_src_node(struct pf_ksrc_node *sn)  { diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c index a4557f139ae5..703ecf446fad 100644 --- a/sys/netpfil/pf/pf_ioctl.c +++ b/sys/netpfil/pf/pf_ioctl.c @@ -4792,6 +4792,17 @@ DIOCCHANGEADDR_error:  			error = ENODEV;  			goto fail;  		} +		if (strnlen(io->pfrio_table.pfrt_anchor, MAXPATHLEN) +		    == MAXPATHLEN) { +			error = EINVAL; +			goto fail; +		} +		if (strnlen(io->pfrio_table.pfrt_name, PF_TABLE_NAME_SIZE) +		    == PF_TABLE_NAME_SIZE) { +			error = EINVAL; +			goto fail; +		} +  		PF_RULES_WLOCK();  		error = pfr_clr_tables(&io->pfrio_table, &io->pfrio_ndel,  		    io->pfrio_flags | PFR_FLAG_USERIOCTL); diff --git a/sys/netpfil/pf/pf_lb.c b/sys/netpfil/pf/pf_lb.c index 5d85e16f18e3..7aeb8266ca8c 100644 --- a/sys/netpfil/pf/pf_lb.c +++ b/sys/netpfil/pf/pf_lb.c @@ -535,6 +535,63 @@ pf_get_mape_sport(struct pf_pdesc *pd, struct pf_krule *r,  	return (1);  } +static __inline  u_short +pf_check_src_node_valid(struct pf_ksrc_node *sn, struct pf_kpool *rpool) +{ +	struct pf_addr		*raddr, *rmask; +	struct pf_addr		*caddr; /* cached redirection address */ +	struct pf_kpooladdr	*pa; +	sa_family_t		 raf; +	sa_family_t		 caf; /* cached redirection AF */ +	u_short			 valid = 0; + +	KASSERT(sn != NULL, ("sn is NULL")); +	KASSERT(rpool != NULL, ("rpool is NULL")); + +	/* check if the cached entry is still valid */ + +	if (sn->type ==  PF_SN_LIMIT) { +		/* Always valid as it does not store redirection address */ +		return (1); +	} + +	mtx_lock(&rpool->mtx); +	caddr = &(sn->raddr); +	caf = sn->raf; + +	TAILQ_FOREACH(pa, &rpool->list, entries) { +		if (PF_AZERO(caddr, caf)) { +			valid = 1; +			goto done; +		} else if (pa->addr.type == PF_ADDR_DYNIFTL) { +			if (pfr_kentry_byaddr(pa->addr.p.dyn->pfid_kt, caddr, caf, 0)) { +				valid = 1; +				goto done; +			} +		} else if (pa->addr.type == PF_ADDR_TABLE) { +			if (pfr_kentry_byaddr(pa->addr.p.tbl, caddr, caf, 0)) { +				valid = 1; +				goto done; +			} +		} else if (pa->addr.type != PF_ADDR_NOROUTE) { +			/* PF_ADDR_URPFFAILED, PF_ADDR_RANGE, PF_ADDR_ADDRMASK */ +			raddr = &(pa->addr.v.a.addr); +			rmask = &(pa->addr.v.a.mask); +			raf = pa->af; +			if (raf == caf && pf_match_addr(0, raddr, rmask, caddr, caf)) { +				valid = 1; +				goto done; +			} +		} +		/* else PF_ADDR_NOROUTE */ +	} + +done: +	mtx_unlock(&rpool->mtx); + +	return (valid); +} +  u_short  pf_map_addr(sa_family_t saf, struct pf_krule *r, struct pf_addr *saddr,      struct pf_addr *naddr, struct pfi_kkif **nkif, sa_family_t *naf, @@ -874,6 +931,45 @@ pf_map_addr_sn(sa_family_t saf, struct pf_krule *r, struct pf_addr *saddr,  	if (sn != NULL) {  		PF_SRC_NODE_LOCK_ASSERT(sn); +		/* +		 * Check if source node's redirection address still exists +		 * in pool from which the SN was created. If not, delete it. +		 * Similar to pf_kill_srcnodes(). Unlink the source node +		 * from tree, unlink it from states, then free it. Do not +		 * overlap source node and state locks to avoid LOR. +		 */ +		if (!pf_check_src_node_valid(sn, rpool)) { +			pf_unlink_src_node(sn); +			PF_SRC_NODE_UNLOCK(sn); +			if (V_pf_status.debug >= PF_DEBUG_NOISY) { +				printf("%s: stale src tracking (%d) ", +				    __func__, sn_type); +				pf_print_host(saddr, 0, saf); +				printf(" to "); +				pf_print_host(&(sn->raddr), 0, sn->raf); +				if (nkif) +					printf("@%s", sn->rkif->pfik_name); +				printf("\n"); +			} + +			for (int i = 0; i <= V_pf_hashmask; i++) { +				struct pf_idhash *ih = &V_pf_idhash[i]; +				struct pf_kstate *st; + +				PF_HASHROW_LOCK(ih); +				LIST_FOREACH(st, &ih->states, entry) { +					if (st->sns[sn->type] == sn) { +						st->sns[sn->type] = NULL; +					} +				} +				PF_HASHROW_UNLOCK(ih); +			} +			pf_free_src_node(sn); +			counter_u64_add(V_pf_status.scounters[SCNT_SRC_NODE_REMOVALS], 1); +			sn = NULL; +			goto map_addr; +		} +  		(*naf) = sn->raf;  		/* If the supplied address is the same as the current one we've @@ -902,9 +998,10 @@ pf_map_addr_sn(sa_family_t saf, struct pf_krule *r, struct pf_addr *saddr,  		goto done;  	} +map_addr:  	/* -	 * Source node has not been found. Find a new address and store it -	 * in variables given by the caller. +	 * Source node has not been found or is invalid. Find a new address +	 * and store it in variables given by the caller.  	 */  	if ((reason = pf_map_addr(saf, r, saddr, naddr, nkif, naf, init_addr,  	    rpool)) != 0) { @@ -974,6 +1071,7 @@ pf_get_transaddr(struct pf_test_ctx *ctx, struct pf_krule *r,  {  	struct pf_pdesc	*pd = ctx->pd;  	struct pf_addr	*naddr; +	int		 idx;  	uint16_t	*nportp;  	uint16_t	 low, high;  	u_short		 reason; @@ -988,8 +1086,19 @@ pf_get_transaddr(struct pf_test_ctx *ctx, struct pf_krule *r,  			return (PFRES_MEMORY);  	} -	naddr = &ctx->nk->addr[1]; -	nportp = &ctx->nk->port[1]; +	switch (nat_action) { +	case PF_NAT: +		idx = pd->sidx; +		break; +	case PF_BINAT: +		idx = 1; +		break; +	case PF_RDR: +		idx = pd->didx; +		break; +	} +	naddr = &ctx->nk->addr[idx]; +	nportp = &ctx->nk->port[idx];  	switch (nat_action) {  	case PF_NAT: diff --git a/sys/netpfil/pf/pf_table.c b/sys/netpfil/pf/pf_table.c index 73ec18fa7646..cf752ce0de18 100644 --- a/sys/netpfil/pf/pf_table.c +++ b/sys/netpfil/pf/pf_table.c @@ -2071,7 +2071,7 @@ pfr_lookup_table(struct pfr_table *tbl)  	    (struct pfr_ktable *)tbl));  } -static struct pfr_kentry * +struct pfr_kentry *  pfr_kentry_byaddr(struct pfr_ktable *kt, struct pf_addr *a, sa_family_t af,      int exact)  { diff --git a/sys/powerpc/include/openpicvar.h b/sys/powerpc/include/openpicvar.h index 3a170a8a35fe..12f01cb80406 100644 --- a/sys/powerpc/include/openpicvar.h +++ b/sys/powerpc/include/openpicvar.h @@ -28,6 +28,8 @@  #ifndef	_POWERPC_OPENPICVAR_H_  #define	_POWERPC_OPENPICVAR_H_ +#include <sys/kobj.h> +  #define OPENPIC_DEVSTR	"OpenPIC Interrupt Controller"  #define OPENPIC_IRQMAX	256	/* h/w allows more */ @@ -75,16 +77,11 @@ int	openpic_common_attach(device_t, uint32_t);  /*   * PIC interface.   */ -void	openpic_bind(device_t dev, u_int irq, cpuset_t cpumask, void **);  void	openpic_config(device_t, u_int, enum intr_trigger, enum intr_polarity); -void	openpic_dispatch(device_t, struct trapframe *);  void	openpic_enable(device_t, u_int, u_int, void **);  void	openpic_eoi(device_t, u_int, void *); -void	openpic_ipi(device_t, u_int); -void	openpic_mask(device_t, u_int, void *);  void	openpic_unmask(device_t, u_int, void *); -int	openpic_suspend(device_t dev); -int	openpic_resume(device_t dev); +DECLARE_CLASS(openpic_class);  #endif /* _POWERPC_OPENPICVAR_H_ */ diff --git a/sys/powerpc/ofw/openpic_ofw.c b/sys/powerpc/ofw/openpic_ofw.c index fdab55fb30f5..4083e9eba749 100644 --- a/sys/powerpc/ofw/openpic_ofw.c +++ b/sys/powerpc/ofw/openpic_ofw.c @@ -68,29 +68,15 @@ static device_method_t  openpic_ofw_methods[] = {  	/* Device interface */  	DEVMETHOD(device_probe,		openpic_ofw_probe),  	DEVMETHOD(device_attach,	openpic_ofw_attach), -	DEVMETHOD(device_suspend,	openpic_suspend), -	DEVMETHOD(device_resume,	openpic_resume),  	/* PIC interface */ -	DEVMETHOD(pic_bind,		openpic_bind), -	DEVMETHOD(pic_config,		openpic_config), -	DEVMETHOD(pic_dispatch,		openpic_dispatch), -	DEVMETHOD(pic_enable,		openpic_enable), -	DEVMETHOD(pic_eoi,		openpic_eoi), -	DEVMETHOD(pic_ipi,		openpic_ipi), -	DEVMETHOD(pic_mask,		openpic_mask), -	DEVMETHOD(pic_unmask,		openpic_unmask), -  	DEVMETHOD(pic_translate_code,	openpic_ofw_translate_code),  	DEVMETHOD_END  }; -static driver_t openpic_ofw_driver = { -	"openpic", -	openpic_ofw_methods, -	sizeof(struct openpic_softc), -}; +DEFINE_CLASS_1(openpic, openpic_ofw_driver, openpic_ofw_methods, +    sizeof(struct openpic_softc), openpic_class);  EARLY_DRIVER_MODULE(openpic, ofwbus, openpic_ofw_driver, 0, 0,      BUS_PASS_INTERRUPT); diff --git a/sys/powerpc/powermac/cpcht.c b/sys/powerpc/powermac/cpcht.c index 138aefda5cdb..448144c9749e 100644 --- a/sys/powerpc/powermac/cpcht.c +++ b/sys/powerpc/powermac/cpcht.c @@ -113,7 +113,7 @@ static device_method_t	cpcht_methods[] = {  struct cpcht_irq {  	enum {  	    IRQ_NONE, IRQ_HT, IRQ_MSI, IRQ_INTERNAL -	}		irq_type;  +	}		irq_type;  	int		ht_source; @@ -287,7 +287,7 @@ cpcht_configure_htbridge(device_t dev, phandle_t child)  			sc->htirq_map[irq].irq_type = IRQ_HT;  			sc->htirq_map[irq].ht_source = i; -			sc->htirq_map[irq].ht_base = sc->sc_data +  +			sc->htirq_map[irq].ht_base = sc->sc_data +  			    (((((s & 0x1f) << 3) | (f & 0x07)) << 8) | (ptr));  			PCIB_WRITE_CONFIG(dev, b, s, f, @@ -298,13 +298,13 @@ cpcht_configure_htbridge(device_t dev, phandle_t child)  			/*  			 * Apple uses a non-compliant IO/APIC that differs -			 * in how we signal EOIs. Check if this device was  +			 * in how we signal EOIs. Check if this device was  			 * made by Apple, and act accordingly.  			 */  			vend = PCIB_READ_CONFIG(dev, b, s, f,  			    PCIR_DEVVENDOR, 4);  			if ((vend & 0xffff) == 0x106b) -				sc->htirq_map[irq].apple_eoi =  +				sc->htirq_map[irq].apple_eoi =  				 (sc->htirq_map[irq].ht_base - ptr) + 0x60;  		}  	} @@ -318,7 +318,7 @@ cpcht_read_config(device_t dev, u_int bus, u_int slot, u_int func, u_int reg,  	vm_offset_t	caoff;  	sc = device_get_softc(dev); -	caoff = sc->sc_data +  +	caoff = sc->sc_data +  		(((((slot & 0x1f) << 3) | (func & 0x07)) << 8) | reg);  	if (bus == 0 && (!(sc->sc_populated_slots & (1 << slot)) || func > 0)) @@ -350,7 +350,7 @@ cpcht_write_config(device_t dev, u_int bus, u_int slot, u_int func,  	vm_offset_t	caoff;  	sc = device_get_softc(dev); -	caoff = sc->sc_data +  +	caoff = sc->sc_data +  		(((((slot & 0x1f) << 3) | (func & 0x07)) << 8) | reg);  	if (bus == 0 && (!(sc->sc_populated_slots & (1 << slot)) || func > 0)) @@ -520,16 +520,12 @@ static device_method_t  openpic_cpcht_methods[] = {  	DEVMETHOD(device_attach,	openpic_cpcht_attach),  	/* PIC interface */ -	DEVMETHOD(pic_bind,		openpic_bind),  	DEVMETHOD(pic_config,		openpic_cpcht_config), -	DEVMETHOD(pic_dispatch,		openpic_dispatch),  	DEVMETHOD(pic_enable,		openpic_cpcht_enable),  	DEVMETHOD(pic_eoi,		openpic_cpcht_eoi), -	DEVMETHOD(pic_ipi,		openpic_ipi), -	DEVMETHOD(pic_mask,		openpic_mask),  	DEVMETHOD(pic_unmask,		openpic_cpcht_unmask), -	{ 0, 0 }, +	DEVMETHOD_END  };  struct openpic_cpcht_softc { @@ -538,11 +534,8 @@ struct openpic_cpcht_softc {  	struct mtx sc_ht_mtx;  }; -static driver_t openpic_cpcht_driver = { -	"htpic", -	openpic_cpcht_methods, -	sizeof(struct openpic_cpcht_softc), -}; +DEFINE_CLASS_1(htpic, openpic_cpcht_driver, openpic_cpcht_methods, +    sizeof(struct openpic_cpcht_softc), openpic_class);  EARLY_DRIVER_MODULE(openpic, unin, openpic_cpcht_driver, 0, 0,      BUS_PASS_INTERRUPT); @@ -553,7 +546,7 @@ openpic_cpcht_probe(device_t dev)  	const char *type = ofw_bus_get_type(dev);  	if (strcmp(type, "open-pic") != 0) -                return (ENXIO); +		return (ENXIO);  	device_set_desc(dev, OPENPIC_DEVSTR);  	return (0); @@ -582,7 +575,7 @@ openpic_cpcht_attach(device_t dev)  	 * Interrupts 0-3 are internally sourced and are level triggered  	 * active low. Interrupts 4-123 are connected to a pulse generator  	 * and should be programmed as edge triggered low-to-high. -	 *  +	 *  	 * IBM CPC945 Manual, Section 9.3.  	 */ @@ -631,7 +624,7 @@ openpic_cpcht_config(device_t dev, u_int irq, enum intr_trigger trig,  		/* Mask the IRQ while we fiddle settings */  		out32rb(cpcht_irqmap[irq].ht_base + 4, ht_irq | HTAPIC_MASK); -		 +  		/* Program the interrupt sense */  		ht_irq &= ~(HTAPIC_TRIGGER_LEVEL | HTAPIC_REQUEST_EOI);  		if (trig == INTR_TRIGGER_EDGE) { @@ -671,7 +664,7 @@ openpic_cpcht_enable(device_t dev, u_int irq, u_int vec, void **priv)  		mtx_unlock_spin(&sc->sc_ht_mtx);  	} -		 +  	openpic_cpcht_eoi(dev, irq, *priv);  } diff --git a/sys/powerpc/powerpc/openpic.c b/sys/powerpc/powerpc/openpic.c index 0c717aaf6060..aa28f63cb6f5 100644 --- a/sys/powerpc/powerpc/openpic.c +++ b/sys/powerpc/powerpc/openpic.c @@ -225,7 +225,7 @@ openpic_common_attach(device_t dev, uint32_t node)   * PIC I/F methods   */ -void +static void  openpic_bind(device_t dev, u_int irq, cpuset_t cpumask, void **priv __unused)  {  	struct openpic_softc *sc; @@ -280,18 +280,7 @@ openpic_config(device_t dev, u_int irq, enum intr_trigger trig,  	openpic_write(sc, OPENPIC_SRC_VECTOR(irq), x);  } -static int -openpic_intr(void *arg) -{ -	device_t dev = (device_t)(arg); - -	/* XXX Cascaded PICs do not pass non-NULL trapframes! */ -	openpic_dispatch(dev, NULL); - -	return (FILTER_HANDLED); -} - -void +static void  openpic_dispatch(device_t dev, struct trapframe *tf)  {  	struct openpic_softc *sc; @@ -311,6 +300,17 @@ openpic_dispatch(device_t dev, struct trapframe *tf)  	}  } +static int +openpic_intr(void *arg) +{ +	device_t dev = (device_t)(arg); + +	/* XXX Cascaded PICs do not pass non-NULL trapframes! */ +	openpic_dispatch(dev, NULL); + +	return (FILTER_HANDLED); +} +  void  openpic_enable(device_t dev, u_int irq, u_int vector, void **priv __unused)  { @@ -343,7 +343,7 @@ openpic_eoi(device_t dev, u_int irq __unused, void *priv __unused)  	openpic_write(sc, OPENPIC_PCPU_EOI(cpuid), 0);  } -void +static void  openpic_ipi(device_t dev, u_int cpu)  {  	struct openpic_softc *sc; @@ -357,7 +357,7 @@ openpic_ipi(device_t dev, u_int cpu)  	sched_unpin();  } -void +static void  openpic_mask(device_t dev, u_int irq, void *priv __unused)  {  	struct openpic_softc *sc; @@ -393,7 +393,7 @@ openpic_unmask(device_t dev, u_int irq, void *priv __unused)  	}  } -int +static int  openpic_suspend(device_t dev)  {  	struct openpic_softc *sc; @@ -424,7 +424,7 @@ openpic_suspend(device_t dev)  	return (0);  } -int +static int  openpic_resume(device_t dev)  {      	struct openpic_softc *sc; @@ -453,3 +453,24 @@ openpic_resume(device_t dev)  	return (0);  } + +static device_method_t openpic_methods[] = { +	/* Device interface */ +	DEVMETHOD(device_suspend,	openpic_suspend), +	DEVMETHOD(device_resume,	openpic_resume), + +	/* PIC interface */ +	DEVMETHOD(pic_bind,		openpic_bind), +	DEVMETHOD(pic_config,		openpic_config), +	DEVMETHOD(pic_dispatch,		openpic_dispatch), +	DEVMETHOD(pic_enable,		openpic_enable), +	DEVMETHOD(pic_eoi,		openpic_eoi), +	DEVMETHOD(pic_ipi,		openpic_ipi), +	DEVMETHOD(pic_mask,		openpic_mask), +	DEVMETHOD(pic_unmask,		openpic_unmask), + +	DEVMETHOD_END +}; + +DEFINE_CLASS_0(openpic, openpic_class, openpic_methods, +    sizeof(struct openpic_softc)); diff --git a/sys/powerpc/psim/openpic_iobus.c b/sys/powerpc/psim/openpic_iobus.c index bf5bd8235a6c..21950e248b6d 100644 --- a/sys/powerpc/psim/openpic_iobus.c +++ b/sys/powerpc/psim/openpic_iobus.c @@ -69,22 +69,11 @@ static device_method_t  openpic_iobus_methods[] = {  	DEVMETHOD(device_probe,		openpic_iobus_probe),  	DEVMETHOD(device_attach,	openpic_iobus_attach), -	/* PIC interface */ -	DEVMETHOD(pic_config,		openpic_config), -	DEVMETHOD(pic_dispatch,		openpic_dispatch), -	DEVMETHOD(pic_enable,		openpic_enable), -	DEVMETHOD(pic_eoi,		openpic_eoi), -	DEVMETHOD(pic_ipi,		openpic_ipi), -	DEVMETHOD(pic_mask,		openpic_mask), -	DEVMETHOD(pic_unmask,		openpic_unmask), -	{ 0, 0 } +	DEVMETHOD_END  }; -static driver_t openpic_iobus_driver = { -	"openpic", -	openpic_iobus_methods, -	sizeof(struct openpic_softc) -}; +DEFINE_CLASS_1(openpic, openpic_iobus_driver, openpic_iobus_methods, +    sizeof(struct openpic_softc), openpic_class);  DRIVER_MODULE(openpic, iobus, openpic_iobus_driver, 0, 0); diff --git a/sys/riscv/riscv/fpe.c b/sys/riscv/riscv/fpe.c index b6c66e5e4f09..63103a794a8e 100644 --- a/sys/riscv/riscv/fpe.c +++ b/sys/riscv/riscv/fpe.c @@ -69,39 +69,39 @@ fpe_store(struct fpreg *regs)  	__asm __volatile(  	    "frcsr	%0		\n" -	    "fsd	f0, (16 * 0)(%1)\n" -	    "fsd	f1, (16 * 1)(%1)\n" -	    "fsd	f2, (16 * 2)(%1)\n" -	    "fsd	f3, (16 * 3)(%1)\n" -	    "fsd	f4, (16 * 4)(%1)\n" -	    "fsd	f5, (16 * 5)(%1)\n" -	    "fsd	f6, (16 * 6)(%1)\n" -	    "fsd	f7, (16 * 7)(%1)\n" -	    "fsd	f8, (16 * 8)(%1)\n" -	    "fsd	f9, (16 * 9)(%1)\n" -	    "fsd	f10, (16 * 10)(%1)\n" -	    "fsd	f11, (16 * 11)(%1)\n" -	    "fsd	f12, (16 * 12)(%1)\n" -	    "fsd	f13, (16 * 13)(%1)\n" -	    "fsd	f14, (16 * 14)(%1)\n" -	    "fsd	f15, (16 * 15)(%1)\n" -	    "fsd	f16, (16 * 16)(%1)\n" -	    "fsd	f17, (16 * 17)(%1)\n" -	    "fsd	f18, (16 * 18)(%1)\n" -	    "fsd	f19, (16 * 19)(%1)\n" -	    "fsd	f20, (16 * 20)(%1)\n" -	    "fsd	f21, (16 * 21)(%1)\n" -	    "fsd	f22, (16 * 22)(%1)\n" -	    "fsd	f23, (16 * 23)(%1)\n" -	    "fsd	f24, (16 * 24)(%1)\n" -	    "fsd	f25, (16 * 25)(%1)\n" -	    "fsd	f26, (16 * 26)(%1)\n" -	    "fsd	f27, (16 * 27)(%1)\n" -	    "fsd	f28, (16 * 28)(%1)\n" -	    "fsd	f29, (16 * 29)(%1)\n" -	    "fsd	f30, (16 * 30)(%1)\n" -	    "fsd	f31, (16 * 31)(%1)\n" -	    : "=&r"(fcsr), "=r"(fp_x), "=m"(*fp_x)); +	    "fsd	f0, (16 * 0)(%2)\n" +	    "fsd	f1, (16 * 1)(%2)\n" +	    "fsd	f2, (16 * 2)(%2)\n" +	    "fsd	f3, (16 * 3)(%2)\n" +	    "fsd	f4, (16 * 4)(%2)\n" +	    "fsd	f5, (16 * 5)(%2)\n" +	    "fsd	f6, (16 * 6)(%2)\n" +	    "fsd	f7, (16 * 7)(%2)\n" +	    "fsd	f8, (16 * 8)(%2)\n" +	    "fsd	f9, (16 * 9)(%2)\n" +	    "fsd	f10, (16 * 10)(%2)\n" +	    "fsd	f11, (16 * 11)(%2)\n" +	    "fsd	f12, (16 * 12)(%2)\n" +	    "fsd	f13, (16 * 13)(%2)\n" +	    "fsd	f14, (16 * 14)(%2)\n" +	    "fsd	f15, (16 * 15)(%2)\n" +	    "fsd	f16, (16 * 16)(%2)\n" +	    "fsd	f17, (16 * 17)(%2)\n" +	    "fsd	f18, (16 * 18)(%2)\n" +	    "fsd	f19, (16 * 19)(%2)\n" +	    "fsd	f20, (16 * 20)(%2)\n" +	    "fsd	f21, (16 * 21)(%2)\n" +	    "fsd	f22, (16 * 22)(%2)\n" +	    "fsd	f23, (16 * 23)(%2)\n" +	    "fsd	f24, (16 * 24)(%2)\n" +	    "fsd	f25, (16 * 25)(%2)\n" +	    "fsd	f26, (16 * 26)(%2)\n" +	    "fsd	f27, (16 * 27)(%2)\n" +	    "fsd	f28, (16 * 28)(%2)\n" +	    "fsd	f29, (16 * 29)(%2)\n" +	    "fsd	f30, (16 * 30)(%2)\n" +	    "fsd	f31, (16 * 31)(%2)\n" +	    : "=&r"(fcsr), "=m"(*fp_x) : "r"(fp_x));  	regs->fp_fcsr = fcsr;  } diff --git a/sys/security/audit/bsm_errno.c b/sys/security/audit/bsm_errno.c index 6bc110cf0237..1f3b12735b84 100644 --- a/sys/security/audit/bsm_errno.c +++ b/sys/security/audit/bsm_errno.c @@ -514,7 +514,7 @@ static const struct bsm_errno bsm_errnos[] = {  #else  	ERRNO_NO_LOCAL_MAPPING,  #endif -	ES("Authenticateion error") }, +	ES("Authentication error") },  	{ BSM_ERRNO_ENEEDAUTH,  #ifdef ENEEDAUTH  	ENEEDAUTH, diff --git a/sys/sys/bus.h b/sys/sys/bus.h index e7ce152160f8..4cc8091bf775 100644 --- a/sys/sys/bus.h +++ b/sys/sys/bus.h @@ -600,6 +600,48 @@ bus_alloc_resource_anywhere(device_t dev, int type, int *rid,  	return (bus_alloc_resource(dev, type, rid, 0, ~0, count, flags));  } +/* Compat shims for bus_alloc_resource API. */ +static __inline struct resource * +bus_alloc_resource_const(device_t dev, int type, int rid, rman_res_t start, +    rman_res_t end, rman_res_t count, u_int flags) +{ +	return (bus_alloc_resource(dev, type, &rid, start, end, count, flags)); +} + +static __inline struct resource * +bus_alloc_resource_any_const(device_t dev, int type, int rid, u_int flags) +{ +	return (bus_alloc_resource(dev, type, &rid, 0, ~0, 1, flags)); +} + +static __inline struct resource * +bus_alloc_resource_anywhere_const(device_t dev, int type, int rid, +    rman_res_t count, u_int flags) +{ +	return (bus_alloc_resource(dev, type, &rid, 0, ~0, count, flags)); +} + +#define	bus_alloc_resource(dev, type, rid, start, end, count, flags)	\ +	_Generic((rid),							\ +	    int *: bus_alloc_resource,					\ +	    unsigned int *: bus_alloc_resource,				\ +	    default: bus_alloc_resource_const)				\ +	((dev), (type), (rid), (start), (end), (count), (flags)) + +#define	bus_alloc_resource_any(dev, type, rid, flags)			\ +	_Generic((rid),							\ +	    int *: bus_alloc_resource_any,				\ +	    unsigned int *: bus_alloc_resource_any,			\ +	    default: bus_alloc_resource_any_const)			\ +	((dev), (type), (rid), (flags)) + +#define	bus_alloc_resource_anywhere(dev, type, rid, count, flags)	\ +	_Generic((rid),							\ +	    int *: bus_alloc_resource_anywhere,				\ +	    unsigned int *: bus_alloc_resource_anywhere,		\ +	    default: bus_alloc_resource_anywhere_const)			\ +	((dev), (type), (rid), (count), (flags)) +  /* Compat shims for simpler bus resource API. */  int	bus_adjust_resource_old(device_t child, int type, struct resource *r,      rman_res_t start, rman_res_t end); diff --git a/sys/sys/param.h b/sys/sys/param.h index 7cfa3c6aa4a8..957f1762a17c 100644 --- a/sys/sys/param.h +++ b/sys/sys/param.h @@ -74,7 +74,7 @@   * cannot include sys/param.h and should only be updated here.   */  #undef __FreeBSD_version -#define __FreeBSD_version 1600002 +#define __FreeBSD_version 1600003  /*   * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, diff --git a/tests/sys/netpfil/pf/Makefile b/tests/sys/netpfil/pf/Makefile index b363e0b17c76..9416f6abbdf1 100644 --- a/tests/sys/netpfil/pf/Makefile +++ b/tests/sys/netpfil/pf/Makefile @@ -90,6 +90,8 @@ ${PACKAGE}FILES+=	\  			pft_ether.py \  			pft_read_ipfix.py \  			rdr-srcport.py \ +			tftpd_inetd.conf \ +			tftpd_proxy_inetd.conf \  			utils.subr \  			utils.py diff --git a/tests/sys/netpfil/pf/ioctl/validation.c b/tests/sys/netpfil/pf/ioctl/validation.c index 3e03163cc752..bb060e22f3a0 100644 --- a/tests/sys/netpfil/pf/ioctl/validation.c +++ b/tests/sys/netpfil/pf/ioctl/validation.c @@ -194,6 +194,38 @@ ATF_TC_CLEANUP(gettables, tc)  	COMMON_CLEANUP();  } +ATF_TC_WITH_CLEANUP(clrtables); +ATF_TC_HEAD(clrtables, tc) +{ +	atf_tc_set_md_var(tc, "require.user", "root"); +	atf_tc_set_md_var(tc, "require.kmods", "pf"); +} + +ATF_TC_BODY(clrtables, tc) +{ +	struct pfioc_table io; +	struct pfr_table tbl; +	int flags; + +	COMMON_HEAD(); + +	flags = 0; + +	memset(&io, '/', sizeof(io)); +	io.pfrio_flags = flags; +	io.pfrio_buffer = &tbl; +	io.pfrio_esize = 0; +	io.pfrio_size = 1; + +	if (ioctl(dev, DIOCRCLRTABLES, &io) == 0) +		atf_tc_fail("Request with unterminated anchor name succeeded"); +} + +ATF_TC_CLEANUP(clrtables, tc) +{ +	COMMON_CLEANUP(); +} +  ATF_TC_WITH_CLEANUP(gettstats);  ATF_TC_HEAD(gettstats, tc)  { @@ -949,11 +981,36 @@ ATF_TC_CLEANUP(natlook, tc)  	COMMON_CLEANUP();  } +ATF_TC_WITH_CLEANUP(addstate); +ATF_TC_HEAD(addstate, tc) +{ +	atf_tc_set_md_var(tc, "require.user", "root"); +	atf_tc_set_md_var(tc, "require.kmods", "pfsync"); +} + +ATF_TC_BODY(addstate, tc) +{ +	struct pfioc_state st; + +	COMMON_HEAD(); + +	memset(&st, 'a', sizeof(st)); +	st.state.timeout = PFTM_TCP_FIRST_PACKET; + +	ATF_CHECK_ERRNO(EINVAL, ioctl(dev, DIOCADDSTATE, &st) == -1); +} + +ATF_TC_CLEANUP(addstate, tc) +{ +	COMMON_CLEANUP(); +} +  ATF_TP_ADD_TCS(tp)  {  	ATF_TP_ADD_TC(tp, addtables);  	ATF_TP_ADD_TC(tp, deltables);  	ATF_TP_ADD_TC(tp, gettables); +	ATF_TP_ADD_TC(tp, clrtables);  	ATF_TP_ADD_TC(tp, getastats);  	ATF_TP_ADD_TC(tp, gettstats);  	ATF_TP_ADD_TC(tp, clrtstats); @@ -974,6 +1031,7 @@ ATF_TP_ADD_TCS(tp)  	ATF_TP_ADD_TC(tp, rpool_mtx);  	ATF_TP_ADD_TC(tp, rpool_mtx2);  	ATF_TP_ADD_TC(tp, natlook); +	ATF_TP_ADD_TC(tp, addstate);  	return (atf_no_error());  } diff --git a/tests/sys/netpfil/pf/nat.sh b/tests/sys/netpfil/pf/nat.sh index 1ef87cee3598..0824671fa0f1 100644 --- a/tests/sys/netpfil/pf/nat.sh +++ b/tests/sys/netpfil/pf/nat.sh @@ -477,15 +477,49 @@ no_addrs_random_cleanup()  	pft_cleanup  } -atf_test_case "nat_pass" "cleanup" -nat_pass_head() +atf_test_case "nat_pass_in" "cleanup" +nat_pass_in_head()  { -	atf_set descr 'IPv4 NAT on pass rule' +	atf_set descr 'IPv4 NAT on inbound pass rule'  	atf_set require.user root  	atf_set require.progs scapy  } -nat_pass_body() +nat_pass_in_body() +{ +	setup_router_server_ipv4 +	# Delete the route back to make sure that the traffic has been NAT-ed +	jexec server route del -net ${net_tester} ${net_server_host_router} +	# Provide routing back to the NAT address +	jexec server route add 203.0.113.0/24 ${net_server_host_router} +	jexec router route add 203.0.113.0/24 -iface ${epair_tester}b + +	pft_set_rules router \ +		"block" \ +		"pass in  on ${epair_tester}b inet proto tcp nat-to 203.0.113.0 keep state" \ +		"pass out on ${epair_server}a inet proto tcp keep state" + +	ping_server_check_reply exit:0 --ping-type=tcp3way --send-sport=4201 + +	jexec router pfctl -qvvsr +	jexec router pfctl -qvvss +	jexec router ifconfig +	jexec router netstat -rn +} + +nat_pass_in_cleanup() +{ +	pft_cleanup +} + +nat_pass_out_head() +{ +	atf_set descr 'IPv4 NAT on outbound pass rule' +	atf_set require.user root +	atf_set require.progs scapy +} + +nat_pass_out_body()  {  	setup_router_server_ipv4  	# Delete the route back to make sure that the traffic has been NAT-ed @@ -504,7 +538,7 @@ nat_pass_body()  	jexec router netstat -rn  } -nat_pass_cleanup() +nat_pass_out_cleanup()  {  	pft_cleanup  } @@ -874,7 +908,8 @@ atf_init_test_cases()  	atf_add_test_case "no_addrs_random"  	atf_add_test_case "map_e_compat"  	atf_add_test_case "map_e_pass" -	atf_add_test_case "nat_pass" +	atf_add_test_case "nat_pass_in" +	atf_add_test_case "nat_pass_out"  	atf_add_test_case "nat_match"  	atf_add_test_case "binat_compat"  	atf_add_test_case "binat_match" diff --git a/tests/sys/netpfil/pf/proxy.sh b/tests/sys/netpfil/pf/proxy.sh index 78ce25930c04..a07bb259b544 100644 --- a/tests/sys/netpfil/pf/proxy.sh +++ b/tests/sys/netpfil/pf/proxy.sh @@ -88,7 +88,68 @@ ftp_cleanup()  	pft_cleanup  } +atf_test_case "tftp" "cleanup" +tftp_head() +{ +	atf_set descr 'Test tftp-proxy' +	atf_set require.user root +} + +tftp_body() +{ +	pft_init + +	epair_client=$(vnet_mkepair) +	epair_link=$(vnet_mkepair) + +	ifconfig ${epair_client}a 192.0.2.2/24 up +	route add -net 198.51.100.0/24 192.0.2.1 + +	vnet_mkjail fwd ${epair_client}b ${epair_link}a +	jexec fwd ifconfig lo0 127.0.0.1/8 up +	jexec fwd ifconfig ${epair_client}b 192.0.2.1/24 up +	jexec fwd ifconfig ${epair_link}a 198.51.100.1/24 up +	jexec fwd ifconfig lo0 127.0.0.1/8 up +	jexec fwd sysctl net.inet.ip.forwarding=1 + +	vnet_mkjail srv ${epair_link}b +	jexec srv ifconfig ${epair_link}b 198.51.100.2/24 up +	jexec srv route add default 198.51.100.1 + +	# Start tftp server in srv +	jexec srv /usr/sbin/inetd -p ${PWD}/inetd-srv.pid \ +	    $(atf_get_srcdir)/tftpd_inetd.conf + +	jexec fwd /usr/sbin/inetd -p ${PWD}/inetd-fwd.pid \ +	    $(atf_get_srcdir)/tftpd_proxy_inetd.conf + +	jexec fwd pfctl -e +	pft_set_rules fwd \ +		"nat on ${epair_link}a inet from 192.0.2.0/24 to any -> (${epair_link}a)" \ +		"nat-anchor \"tftp-proxy/*\"" \ +		"rdr-anchor \"tftp-proxy/*\"" \ +		"rdr pass on ${epair_client}b proto udp from 192.0.2.0/24 to any port 69 -> 127.0.0.1 port 69" \ +		"anchor \"tftp-proxy/*\"" \ +		"pass out proto udp from 127.0.0.1 to any port 69" + +	# Create a dummy file to download +	echo 'foo' > /tmp/remote.txt +	echo 'get remote.txt local.txt' | tftp 198.51.100.2 + +	# Compare the downloaded file to the original +	if ! diff -q local.txt /tmp/remote.txt; +	then +		atf_fail 'Failed to retrieve file' +	fi +} + +tftp_cleanup() +{ +	pft_cleanup +} +  atf_init_test_cases()  {  	atf_add_test_case "ftp" +	atf_add_test_case "tftp"  } diff --git a/tests/sys/netpfil/pf/src_track.sh b/tests/sys/netpfil/pf/src_track.sh index d86b4ce6c466..1b09030f6174 100755 --- a/tests/sys/netpfil/pf/src_track.sh +++ b/tests/sys/netpfil/pf/src_track.sh @@ -588,6 +588,79 @@ mixed_af_cleanup()  	pft_cleanup  } +atf_test_case "check_valid" "cleanup" +check_valid_head() +{ +	atf_set descr 'Test if source node is invalidated on change in redirection pool' +	atf_set require.user root +	atf_set require.progs python3 scapy +} + +check_valid_body() +{ +	setup_router_server_nat64 + +	# Clients will connect from another network behind the router. +	# This allows for using multiple source addresses. +	jexec router route add -6 ${net_clients_6}::/${net_clients_6_mask} ${net_tester_6_host_tester} + +	jexec server1 ifconfig ${epair_server1}b inet6 ${net_server1_6}::42:1/128 alias +	jexec server1 ifconfig ${epair_server1}b inet6 ${net_server1_6}::42:2/128 alias + +	jexec router pfctl -e +	pft_set_rules router \ +		"set debug loud " \ +		"set state-policy if-bound" \ +		"table <targets> { ${net_server1_6}::42:1 }" \ +		"pass in on ${epair_tester}b \ +			route-to { (${epair_server1}a <targets>) } \ +			sticky-address \ +			proto tcp \ +			keep state" + +	atf_check -s exit:0 ${common_dir}/pft_ping.py \ +		--sendif ${epair_tester}a --replyif ${epair_tester}a \ +		--fromaddr ${net_clients_6}::1 --to ${host_server_6} \ +		--ping-type=tcp3way --send-sport=4201 + +	# A source node is created using the original redirection target +	nodes=$(mktemp) || exit 1 +	jexec router pfctl -qvvsS | normalize_pfctl_s > $nodes +	node_regexp='2001:db8:44::1 -> 2001:db8:4201::42:1 .* states 1,.* route sticky-address' +	grep -qE "${node_regexp}" $nodes || atf_fail "Source node not found for '${node_regexp}'" + +	# Change contents of the redirection table +	echo ${net_server1_6}::42:2 | jexec router pfctl -Tr -t targets -f - + +	atf_check -s exit:0 ${common_dir}/pft_ping.py \ +		--sendif ${epair_tester}a --replyif ${epair_tester}a \ +		--fromaddr ${net_clients_6}::1 --to ${host_server_6} \ +		--ping-type=tcp3way --send-sport=4202 + +	# The original source node was deleted, a new one was created. +	# It has 1 states. +	jexec router pfctl -qvvsS | normalize_pfctl_s > $nodes +	node_regexp='2001:db8:44::1 -> 2001:db8:4201::42:2 .* states 1,.* route sticky-address' +	grep -qE "${node_regexp}" $nodes || atf_fail "Source node not found for '${node_regexp}'" + +	atf_check -s exit:0 ${common_dir}/pft_ping.py \ +		--sendif ${epair_tester}a --replyif ${epair_tester}a \ +		--fromaddr ${net_clients_6}::1 --to ${host_server_6} \ +		--ping-type=tcp3way --send-sport=4203 + +	# Without redirection table change the source node is reused. +	# It has 2 states. +	jexec router pfctl -qvvsS | normalize_pfctl_s > $nodes +	node_regexp='2001:db8:44::1 -> 2001:db8:4201::42:2 .* states 2,.* route sticky-address' +	grep -qE "${node_regexp}" $nodes || atf_fail "Source node not found for '${node_regexp}'" +} + +check_valid_cleanup() +{ +	pft_cleanup +} + +  atf_init_test_cases()  {  	atf_add_test_case "source_track" @@ -598,4 +671,5 @@ atf_init_test_cases()  	atf_add_test_case "sn_types_compat"  	atf_add_test_case "sn_types_pass"  	atf_add_test_case "mixed_af" +	atf_add_test_case "check_valid"  } diff --git a/tests/sys/netpfil/pf/tftpd_inetd.conf b/tests/sys/netpfil/pf/tftpd_inetd.conf new file mode 100644 index 000000000000..3554d0a7fb08 --- /dev/null +++ b/tests/sys/netpfil/pf/tftpd_inetd.conf @@ -0,0 +1,28 @@ +# +# SPDX-License-Identifier: BSD-2-Clause +# +# Copyright (c) 2025 Rubicon Communications, LLC (Netgate) +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +#    notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +#    notice, this list of conditions and the following disclaimer in the +#    documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. + +tftp	dgram	udp	wait	root	/usr/libexec/tftpd	tftpd -l -S -s /tmp +tftp	dgram	udp6	wait	root	/usr/libexec/tftpd	tftpd -l -S -s /tmp diff --git a/tests/sys/netpfil/pf/tftpd_proxy_inetd.conf b/tests/sys/netpfil/pf/tftpd_proxy_inetd.conf new file mode 100644 index 000000000000..aa5f000f3bba --- /dev/null +++ b/tests/sys/netpfil/pf/tftpd_proxy_inetd.conf @@ -0,0 +1,27 @@ +# +# SPDX-License-Identifier: BSD-2-Clause +# +# Copyright (c) 2025 Rubicon Communications, LLC (Netgate) +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +#    notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +#    notice, this list of conditions and the following disclaimer in the +#    documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. + +tftp	dgram	udp	wait	root	/usr/libexec/tftp-proxy tftp-proxy diff --git a/tools/tools/git/git-arc.sh b/tools/tools/git/git-arc.sh index 22df0c61293a..fa618cdcbc22 100644 --- a/tools/tools/git/git-arc.sh +++ b/tools/tools/git/git-arc.sh @@ -242,7 +242,7 @@ title2diff()  {      local title -    title=$(echo $1 | sed 's/"/\\"/g') +    title=$(echo "$1" | sed 's/"/\\"/g')      arc_list --no-ansi |          awk -F': ' '{              if (substr($0, index($0, FS) + length(FS)) == "'"$title"'") { @@ -470,7 +470,7 @@ gitarc__list()          title=$(git show -s --format=%s "$commit")          diff=$(echo "$openrevs" | \              awk -F'D[1-9][0-9]*: ' \ -            '{if ($2 == "'"$(echo $title | sed 's/"/\\"/g')"'") print $0}') +            '{if ($2 == "'"$(echo "$title" | sed 's/"/\\"/g')"'") print $0}')          if [ -z "$diff" ]; then              echo "No Review            : $title"          elif [ "$(echo "$diff" | wc -l)" -ne 1 ]; then diff --git a/usr.sbin/bhyve/bhyve.8 b/usr.sbin/bhyve/bhyve.8 index 3df9f79c3b2c..27e067f50394 100644 --- a/usr.sbin/bhyve/bhyve.8 +++ b/usr.sbin/bhyve/bhyve.8 @@ -1,3 +1,6 @@ +.\" +.\" SPDX-License-Identifier: BSD-2-Clause +.\"  .\" Copyright (c) 2013 Peter Grehan  .\" All rights reserved.  .\" @@ -22,7 +25,7 @@  .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  .\" SUCH DAMAGE.  .\" -.Dd September 16, 2025 +.Dd October 28, 2025  .Dt BHYVE 8  .Os  .Sh NAME @@ -125,7 +128,7 @@ xAPIC mode is the default setting so this option is redundant.  It will be deprecated in a future version.  .It Fl C  Include guest memory in core files. -.It Fl c Op Ar setting ... +.It Fl c Oo Oo Cm cpus= Oc Ns Ar numcpus Oc Ns Oo Cm ,sockets= Ns Ar n Oc Ns Oo Cm ,cores= Ns Ar n Oc Ns Oo Cm ,threads= Ns Ar n Oc  Number of guest virtual CPUs  and/or the CPU topology.  The default value for each of diff --git a/usr.sbin/pkg/Makefile b/usr.sbin/pkg/Makefile index 0420065bb7eb..68b862826992 100644 --- a/usr.sbin/pkg/Makefile +++ b/usr.sbin/pkg/Makefile @@ -1,5 +1,6 @@  PACKAGE=	pkg-bootstrap +.MAKEFLAGS: -W  _BRANCH!=	${MAKE} -C ${SRCTOP}/release -V BRANCH  BRANCH?=	${_BRANCH}  .if ${BRANCH:MCURRENT} != "" | 
