From owner-svn-src-all@freebsd.org Sun Jul 5 00:07:54 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4A35535BEA6; Sun, 5 Jul 2020 00:07:54 +0000 (UTC) (envelope-from peter@rulingia.com) Received: from vtr.rulingia.com (vtr.rulingia.com [IPv6:2001:19f0:5801:ebe:5400:1ff:fe53:30fd]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "vtr.rulingia.com", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49zptd2pJpz4Gfy; Sun, 5 Jul 2020 00:07:53 +0000 (UTC) (envelope-from peter@rulingia.com) Received: from server.rulingia.com (ppp239-208.static.internode.on.net [59.167.239.208]) by vtr.rulingia.com (8.15.2/8.15.2) with ESMTPS id 06507jLt005121 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sun, 5 Jul 2020 10:07:50 +1000 (AEST) (envelope-from peter@rulingia.com) X-Bogosity: Ham, spamicity=0.000000 Received: from server.rulingia.com (localhost.rulingia.com [127.0.0.1]) by server.rulingia.com (8.15.2/8.15.2) with ESMTPS id 06507dIO063481 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Sun, 5 Jul 2020 10:07:39 +1000 (AEST) (envelope-from peter@server.rulingia.com) Received: (from peter@localhost) by server.rulingia.com (8.15.2/8.15.2/Submit) id 06507di0063480; Sun, 5 Jul 2020 10:07:39 +1000 (AEST) (envelope-from peter) Date: Sun, 5 Jul 2020 10:07:39 +1000 From: Peter Jeremy To: Oleksandr Tymoshenko Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r362736 - head/sys/arm64/rockchip Message-ID: <20200705000739.GE30039@server.rulingia.com> References: <202006282111.05SLBAAq025544@repo.freebsd.org> <20200701085747.GA23928@server.rulingia.com> <20200701124738.GA30133@server.rulingia.com> <20200703002623.GA18584@bluezbox.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="sXc4Kmr5FA7axrvy" Content-Disposition: inline In-Reply-To: <20200703002623.GA18584@bluezbox.com> X-PGP-Key: http://www.rulingia.com/keys/peter.pgp X-Rspamd-Queue-Id: 49zptd2pJpz4Gfy X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=pass (mx1.freebsd.org: domain of peter@rulingia.com designates 2001:19f0:5801:ebe:5400:1ff:fe53:30fd as permitted sender) smtp.mailfrom=peter@rulingia.com X-Spamd-Result: default: False [-4.38 / 15.00]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-0.97)[-0.967]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; R_SPF_ALLOW(-0.20)[+mx:c]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.20)[multipart/signed,text/plain]; DMARC_NA(0.00)[rulingia.com]; NEURAL_HAM_LONG(-1.04)[-1.043]; TO_DN_SOME(0.00)[]; NEURAL_SPAM_SHORT(0.03)[0.026]; RCVD_COUNT_THREE(0.00)[3]; SIGNED_PGP(-2.00)[]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:~]; ASN(0.00)[asn:20473, ipnet:2001:19f0:5800::/38, country:US]; RCVD_TLS_ALL(0.00)[] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 00:07:54 -0000 --sXc4Kmr5FA7axrvy Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On 2020-Jul-02 17:26:23 -0700, Oleksandr Tymoshenko wro= te: >Could you try kernel with this patch? It's mostly debug output, >with one possible clock-related fix. > >https://people.freebsd.org/~gonzo/patches/rk3328-gmac-debug.patch It's still not working for me. I get the following: dwc0: mem 0xff540000-0xff54ffff irq = 44 on ofwbus0 setting RK3328 RX/TX delays: 24/36 >>> RK3328_GRF_MAC_CON1 (00000413): >>> gmac2io_gmii_clk_sel: 0x0 >>> gmac2io_rmii_extclk_sel: 0x1 >>> gmac2io_rmii_mode: 0x0 >>> gmac2io_rmii_clk_sel: 0x0 >>> gmac2io_phy_intf_sel: 0x1 >>> gmac2io_flowctrl: 0x0 >>> gmac2io_rxclk_dly_ena: 0x1 >>> gmac2io_txclk_dly_ena: 0x1 >>> RK3328_GRF_MAC_CON0 (00000c24): miibus0: on dwc0 rgephy0: PHY 0 on miibus0 rgephy0: OUI 0x00e04c, model 0x0011, rev. 6 rgephy0: none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT-F= DX, 1000baseT-FDX-master, auto >I have Rock64 v2, which, as you mentioned, has a known issue with GigE, so >my tests are not reliable. I'll try to get another RK3328 board for tests, >but it may take some time. I've asked on -arm if anyone else has tried this on a Rock64 v2 or v3. >If the clock fix doesn't help, I'll make >delays configuration run-time configurable with off by default until >more hardware is tested. That sounds like a good way forward - maybe boot and run-time configurable. It's a pity that there doesn't seem to be any documentation on what the numbers represent (or what the "default" value is) - which means that actually adjusting the delay numbers would be very time consuming. --=20 Peter Jeremy --sXc4Kmr5FA7axrvy Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQKTBAEBCgB9FiEE2M6l8vfIeOACl4uUHZIUommfjLIFAl8BGctfFIAAAAAALgAo aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEQ4 Q0VBNUYyRjdDODc4RTAwMjk3OEI5NDFEOTIxNEEyNjk5RjhDQjIACgkQHZIUommf jLJjFQ/+IgzUBQZjUTUd4kgS739w6XR2uORohPk3ClK4x/rlqyvmOgYX98RR9ull bVI5/IUIcvbGynWEgpdHrYXxj6vRr38hiownDLb/TV9gB5SjYLSEX/uoALY/PpaQ jPEMRsIBnQpR+AXa29dHSO9R4554SxbOy0SVczzR2dyiPRBrl+AhLOD9h5T+7z1M 4z/WLm7OE/8U8eRPxr6srV7Vd9tDpHXiAI5AGZhGEWvLvaZvtp4stBZaV4ipg62X HzWp5HazUrkOv+tA94R0ahzFDcJnffFniMgFUcZ1kjxhhv+FoRo27f4c4rykaaqh azwOB/F8whXqr/w8oC4EMdwiZ1PYVwSOy27pO5DKaOt0rS5vXO9tvb0z4Fpxt6Px rv088cygimB6ebDFzz37snogH4QiOFvIibeHloLnPIA5mh/Ai7SGU64XwKauBWlx 0tDnBb5eJDJjnbZf5GNxSru395HKo1hoA3GRL1jN5pBPfM77NV5fJOHSI3T5rVcN JXuFF6Us8GjrLKX4NFaMzaliw34yjHWsFA0NrqxNU8+Skc8nNdTGyMqTZ/zf8+3v ngJMi9zVy9WvP9jcXUCYVYgjC5JjrmDzsKrXcO0nEGs+T5/ebbgiBweXwRfVPqAR P+NoztKlRjFPs/FHvENdZpBFH9VdM+XtuTAuumkKkI30OHJMXRE= =TTrl -----END PGP SIGNATURE----- --sXc4Kmr5FA7axrvy-- From owner-svn-src-all@freebsd.org Sun Jul 5 00:19:08 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DA19F35C253; Sun, 5 Jul 2020 00:19:08 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49zq7c4ncRz4HNW; Sun, 5 Jul 2020 00:19:08 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 872E924C1E; Sun, 5 Jul 2020 00:19:08 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0650J8Wm090136; Sun, 5 Jul 2020 00:19:08 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0650J8bH090135; Sun, 5 Jul 2020 00:19:08 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <202007050019.0650J8bH090135@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Sun, 5 Jul 2020 00:19:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362937 - head/sbin/newfs_msdos X-SVN-Group: head X-SVN-Commit-Author: delphij X-SVN-Commit-Paths: head/sbin/newfs_msdos X-SVN-Commit-Revision: 362937 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 00:19:08 -0000 Author: delphij Date: Sun Jul 5 00:19:08 2020 New Revision: 362937 URL: https://svnweb.freebsd.org/changeset/base/362937 Log: Use KERN_MAXPHYS. Suggested by: imp Reviewed by: imp, cem (earlier version), emaste MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D25563 Modified: head/sbin/newfs_msdos/mkfs_msdos.c Modified: head/sbin/newfs_msdos/mkfs_msdos.c ============================================================================== --- head/sbin/newfs_msdos/mkfs_msdos.c Sat Jul 4 18:37:04 2020 (r362936) +++ head/sbin/newfs_msdos/mkfs_msdos.c Sun Jul 5 00:19:08 2020 (r362937) @@ -41,8 +41,10 @@ static const char rcsid[] = #include #endif #include +#include #include +#include #include #include #include @@ -78,25 +80,6 @@ static const char rcsid[] = #define MAXCLS16 0xfff4U /* maximum FAT16 clusters */ #define MAXCLS32 0xffffff4U /* maximum FAT32 clusters */ -#ifndef CTASSERT -#define CTASSERT(x) _CTASSERT(x, __LINE__) -#define _CTASSERT(x, y) __CTASSERT(x, y) -#define __CTASSERT(x, y) typedef char __assert_ ## y [(x) ? 1 : -1] -#endif - -/* - * For better performance, we want to write larger chunks instead of - * individual sectors (the size can only be 512, 1024, 2048 or 4096 - * bytes). Assert that MAXPHYS can always hold an integer number of - * sectors by asserting that both are power of two numbers and the - * MAXPHYS is greater than MAXBPS. - */ -CTASSERT(powerof2(MAXPHYS)); -CTASSERT(powerof2(MAXBPS)); -CTASSERT(MAXPHYS > MAXBPS); - -const static ssize_t chunksize = MAXPHYS; - #define mincls(fat) ((fat) == 12 ? MINCLS12 : \ (fat) == 16 ? MINCLS16 : \ MINCLS32) @@ -240,6 +223,7 @@ static volatile sig_atomic_t got_siginfo; static void infohandler(int); static int check_mounted(const char *, mode_t); +static ssize_t getchunksize(void); static int getstdfmt(const char *, struct bpb *); static int getdiskinfo(int, const char *, const char *, int, struct bpb *); static void print_bpb(struct bpb *); @@ -272,6 +256,7 @@ mkfs_msdos(const char *fname, const char *dtype, const bool set_res, set_spf, set_spc; int fd, fd1, rv; struct msdos_options o = *op; + ssize_t chunksize; physbuf = NULL; rv = -1; @@ -640,6 +625,7 @@ mkfs_msdos(const char *fname, const char *dtype, const tm = localtime(&now); } + chunksize = getchunksize(); physbuf = malloc(chunksize); if (physbuf == NULL) { warn(NULL); @@ -848,6 +834,47 @@ check_mounted(const char *fname, mode_t mode) } #endif return 0; +} + +/* + * Get optimal I/O size + */ +static ssize_t +getchunksize(void) +{ + static int chunksize; + + if (chunksize != 0) + return ((ssize_t)chunksize); + +#ifdef KERN_MAXPHYS + int mib[2]; + size_t len; + + mib[0] = CTL_KERN; + mib[1] = KERN_MAXPHYS; + len = sizeof(chunksize); + + if (sysctl(mib, 2, &chunksize, &len, NULL, 0) == -1) { + warn("sysctl: KERN_MAXPHYS, using %zu", (size_t)MAXPHYS); + chunksize = 0; + } +#endif + if (chunksize == 0) + chunksize = MAXPHYS; + + /* + * For better performance, we want to write larger chunks instead of + * individual sectors (the size can only be 512, 1024, 2048 or 4096 + * bytes). Assert that chunksize can always hold an integer number of + * sectors by asserting that both are power of two numbers and the + * chunksize is greater than MAXBPS. + */ + static_assert(powerof2(MAXBPS), "MAXBPS is not power of 2"); + assert(powerof2(chunksize)); + assert(chunksize > MAXBPS); + + return ((ssize_t)chunksize); } /* From owner-svn-src-all@freebsd.org Sun Jul 5 05:14:34 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 275173611AC; Sun, 5 Jul 2020 05:14:34 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49zxhV0BQRz4TnZ; Sun, 5 Jul 2020 05:14:34 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D072E85AD; Sun, 5 Jul 2020 05:14:33 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0655EX36074217; Sun, 5 Jul 2020 05:14:33 GMT (envelope-from np@FreeBSD.org) Received: (from np@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0655EXfr074216; Sun, 5 Jul 2020 05:14:33 GMT (envelope-from np@FreeBSD.org) Message-Id: <202007050514.0655EXfr074216@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: np set sender to np@FreeBSD.org using -f From: Navdeep Parhar Date: Sun, 5 Jul 2020 05:14:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362938 - head/sys/dev/cxgbe X-SVN-Group: head X-SVN-Commit-Author: np X-SVN-Commit-Paths: head/sys/dev/cxgbe X-SVN-Commit-Revision: 362938 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 05:14:34 -0000 Author: np Date: Sun Jul 5 05:14:33 2020 New Revision: 362938 URL: https://svnweb.freebsd.org/changeset/base/362938 Log: cxgbe(4): Fix a bug (introduced in r362905) where some tx traffic wasn't being reported to BPF. Modified: head/sys/dev/cxgbe/t4_sge.c Modified: head/sys/dev/cxgbe/t4_sge.c ============================================================================== --- head/sys/dev/cxgbe/t4_sge.c Sun Jul 5 00:19:08 2020 (r362937) +++ head/sys/dev/cxgbe/t4_sge.c Sun Jul 5 05:14:33 2020 (r362938) @@ -3013,6 +3013,7 @@ eth_tx(struct mp_ring *r, u_int cidx, u_int pidx, bool if (avail < n) break; /* out of descriptors */ } + ETHER_BPF_MTAP(ifp, m0); if (sc->flags & IS_VF) n = write_txpkt_vm_wr(sc, txq, m0); else From owner-svn-src-all@freebsd.org Sun Jul 5 06:50:22 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id CE0EE362A90; Sun, 5 Jul 2020 06:50:22 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49zzq25B6vz4YXj; Sun, 5 Jul 2020 06:50:22 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9539795D5; Sun, 5 Jul 2020 06:50:22 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0656oMOE030323; Sun, 5 Jul 2020 06:50:22 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0656oM0o030322; Sun, 5 Jul 2020 06:50:22 GMT (envelope-from kib@FreeBSD.org) Message-Id: <202007050650.0656oM0o030322@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Sun, 5 Jul 2020 06:50:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r362939 - stable/12/usr.bin/top X-SVN-Group: stable-12 X-SVN-Commit-Author: kib X-SVN-Commit-Paths: stable/12/usr.bin/top X-SVN-Commit-Revision: 362939 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 06:50:22 -0000 Author: kib Date: Sun Jul 5 06:50:22 2020 New Revision: 362939 URL: https://svnweb.freebsd.org/changeset/base/362939 Log: MFC r362711: top: do not try to use sysctl machdep.smp_active. Modified: stable/12/usr.bin/top/machine.c Directory Properties: stable/12/ (props changed) Modified: stable/12/usr.bin/top/machine.c ============================================================================== --- stable/12/usr.bin/top/machine.c Sun Jul 5 05:14:33 2020 (r362938) +++ stable/12/usr.bin/top/machine.c Sun Jul 5 06:50:22 2020 (r362939) @@ -278,10 +278,7 @@ machine_init(struct statics *statics) size_t size; size = sizeof(smpmode); - if ((sysctlbyname("machdep.smp_active", &smpmode, &size, - NULL, 0) != 0 && - sysctlbyname("kern.smp.active", &smpmode, &size, - NULL, 0) != 0) || + if (sysctlbyname("kern.smp.active", &smpmode, &size, NULL, 0) != 0 || size != sizeof(smpmode)) smpmode = 0; From owner-svn-src-all@freebsd.org Sun Jul 5 06:51:39 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B24D9362B1D; Sun, 5 Jul 2020 06:51:39 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49zzrW4LXGz4Yc2; Sun, 5 Jul 2020 06:51:39 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7886C94D1; Sun, 5 Jul 2020 06:51:39 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0656pdit032089; Sun, 5 Jul 2020 06:51:39 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0656pd1O032088; Sun, 5 Jul 2020 06:51:39 GMT (envelope-from kib@FreeBSD.org) Message-Id: <202007050651.0656pd1O032088@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Sun, 5 Jul 2020 06:51:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r362940 - stable/11/usr.bin/top X-SVN-Group: stable-11 X-SVN-Commit-Author: kib X-SVN-Commit-Paths: stable/11/usr.bin/top X-SVN-Commit-Revision: 362940 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 06:51:39 -0000 Author: kib Date: Sun Jul 5 06:51:39 2020 New Revision: 362940 URL: https://svnweb.freebsd.org/changeset/base/362940 Log: MFC r362711: top: do not try to use sysctl machdep.smp_active. Modified: stable/11/usr.bin/top/machine.c Directory Properties: stable/11/ (props changed) Modified: stable/11/usr.bin/top/machine.c ============================================================================== --- stable/11/usr.bin/top/machine.c Sun Jul 5 06:50:22 2020 (r362939) +++ stable/11/usr.bin/top/machine.c Sun Jul 5 06:51:39 2020 (r362940) @@ -333,10 +333,7 @@ machine_init(struct statics *statics, char do_unames) struct passwd *pw; size = sizeof(smpmode); - if ((sysctlbyname("machdep.smp_active", &smpmode, &size, - NULL, 0) != 0 && - sysctlbyname("kern.smp.active", &smpmode, &size, - NULL, 0) != 0) || + if (sysctlbyname("kern.smp.active", &smpmode, &size, NULL, 0) != 0 || size != sizeof(smpmode)) smpmode = 0; From owner-svn-src-all@freebsd.org Sun Jul 5 07:40:17 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 39DAD3642C9; Sun, 5 Jul 2020 07:40:17 +0000 (UTC) (envelope-from gbe@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B00wd0lGtz4bmw; Sun, 5 Jul 2020 07:40:17 +0000 (UTC) (envelope-from gbe@freebsd.org) Received: from localhost (p548612f6.dip0.t-ipconnect.de [84.134.18.246]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) (Authenticated sender: gbe) by smtp.freebsd.org (Postfix) with ESMTPSA id 9394E1487F; Sun, 5 Jul 2020 07:40:16 +0000 (UTC) (envelope-from gbe@freebsd.org) Date: Sun, 5 Jul 2020 09:40:14 +0200 From: Gordon Bergling To: Alexey Dokuchaev Cc: rgrimes@freebsd.org, Warner Losh , src-committers , svn-src-all , svn-src-head Subject: Re: svn commit: r362809 - head/contrib/mandoc Message-ID: <20200705074014.GA16505@lion.0xfce3.net> References: <20200701234213.GA54023@FreeBSD.org> <202007020001.062010DA058837@gndrsh.dnsmgr.net> <20200702000613.GA93146@FreeBSD.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200702000613.GA93146@FreeBSD.org> X-Url: X-Operating-System: FreeBSD 12.1-STABLE amd64 X-Host-Uptime: 9:07AM up 1 day, 21:57, 6 users, load averages: 4.67, 5.02, 4.83 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 07:40:17 -0000 On Thu, Jul 02, 2020 at 12:06:13AM +0000, Alexey Dokuchaev wrote: > On Wed, Jul 01, 2020 at 05:01:00PM -0700, Rodney W. Grimes wrote: > > Thats good, but realize the page already contains history that > > reads like: > > > > HISTORY > > Part of the functionality of whatis was already provided by the former > > manwhere utility in 1BSD. The apropos and whatis utilities first ap- > > peared in 2BSD. They were rewritten from scratch for OpenBSD 5.6. > > > > The -M option and the MANPATH variable first appeared in 4.3BSD; -m in > > 4.3BSD-Reno; -C in 4.4BSD Lite1; and -S and -s in OpenBSD 4.5 for apropos > > and in OpenBSD 5.6 for whatis. The options -acfhIKklOTWw appeared in > > OpenBSD 5.7. > > > > And further contains: > > > > AUTHORS > > Bill Joy wrote manwhere in 1977 and the original BSD apropos and whatis > > in February 1979. The current version was written by Kristaps Dzonsons > > and Ingo Schwarze . > > > > So the history is rich and complete, do we really need to say when we > > incorporated this into FreeBSD from OpenBSD's mandoc in the manual page? > > Ah, in this case, the only thing lacking from the current version is mention > of FreeBSD 11.1. Sorry for not checking with that before writing my reply. > My main point, however, was that reverse chronological order looks strange. I have created the following differential and integrated the given feedback. https://reviews.freebsd.org/D25566 If necessary I could revert r362809, but somebody should explicit request it. --Gordon From owner-svn-src-all@freebsd.org Sun Jul 5 10:57:29 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0ABE13685A6; Sun, 5 Jul 2020 10:57:29 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B05J86Rfmz3Y4X; Sun, 5 Jul 2020 10:57:28 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C14F3BE6D; Sun, 5 Jul 2020 10:57:28 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 065AvSno085086; Sun, 5 Jul 2020 10:57:28 GMT (envelope-from trasz@FreeBSD.org) Received: (from trasz@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 065AvSaV085085; Sun, 5 Jul 2020 10:57:28 GMT (envelope-from trasz@FreeBSD.org) Message-Id: <202007051057.065AvSaV085085@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: trasz set sender to trasz@FreeBSD.org using -f From: Edward Tomasz Napierala Date: Sun, 5 Jul 2020 10:57:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362941 - head/sys/compat/linux X-SVN-Group: head X-SVN-Commit-Author: trasz X-SVN-Commit-Paths: head/sys/compat/linux X-SVN-Commit-Revision: 362941 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 10:57:29 -0000 Author: trasz Date: Sun Jul 5 10:57:28 2020 New Revision: 362941 URL: https://svnweb.freebsd.org/changeset/base/362941 Log: Fix Linux recvmsg(2) when msg_namelen returned is 0. Previously it would fail with EINVAL, breaking some of the Python regression tests. While here, cap the user-controlled message length. Note that the code doesn't seem to be copying out the new length in either (success or failure) case. This will be addressed separately. Reviewed by: kib MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D25392 Modified: head/sys/compat/linux/linux_socket.c Modified: head/sys/compat/linux/linux_socket.c ============================================================================== --- head/sys/compat/linux/linux_socket.c Sun Jul 5 06:51:39 2020 (r362940) +++ head/sys/compat/linux/linux_socket.c Sun Jul 5 10:57:28 2020 (r362941) @@ -1196,11 +1196,14 @@ linux_recvmsg_common(struct thread *td, l_int s, struc if (error != 0) return (error); - if (msg->msg_name) { + if (msg->msg_name != NULL && msg->msg_namelen > 0) { + msg->msg_namelen = min(msg->msg_namelen, SOCK_MAXADDRLEN); sa = malloc(msg->msg_namelen, M_SONAME, M_WAITOK); msg->msg_name = sa; - } else + } else { sa = NULL; + msg->msg_name = NULL; + } uiov = msg->msg_iov; msg->msg_iov = iov; @@ -1210,7 +1213,10 @@ linux_recvmsg_common(struct thread *td, l_int s, struc if (error != 0) goto bad; - if (msg->msg_name) { + /* + * Note that kern_recvit() updates msg->msg_namelen. + */ + if (msg->msg_name != NULL && msg->msg_namelen > 0) { msg->msg_name = PTRIN(linux_msghdr.msg_name); error = bsd_to_linux_sockaddr(sa, &lsa, msg->msg_namelen); if (error == 0) From owner-svn-src-all@freebsd.org Sun Jul 5 13:08:18 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9930036B606; Sun, 5 Jul 2020 13:08:18 +0000 (UTC) (envelope-from zeising@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B08C63TPtz3fdw; Sun, 5 Jul 2020 13:08:18 +0000 (UTC) (envelope-from zeising@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5AB5EDAD0; Sun, 5 Jul 2020 13:08:18 +0000 (UTC) (envelope-from zeising@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 065D8IHK065252; Sun, 5 Jul 2020 13:08:18 GMT (envelope-from zeising@FreeBSD.org) Received: (from zeising@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 065D8IX3065251; Sun, 5 Jul 2020 13:08:18 GMT (envelope-from zeising@FreeBSD.org) Message-Id: <202007051308.065D8IX3065251@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: zeising set sender to zeising@FreeBSD.org using -f From: Niclas Zeising Date: Sun, 5 Jul 2020 13:08:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362942 - head/sbin/shutdown X-SVN-Group: head X-SVN-Commit-Author: zeising X-SVN-Commit-Paths: head/sbin/shutdown X-SVN-Commit-Revision: 362942 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 13:08:18 -0000 Author: zeising (doc,ports committer) Date: Sun Jul 5 13:08:17 2020 New Revision: 362942 URL: https://svnweb.freebsd.org/changeset/base/362942 Log: shutdown.8: Fix typo Fix a typo in shutdown.8, use ',' instead of '.' when listing items. MFC after: 1 week Modified: head/sbin/shutdown/shutdown.8 Modified: head/sbin/shutdown/shutdown.8 ============================================================================== --- head/sbin/shutdown/shutdown.8 Sun Jul 5 10:57:28 2020 (r362941) +++ head/sbin/shutdown/shutdown.8 Sun Jul 5 13:08:17 2020 (r362942) @@ -135,7 +135,7 @@ suffix: .Dq Li s , .Dq Li sec , .Dq Li m , -.Dq Li min . +.Dq Li min , .Dq Li h , .Dq Li hour . .Pp From owner-svn-src-all@freebsd.org Sun Jul 5 13:15:14 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 952E336B4AF; Sun, 5 Jul 2020 13:15:14 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B08M63G0rz3gDN; Sun, 5 Jul 2020 13:15:14 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5358CDA73; Sun, 5 Jul 2020 13:15:14 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 065DFETt071248; Sun, 5 Jul 2020 13:15:14 GMT (envelope-from trasz@FreeBSD.org) Received: (from trasz@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 065DFEQE071247; Sun, 5 Jul 2020 13:15:14 GMT (envelope-from trasz@FreeBSD.org) Message-Id: <202007051315.065DFEQE071247@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: trasz set sender to trasz@FreeBSD.org using -f From: Edward Tomasz Napierala Date: Sun, 5 Jul 2020 13:15:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362943 - head/share/man/man4 X-SVN-Group: head X-SVN-Commit-Author: trasz X-SVN-Commit-Paths: head/share/man/man4 X-SVN-Commit-Revision: 362943 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 13:15:14 -0000 Author: trasz Date: Sun Jul 5 13:15:13 2020 New Revision: 362943 URL: https://svnweb.freebsd.org/changeset/base/362943 Log: Make linux(4) man page also mention /compat/linux/dev. MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Modified: head/share/man/man4/linux.4 Modified: head/share/man/man4/linux.4 ============================================================================== --- head/share/man/man4/linux.4 Sun Jul 5 13:08:17 2020 (r362942) +++ head/share/man/man4/linux.4 Sun Jul 5 13:15:13 2020 (r362943) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd July 4, 2020 +.Dd July 5, 2020 .Dt LINUX 4 .Os .Sh NAME @@ -129,6 +129,9 @@ Defaults to 0. .Bl -tag -width /compat/linux/dev/shm -compact .It Pa /compat/linux minimal Linux run-time environment +.It Pa /compat/linux/dev +device file system, see +.Xr devfs 5 .It Pa /compat/linux/dev/fd file descriptor file system mounted with the .Cm linrdlnk From owner-svn-src-all@freebsd.org Sun Jul 5 14:38:24 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 973F136D009; Sun, 5 Jul 2020 14:38:24 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0BC43YMlz41hq; Sun, 5 Jul 2020 14:38:24 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 591BCEF27; Sun, 5 Jul 2020 14:38:24 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 065EcO1V020762; Sun, 5 Jul 2020 14:38:24 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 065EcNxl020756; Sun, 5 Jul 2020 14:38:23 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <202007051438.065EcNxl020756@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Sun, 5 Jul 2020 14:38:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362944 - in head/sys: amd64/amd64 arm64/arm64 kern sys X-SVN-Group: head X-SVN-Commit-Author: andrew X-SVN-Commit-Paths: in head/sys: amd64/amd64 arm64/arm64 kern sys X-SVN-Commit-Revision: 362944 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 14:38:24 -0000 Author: andrew Date: Sun Jul 5 14:38:22 2020 New Revision: 362944 URL: https://svnweb.freebsd.org/changeset/base/362944 Log: Rerun kernel ifunc resolvers after all CPUs have started On architectures that use RELA relocations it is safe to rerun the ifunc resolvers on after all CPUs have started, but while they are sill parked. On arm64 with big.LITTLE this is needed as some SoCs have shipped with different ID register values the big and little clusters meaning we were unable to rely on the register values from the boot CPU. Add support for rerunning the resolvers on arm64 and amd64 as these are both RELA using architectures. Reviewed by: kib Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D25455 Modified: head/sys/amd64/amd64/elf_machdep.c head/sys/amd64/amd64/machdep.c head/sys/arm64/arm64/elf_machdep.c head/sys/arm64/arm64/machdep.c head/sys/kern/link_elf.c head/sys/sys/linker.h Modified: head/sys/amd64/amd64/elf_machdep.c ============================================================================== --- head/sys/amd64/amd64/elf_machdep.c Sun Jul 5 13:15:13 2020 (r362943) +++ head/sys/amd64/amd64/elf_machdep.c Sun Jul 5 14:38:22 2020 (r362944) @@ -186,7 +186,7 @@ elf_is_ifunc_reloc(Elf_Size r_info) /* Process one elf relocation with addend. */ static int elf_reloc_internal(linker_file_t lf, Elf_Addr relocbase, const void *data, - int type, elf_lookup_fn lookup) + int type, bool late_ifunc, elf_lookup_fn lookup) { Elf64_Addr *where, val; Elf32_Addr *where32, val32; @@ -226,6 +226,13 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas panic("unknown reloc type %d\n", type); } + if (late_ifunc) { + KASSERT(type == ELF_RELOC_RELA, + ("Only RELA ifunc relocations are supported")); + if (rtype != R_X86_64_IRELATIVE) + return (0); + } + switch (rtype) { case R_X86_64_NONE: /* none */ break; @@ -305,7 +312,7 @@ elf_reloc(linker_file_t lf, Elf_Addr relocbase, const elf_lookup_fn lookup) { - return (elf_reloc_internal(lf, relocbase, data, type, lookup)); + return (elf_reloc_internal(lf, relocbase, data, type, false, lookup)); } int @@ -313,7 +320,15 @@ elf_reloc_local(linker_file_t lf, Elf_Addr relocbase, int type, elf_lookup_fn lookup) { - return (elf_reloc_internal(lf, relocbase, data, type, lookup)); + return (elf_reloc_internal(lf, relocbase, data, type, false, lookup)); +} + +int +elf_reloc_late(linker_file_t lf, Elf_Addr relocbase, const void *data, + int type, elf_lookup_fn lookup) +{ + + return (elf_reloc_internal(lf, relocbase, data, type, true, lookup)); } int Modified: head/sys/amd64/amd64/machdep.c ============================================================================== --- head/sys/amd64/amd64/machdep.c Sun Jul 5 13:15:13 2020 (r362943) +++ head/sys/amd64/amd64/machdep.c Sun Jul 5 14:38:22 2020 (r362944) @@ -320,6 +320,13 @@ cpu_startup(dummy) cpu_setregs(); } +static void +late_ifunc_resolve(void *dummy __unused) +{ + link_elf_late_ireloc(); +} +SYSINIT(late_ifunc_resolve, SI_SUB_CPU, SI_ORDER_ANY, late_ifunc_resolve, NULL); + /* * Send an interrupt to process. * Modified: head/sys/arm64/arm64/elf_machdep.c ============================================================================== --- head/sys/arm64/arm64/elf_machdep.c Sun Jul 5 13:15:13 2020 (r362943) +++ head/sys/arm64/arm64/elf_machdep.c Sun Jul 5 14:38:22 2020 (r362944) @@ -143,8 +143,10 @@ reloc_instr_imm(Elf32_Addr *where, Elf_Addr val, u_int */ static int elf_reloc_internal(linker_file_t lf, Elf_Addr relocbase, const void *data, - int type, int local, elf_lookup_fn lookup) + int type, int flags, elf_lookup_fn lookup) { +#define ARM64_ELF_RELOC_LOCAL (1 << 0) +#define ARM64_ELF_RELOC_LATE_IFUNC (1 << 1) Elf_Addr *where, addr, addend, val; Elf_Word rtype, symidx; const Elf_Rel *rel; @@ -170,7 +172,14 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas panic("unknown reloc type %d\n", type); } - if (local) { + if ((flags & ARM64_ELF_RELOC_LATE_IFUNC) != 0) { + KASSERT(type == ELF_RELOC_RELA, + ("Only RELA ifunc relocations are supported")); + if (rtype != R_AARCH64_IRELATIVE) + return (0); + } + + if ((flags & ARM64_ELF_RELOC_LOCAL) != 0) { if (rtype == R_AARCH64_RELATIVE) *where = elf_relocaddr(lf, relocbase + addend); return (0); @@ -229,7 +238,8 @@ elf_reloc_local(linker_file_t lf, Elf_Addr relocbase, int type, elf_lookup_fn lookup) { - return (elf_reloc_internal(lf, relocbase, data, type, 1, lookup)); + return (elf_reloc_internal(lf, relocbase, data, type, + ARM64_ELF_RELOC_LOCAL, lookup)); } /* Process one elf relocation with addend. */ @@ -239,6 +249,15 @@ elf_reloc(linker_file_t lf, Elf_Addr relocbase, const { return (elf_reloc_internal(lf, relocbase, data, type, 0, lookup)); +} + +int +elf_reloc_late(linker_file_t lf, Elf_Addr relocbase, const void *data, + int type, elf_lookup_fn lookup) +{ + + return (elf_reloc_internal(lf, relocbase, data, type, + ARM64_ELF_RELOC_LATE_IFUNC, lookup)); } int Modified: head/sys/arm64/arm64/machdep.c ============================================================================== --- head/sys/arm64/arm64/machdep.c Sun Jul 5 13:15:13 2020 (r362943) +++ head/sys/arm64/arm64/machdep.c Sun Jul 5 14:38:22 2020 (r362944) @@ -181,6 +181,13 @@ cpu_startup(void *dummy) SYSINIT(cpu, SI_SUB_CPU, SI_ORDER_FIRST, cpu_startup, NULL); +static void +late_ifunc_resolve(void *dummy __unused) +{ + link_elf_late_ireloc(); +} +SYSINIT(late_ifunc_resolve, SI_SUB_CPU, SI_ORDER_ANY, late_ifunc_resolve, NULL); + int cpu_idle_wakeup(int cpu) { Modified: head/sys/kern/link_elf.c ============================================================================== --- head/sys/kern/link_elf.c Sun Jul 5 13:15:13 2020 (r362943) +++ head/sys/kern/link_elf.c Sun Jul 5 14:38:22 2020 (r362944) @@ -1925,4 +1925,18 @@ link_elf_ireloc(caddr_t kmdp) link_elf_preload_parse_symbols(ef); relocate_file1(ef, elf_lookup_ifunc, elf_reloc, true); } + +#if defined(__aarch64__) || defined(__amd64__) +void +link_elf_late_ireloc(void) +{ + elf_file_t ef; + + KASSERT(linker_kernel_file != NULL, + ("link_elf_late_ireloc: No kernel linker file found")); + ef = (elf_file_t)linker_kernel_file; + + relocate_file1(ef, elf_lookup_ifunc, elf_reloc_late, true); +} +#endif #endif Modified: head/sys/sys/linker.h ============================================================================== --- head/sys/sys/linker.h Sun Jul 5 13:15:13 2020 (r362943) +++ head/sys/sys/linker.h Sun Jul 5 14:38:22 2020 (r362944) @@ -289,6 +289,12 @@ const Elf_Sym *elf_get_sym(linker_file_t _lf, Elf_Size const char *elf_get_symname(linker_file_t _lf, Elf_Size _symidx); void link_elf_ireloc(caddr_t kmdp); +#if defined(__aarch64__) || defined(__amd64__) +int elf_reloc_late(linker_file_t _lf, Elf_Addr base, const void *_rel, + int _type, elf_lookup_fn _lu); +void link_elf_late_ireloc(void); +#endif + typedef struct linker_ctf { const uint8_t *ctftab; /* Decompressed CTF data. */ int ctfcnt; /* Number of CTF data bytes. */ From owner-svn-src-all@freebsd.org Sun Jul 5 14:43:15 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1FC3236D072; Sun, 5 Jul 2020 14:43:15 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0BJg05F9z42TF; Sun, 5 Jul 2020 14:43:15 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DB43AEE2F; Sun, 5 Jul 2020 14:43:14 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 065EhE6G026678; Sun, 5 Jul 2020 14:43:14 GMT (envelope-from se@FreeBSD.org) Received: (from se@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 065EhEpU026677; Sun, 5 Jul 2020 14:43:14 GMT (envelope-from se@FreeBSD.org) Message-Id: <202007051443.065EhEpU026677@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: se set sender to se@FreeBSD.org using -f From: =?UTF-8?Q?Stefan_E=c3=9fer?= Date: Sun, 5 Jul 2020 14:43:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362945 - head X-SVN-Group: head X-SVN-Commit-Author: se X-SVN-Commit-Paths: head X-SVN-Commit-Revision: 362945 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 14:43:15 -0000 Author: se Date: Sun Jul 5 14:43:14 2020 New Revision: 362945 URL: https://svnweb.freebsd.org/changeset/base/362945 Log: Add a note regarding the introduction of the new bc and dc implementations that are built by default on -CURRENT after 2020-06-26. Modified: head/UPDATING Modified: head/UPDATING ============================================================================== --- head/UPDATING Sun Jul 5 14:38:22 2020 (r362944) +++ head/UPDATING Sun Jul 5 14:43:14 2020 (r362945) @@ -26,6 +26,15 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: disable the most expensive debugging functionality run "ln -s 'abort:false,junk:false' /etc/malloc.conf".) +20200627: + A new implementation of bc and dc has been imorted in r362681. This + implementation corrects non-conformant behavior of the previous bc + and adds GNU bc compatible options. It offers a number of extensions, + is much faster on large values, and has support for message catalogs + (a number of languages are already supported, contributions of further + languages welcome). The option WITHOUT_GH_BC can be used to build the + world with the previous versions of bc and dc. + 20200625: r362639 changed the internal API used between the NFS kernel modules. As such, they all need to be rebuilt from sources. From owner-svn-src-all@freebsd.org Sun Jul 5 17:23:06 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id EA0DA3486E4; Sun, 5 Jul 2020 17:23:06 +0000 (UTC) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (br1.CN84in.dnsmgr.net [69.59.192.140]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0Fs60H5qz4BJ7; Sun, 5 Jul 2020 17:23:05 +0000 (UTC) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 065HMwYh074450; Sun, 5 Jul 2020 10:22:58 -0700 (PDT) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: (from freebsd@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 065HMwE1074449; Sun, 5 Jul 2020 10:22:58 -0700 (PDT) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <202007051722.065HMwE1074449@gndrsh.dnsmgr.net> Subject: Re: svn commit: r362809 - head/contrib/mandoc In-Reply-To: <20200705074014.GA16505@lion.0xfce3.net> To: Gordon Bergling Date: Sun, 5 Jul 2020 10:22:58 -0700 (PDT) CC: Alexey Dokuchaev , rgrimes@freebsd.org, Warner Losh , src-committers , svn-src-all , svn-src-head Reply-To: rgrimes@freebsd.org X-Mailer: ELM [version 2.4ME+ PL121h (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 4B0Fs60H5qz4BJ7 X-Spamd-Bar: + Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=none (mx1.freebsd.org: domain of freebsd@gndrsh.dnsmgr.net has no SPF policy when checking 69.59.192.140) smtp.mailfrom=freebsd@gndrsh.dnsmgr.net X-Spamd-Result: default: False [1.99 / 15.00]; HAS_REPLYTO(0.00)[rgrimes@freebsd.org]; ARC_NA(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; NEURAL_SPAM_SHORT(0.25)[0.255]; MIME_GOOD(-0.10)[text/plain]; REPLYTO_DOM_NEQ_FROM_DOM(0.00)[]; DMARC_NA(0.00)[dnsmgr.net]; AUTH_NA(1.00)[]; NEURAL_SPAM_MEDIUM(0.19)[0.186]; TO_MATCH_ENVRCPT_SOME(0.00)[]; NEURAL_SPAM_LONG(0.65)[0.645]; RCPT_COUNT_SEVEN(0.00)[7]; RCVD_TLS_LAST(0.00)[]; R_SPF_NA(0.00)[no SPF record]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:13868, ipnet:69.59.192.0/19, country:US]; RCVD_COUNT_TWO(0.00)[2]; MID_RHS_MATCH_FROM(0.00)[] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 17:23:07 -0000 > On Thu, Jul 02, 2020 at 12:06:13AM +0000, Alexey Dokuchaev wrote: > > On Wed, Jul 01, 2020 at 05:01:00PM -0700, Rodney W. Grimes wrote: > > > Thats good, but realize the page already contains history that > > > reads like: > > > > > > HISTORY > > > Part of the functionality of whatis was already provided by the former > > > manwhere utility in 1BSD. The apropos and whatis utilities first ap- > > > peared in 2BSD. They were rewritten from scratch for OpenBSD 5.6. > > > > > > The -M option and the MANPATH variable first appeared in 4.3BSD; -m in > > > 4.3BSD-Reno; -C in 4.4BSD Lite1; and -S and -s in OpenBSD 4.5 for apropos > > > and in OpenBSD 5.6 for whatis. The options -acfhIKklOTWw appeared in > > > OpenBSD 5.7. > > > > > > And further contains: > > > > > > AUTHORS > > > Bill Joy wrote manwhere in 1977 and the original BSD apropos and whatis > > > in February 1979. The current version was written by Kristaps Dzonsons > > > and Ingo Schwarze . > > > > > > So the history is rich and complete, do we really need to say when we > > > incorporated this into FreeBSD from OpenBSD's mandoc in the manual page? > > > > Ah, in this case, the only thing lacking from the current version is mention > > of FreeBSD 11.1. Sorry for not checking with that before writing my reply. > > My main point, however, was that reverse chronological order looks strange. > > I have created the following differential and integrated the given feedback. > > https://reviews.freebsd.org/D25566 > > If necessary I could revert r362809, but somebody should explicit request it. Consider it so requested. > --Gordon -- Rod Grimes rgrimes@freebsd.org From owner-svn-src-all@freebsd.org Sun Jul 5 19:38:36 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E7FD834B250; Sun, 5 Jul 2020 19:38:36 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0JsS5qz9z4Jm8; Sun, 5 Jul 2020 19:38:36 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id ABA0F12784; Sun, 5 Jul 2020 19:38:36 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 065Jcauh006031; Sun, 5 Jul 2020 19:38:36 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 065Jca0s006030; Sun, 5 Jul 2020 19:38:36 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202007051938.065Jca0s006030@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Sun, 5 Jul 2020 19:38:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362946 - head/sys/compat/linuxkpi/common/include/linux X-SVN-Group: head X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: head/sys/compat/linuxkpi/common/include/linux X-SVN-Commit-Revision: 362946 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 19:38:37 -0000 Author: hselasky Date: Sun Jul 5 19:38:36 2020 New Revision: 362946 URL: https://svnweb.freebsd.org/changeset/base/362946 Log: Fix include file order in io.h in the LinuxKPI. Make sure sys/types.h is included before machine/vm.h. PR: 247775 Submitted by: pkubaj@ MFC after: 1 week Sponsored by: Mellanox Technologies Modified: head/sys/compat/linuxkpi/common/include/linux/io.h Modified: head/sys/compat/linuxkpi/common/include/linux/io.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/linux/io.h Sun Jul 5 14:43:14 2020 (r362945) +++ head/sys/compat/linuxkpi/common/include/linux/io.h Sun Jul 5 19:38:36 2020 (r362946) @@ -31,9 +31,10 @@ #ifndef _LINUX_IO_H_ #define _LINUX_IO_H_ -#include #include #include + +#include #include #include From owner-svn-src-all@freebsd.org Sun Jul 5 19:53:55 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3B55834BE21; Sun, 5 Jul 2020 19:53:55 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0KC70qG0z4KYf; Sun, 5 Jul 2020 19:53:55 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id F361312929; Sun, 5 Jul 2020 19:53:54 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 065JrsaB018208; Sun, 5 Jul 2020 19:53:54 GMT (envelope-from kaktus@FreeBSD.org) Received: (from kaktus@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 065Jrs9T018207; Sun, 5 Jul 2020 19:53:54 GMT (envelope-from kaktus@FreeBSD.org) Message-Id: <202007051953.065Jrs9T018207@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kaktus set sender to kaktus@FreeBSD.org using -f From: Pawel Biernacki Date: Sun, 5 Jul 2020 19:53:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362947 - head/usr.bin/truss X-SVN-Group: head X-SVN-Commit-Author: kaktus X-SVN-Commit-Paths: head/usr.bin/truss X-SVN-Commit-Revision: 362947 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 19:53:55 -0000 Author: kaktus Date: Sun Jul 5 19:53:54 2020 New Revision: 362947 URL: https://svnweb.freebsd.org/changeset/base/362947 Log: truss: print more information about traced sysctls MFC after: 2 weeks Sponsored by: Mysterious Code Ltd. Modified: head/usr.bin/truss/syscalls.c Modified: head/usr.bin/truss/syscalls.c ============================================================================== --- head/usr.bin/truss/syscalls.c Sun Jul 5 19:38:36 2020 (r362946) +++ head/usr.bin/truss/syscalls.c Sun Jul 5 19:53:54 2020 (r362947) @@ -1577,14 +1577,37 @@ print_cmsgs(FILE *fp, pid_t pid, bool receive, struct } static void -print_sysctl_oid(FILE *fp, int *oid, int len) +print_sysctl_oid(FILE *fp, int *oid, size_t len) { - int i; + size_t i; + bool first; - for (i = 0; i < len; i++) - fprintf(fp, ".%d", oid[i]); + first = true; + fprintf(fp, "{ "); + for (i = 0; i < len; i++) { + fprintf(fp, "%s%d", first ? "" : ".", oid[i]); + first = false; + } + fprintf(fp, " }"); } +static void +print_sysctl(FILE *fp, int *oid, size_t len) +{ + char name[BUFSIZ]; + int qoid[CTL_MAXNAME + 2]; + size_t i; + + qoid[0] = CTL_SYSCTL; + qoid[1] = CTL_SYSCTL_NAME; + memcpy(qoid + 2, oid, len * sizeof(int)); + i = sizeof(name); + if (sysctl(qoid, len + 2, name, &i, 0, 0) == -1) + print_sysctl_oid(fp, oid, len); + else + fprintf(fp, "%s", name); +} + /* * Converts a syscall argument into a string. Said string is * allocated via malloc(), so needs to be free()'d. sc is @@ -2298,9 +2321,8 @@ print_arg(struct syscall_args *sc, unsigned long *args break; case Sysctl: { char name[BUFSIZ]; - int oid[CTL_MAXNAME + 2], qoid[CTL_MAXNAME + 2]; - size_t i; - int len; + int oid[CTL_MAXNAME + 2]; + size_t len; memset(name, 0, sizeof(name)); len = args[sc->offset + 1]; @@ -2314,39 +2336,35 @@ print_arg(struct syscall_args *sc, unsigned long *args fprintf(fp, "debug"); break; case CTL_SYSCTL_NAME: - fprintf(fp, "name"); + fprintf(fp, "name "); print_sysctl_oid(fp, oid + 2, len - 2); break; case CTL_SYSCTL_NEXT: fprintf(fp, "next"); break; case CTL_SYSCTL_NAME2OID: - fprintf(fp, "name2oid"); + fprintf(fp, "name2oid %s", + get_string(pid, + args[sc->offset + 4], + args[sc->offset + 5])); break; case CTL_SYSCTL_OIDFMT: - fprintf(fp, "oidfmt"); - print_sysctl_oid(fp, oid + 2, len - 2); + fprintf(fp, "oidfmt "); + print_sysctl(fp, oid + 2, len - 2); break; case CTL_SYSCTL_OIDDESCR: - fprintf(fp, "oiddescr"); - print_sysctl_oid(fp, oid + 2, len - 2); + fprintf(fp, "oiddescr "); + print_sysctl(fp, oid + 2, len - 2); break; case CTL_SYSCTL_OIDLABEL: - fprintf(fp, "oidlabel"); - print_sysctl_oid(fp, oid + 2, len - 2); + fprintf(fp, "oidlabel "); + print_sysctl(fp, oid + 2, len - 2); break; default: - print_sysctl_oid(fp, oid + 1, len - 1); + print_sysctl(fp, oid + 1, len - 1); } } else { - qoid[0] = CTL_SYSCTL; - qoid[1] = CTL_SYSCTL_NAME; - memcpy(qoid + 2, oid, len * sizeof(int)); - i = sizeof(name); - if (sysctl(qoid, len + 2, name, &i, 0, 0) == -1) - print_sysctl_oid(fp, qoid + 2, len); - else - fprintf(fp, "%s", name); + print_sysctl(fp, oid, len); } fprintf(fp, "\""); } From owner-svn-src-all@freebsd.org Sun Jul 5 20:25:53 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 786AE34C061; Sun, 5 Jul 2020 20:25:53 +0000 (UTC) (envelope-from pawel.biernacki@gmail.com) Received: from mail-ej1-f65.google.com (mail-ej1-f65.google.com [209.85.218.65]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0Kw053scz4Ldk; Sun, 5 Jul 2020 20:25:52 +0000 (UTC) (envelope-from pawel.biernacki@gmail.com) Received: by mail-ej1-f65.google.com with SMTP id w6so40404856ejq.6; Sun, 05 Jul 2020 13:25:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:content-transfer-encoding:mime-version :subject:date:references:to:in-reply-to:message-id; bh=8e2JXRl8piMcpqatjjLOfeG1tUviJAvlBD6u3w32Uo8=; b=Cb9t3Rz54qOWWlBQtdk/dF+9VvyLl1s9sHFdqqZMF0QknreRaIguQiFf6fIOlvMtlX jyjtI7u/ohKhI49injzxdv/Z8BUxPvZIvPt2TJAbcpmRwS0PC2tzygreQ7CQZt/RDYxA chCVuzdgw1gBzyADQ/pQmiPkLQJZUdDLaW4868hJMkMcKSBlK4RStDO8TJQSyPlAwBbZ y8WeMxEpr3dt/mMVfQ4mpnB4ZtSyME5mUKERPwPSmIoxSkahKnvov1BVQ7aONlUtbjmQ oZDJ+G0kft5rfFNIDEV+9z0nfHpbHBTCMrBkUpP5vkxLGAdRRf7CD/m7gYGtrYMN+tKs rDJQ== X-Gm-Message-State: AOAM533Pw5R/de7FizFEtHMvD3AM1oRsvKvhP9d6QXfQu87cdLFKj/hd jl4Q95YZ+3XKdw6E0YlcOmU0QheVpBM= X-Google-Smtp-Source: ABdhPJwkxe/9jj9jBLIAt9QRFVZ4da3F6ISDRJLZQXsCwQ3pemMVO2Gc8ChbP4PaltJnwdDocFrwyQ== X-Received: by 2002:ac2:5382:: with SMTP id g2mr14286434lfh.129.1593980303740; Sun, 05 Jul 2020 13:18:23 -0700 (PDT) Received: from macbook.localdomain (31-172-188-241.noc.fibertech.net.pl. [31.172.188.241]) by smtp.gmail.com with ESMTPSA id 11sm4980462lju.102.2020.07.05.13.18.22 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 05 Jul 2020 13:18:23 -0700 (PDT) From: =?utf-8?Q?Pawe=C5=82_Biernacki?= Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.120.23.2.1\)) Subject: Re: svn commit: r362947 - head/usr.bin/truss Date: Sun, 5 Jul 2020 22:18:18 +0200 References: <202007051953.065Jrs9T018207@repo.freebsd.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org In-Reply-To: <202007051953.065Jrs9T018207@repo.freebsd.org> Message-Id: <03E07B95-A86B-488C-B3C8-061546E54BBC@FreeBSD.org> X-Mailer: Apple Mail (2.3608.120.23.2.1) X-Rspamd-Queue-Id: 4B0Kw053scz4Ldk X-Spamd-Bar: +++++++++++ Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=pass (mx1.freebsd.org: domain of pawelbiernacki@gmail.com designates 209.85.218.65 as permitted sender) smtp.mailfrom=pawelbiernacki@gmail.com X-Spamd-Result: default: False [11.85 / 15.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; RWL_MAILSPIKE_GOOD(0.00)[209.85.218.65:from]; MV_CASE(0.50)[]; R_SPF_ALLOW(0.00)[+ip4:209.85.128.0/17]; TO_DN_NONE(0.00)[]; RCVD_COUNT_THREE(0.00)[3]; NEURAL_HAM_SHORT(-0.00)[-0.001]; FORGED_SENDER(0.30)[kaktus@FreeBSD.org,pawelbiernacki@gmail.com]; MIME_TRACE(0.00)[0:+]; R_DKIM_NA(0.00)[]; FREEMAIL_ENVFROM(0.00)[gmail.com]; FROM_NEQ_ENVFROM(0.00)[kaktus@FreeBSD.org,pawelbiernacki@gmail.com]; MID_RHS_MATCH_FROM(0.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US]; ARC_NA(0.00)[]; RECEIVED_SPAMHAUS_XBL(5.00)[31.172.188.241:received]; TAGGED_FROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[3]; TO_MATCH_ENVRCPT_ALL(0.00)[]; SH_AUTHBL_RECEIVED(4.00)[31.172.188.241:received]; MIME_GOOD(-0.10)[text/plain]; DMARC_NA(0.00)[FreeBSD.org]; NEURAL_SPAM_MEDIUM(1.05)[1.051]; BAD_REP_POLICIES(0.10)[]; NEURAL_SPAM_LONG(1.00)[1.004]; RCVD_IN_DNSWL_NONE(0.00)[209.85.218.65:from]; RCVD_TLS_ALL(0.00)[]; GREYLIST(0.00)[pass,body] X-Spam: Yes X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 20:25:53 -0000 Before:=20 = __sysctl("sysctl.name2oid",2,0x7fffff763a80,0x7fffff763280,0x7fffff763680,= 8) =3D 0 (0x0) __sysctl("sysctl.oidfmt.6.2",4,0x7fffff763ae0,0x7fffff762e78,0x0,0) =3D = 0 (0x0) __sysctl("sysctl.name.6.2",4,0x7fffff762180,0x7fffff761d00,0x0,0) =3D 0 = (0x0) __sysctl("sysctl.oidfmt.6.2",4,0x7fffff762980,0x7fffff761d08,0x0,0) =3D = 0 (0x0) __sysctl("sysctl.oiddescr.6.2",4,0x7fffff762580,0x7fffff761d00,0x0,0) =3D = 0 (0x0) After: __sysctl("sysctl.name2oid = hw.model",2,0x7fffff161e60,0x7fffff161660,0x7fffff161a60,8) =3D 0 (0x0) __sysctl("sysctl.oidfmt hw.model",4,0x7fffff161ec0,0x7fffff161258,0x0,0) = =3D 0 (0x0) __sysctl("sysctl.name { 6.2 }",4,0x7fffff160560,0x7fffff1600e0,0x0,0) =3D = 0 (0x0) __sysctl("sysctl.oidfmt hw.model",4,0x7fffff160d60,0x7fffff1600e8,0x0,0) = =3D 0 (0x0) __sysctl("sysctl.oiddescr = hw.model",4,0x7fffff160960,0x7fffff1600e0,0x0,0) =3D 0 (0x0) Reminded by: mjg > On 5 Jul 2020, at 21:53, Pawel Biernacki wrote: >=20 > Author: kaktus > Date: Sun Jul 5 19:53:54 2020 > New Revision: 362947 > URL: https://svnweb.freebsd.org/changeset/base/362947 >=20 > Log: > truss: print more information about traced sysctls >=20 > MFC after: 2 weeks > Sponsored by: Mysterious Code Ltd. >=20 > Modified: > head/usr.bin/truss/syscalls.c >=20 > Modified: head/usr.bin/truss/syscalls.c > = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D > --- head/usr.bin/truss/syscalls.c Sun Jul 5 19:38:36 2020 = (r362946) > +++ head/usr.bin/truss/syscalls.c Sun Jul 5 19:53:54 2020 = (r362947) > @@ -1577,14 +1577,37 @@ print_cmsgs(FILE *fp, pid_t pid, bool receive, = struct=20 > } >=20 > static void > -print_sysctl_oid(FILE *fp, int *oid, int len) > +print_sysctl_oid(FILE *fp, int *oid, size_t len) > { > - int i; > + size_t i; > + bool first; >=20 > - for (i =3D 0; i < len; i++) > - fprintf(fp, ".%d", oid[i]); > + first =3D true; > + fprintf(fp, "{ "); > + for (i =3D 0; i < len; i++) { > + fprintf(fp, "%s%d", first ? "" : ".", oid[i]); > + first =3D false; > + } > + fprintf(fp, " }"); > } >=20 > +static void > +print_sysctl(FILE *fp, int *oid, size_t len) > +{ > + char name[BUFSIZ]; > + int qoid[CTL_MAXNAME + 2]; > + size_t i; > + > + qoid[0] =3D CTL_SYSCTL; > + qoid[1] =3D CTL_SYSCTL_NAME; > + memcpy(qoid + 2, oid, len * sizeof(int)); > + i =3D sizeof(name); > + if (sysctl(qoid, len + 2, name, &i, 0, 0) =3D=3D -1) > + print_sysctl_oid(fp, oid, len); > + else > + fprintf(fp, "%s", name); > +} > + > /* > * Converts a syscall argument into a string. Said string is > * allocated via malloc(), so needs to be free()'d. sc is > @@ -2298,9 +2321,8 @@ print_arg(struct syscall_args *sc, unsigned long = *args > break; > case Sysctl: { > char name[BUFSIZ]; > - int oid[CTL_MAXNAME + 2], qoid[CTL_MAXNAME + 2]; > - size_t i; > - int len; > + int oid[CTL_MAXNAME + 2]; > + size_t len; >=20 > memset(name, 0, sizeof(name)); > len =3D args[sc->offset + 1]; > @@ -2314,39 +2336,35 @@ print_arg(struct syscall_args *sc, unsigned = long *args > fprintf(fp, "debug"); > break; > case CTL_SYSCTL_NAME: > - fprintf(fp, "name"); > + fprintf(fp, "name "); > print_sysctl_oid(fp, oid + 2, = len - 2); > break; > case CTL_SYSCTL_NEXT: > fprintf(fp, "next"); > break; > case CTL_SYSCTL_NAME2OID: > - fprintf(fp, "name2oid"); > + fprintf(fp, "name2oid %s", > + get_string(pid, > + args[sc->offset + 4], > + args[sc->offset + 5])); > break; > case CTL_SYSCTL_OIDFMT: > - fprintf(fp, "oidfmt"); > - print_sysctl_oid(fp, oid + 2, = len - 2); > + fprintf(fp, "oidfmt "); > + print_sysctl(fp, oid + 2, len - = 2); > break; > case CTL_SYSCTL_OIDDESCR: > - fprintf(fp, "oiddescr"); > - print_sysctl_oid(fp, oid + 2, = len - 2); > + fprintf(fp, "oiddescr "); > + print_sysctl(fp, oid + 2, len - = 2); > break; > case CTL_SYSCTL_OIDLABEL: > - fprintf(fp, "oidlabel"); > - print_sysctl_oid(fp, oid + 2, = len - 2); > + fprintf(fp, "oidlabel "); > + print_sysctl(fp, oid + 2, len - = 2); > break; > default: > - print_sysctl_oid(fp, oid + 1, = len - 1); > + print_sysctl(fp, oid + 1, len - = 1); > } > } else { > - qoid[0] =3D CTL_SYSCTL; > - qoid[1] =3D CTL_SYSCTL_NAME; > - memcpy(qoid + 2, oid, len * = sizeof(int)); > - i =3D sizeof(name); > - if (sysctl(qoid, len + 2, name, &i, 0, = 0) =3D=3D -1) > - print_sysctl_oid(fp, qoid + 2, = len); > - else > - fprintf(fp, "%s", name); > + print_sysctl(fp, oid, len); > } > fprintf(fp, "\""); > } From owner-svn-src-all@freebsd.org Sun Jul 5 20:54:02 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 80B3334D0B2; Sun, 5 Jul 2020 20:54:02 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0LXV2p1Bz4My7; Sun, 5 Jul 2020 20:54:02 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 433231364C; Sun, 5 Jul 2020 20:54:02 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 065Ks2tP054543; Sun, 5 Jul 2020 20:54:02 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 065Ks2nZ054542; Sun, 5 Jul 2020 20:54:02 GMT (envelope-from kib@FreeBSD.org) Message-Id: <202007052054.065Ks2nZ054542@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Sun, 5 Jul 2020 20:54:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362948 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: kib X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 362948 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 20:54:02 -0000 Author: kib Date: Sun Jul 5 20:54:01 2020 New Revision: 362948 URL: https://svnweb.freebsd.org/changeset/base/362948 Log: Fix typo. Sponsored by: The FreeBSD Foundation MFC after: 3 days Modified: head/sys/kern/vfs_vnops.c Modified: head/sys/kern/vfs_vnops.c ============================================================================== --- head/sys/kern/vfs_vnops.c Sun Jul 5 19:53:54 2020 (r362947) +++ head/sys/kern/vfs_vnops.c Sun Jul 5 20:54:01 2020 (r362948) @@ -1557,7 +1557,7 @@ vn_stat(struct vnode *vp, struct stat *sb, struct ucre * "a filesystem-specific preferred I/O block size for this * object. In some filesystem types, this may vary from file * to file" - * Use miminum/default of PAGE_SIZE (e.g. for VCHR). + * Use minimum/default of PAGE_SIZE (e.g. for VCHR). */ sb->st_blksize = max(PAGE_SIZE, vap->va_blocksize); From owner-svn-src-all@freebsd.org Sun Jul 5 21:55:17 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0268034EEC0; Sun, 5 Jul 2020 21:55:16 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0Mv85gZXz4Qx1; Sun, 5 Jul 2020 21:55:16 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A6EA313EF1; Sun, 5 Jul 2020 21:55:16 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 065LtGn3091274; Sun, 5 Jul 2020 21:55:16 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 065LtG6c091273; Sun, 5 Jul 2020 21:55:16 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202007052155.065LtG6c091273@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Sun, 5 Jul 2020 21:55:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362949 - head/sys/fs/nfs X-SVN-Group: head X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: head/sys/fs/nfs X-SVN-Commit-Revision: 362949 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 21:55:17 -0000 Author: rmacklem Date: Sun Jul 5 21:55:16 2020 New Revision: 362949 URL: https://svnweb.freebsd.org/changeset/base/362949 Log: Add support for ext_pgs mbufs to nfsm_strtom(). Also, add a new function nfsm_add_ext_pgs() which will either add a page or add a new ext_pgs mbuf with a page to the mbuf list. Used by nfsm_strtom(). This is another in the series of commits that add support to the NFS client and server for building RPC messages in ext_pgs mbufs with anonymous pages. This is useful so that the entire mbuf list does not need to be copied before calling sosend() when NFS over TLS is enabled. Since ND_EXTPG is never set yet, there is no semantic change at this time. Modified: head/sys/fs/nfs/nfs_commonsubs.c head/sys/fs/nfs/nfs_var.h Modified: head/sys/fs/nfs/nfs_commonsubs.c ============================================================================== --- head/sys/fs/nfs/nfs_commonsubs.c Sun Jul 5 20:54:01 2020 (r362948) +++ head/sys/fs/nfs/nfs_commonsubs.c Sun Jul 5 21:55:16 2020 (r362949) @@ -832,22 +832,38 @@ nfsm_strtom(struct nfsrv_descript *nd, const char *cp, bytesize = NFSX_UNSIGNED + siz + rem; m2 = nd->nd_mb; cp2 = nd->nd_bpos; - left = M_TRAILINGSPACE(m2); + if ((nd->nd_flag & ND_EXTPG) != 0) + left = nd->nd_bextpgsiz; + else + left = M_TRAILINGSPACE(m2); + KASSERT(((m2->m_flags & (M_EXT | M_EXTPG)) == + (M_EXT | M_EXTPG) && (nd->nd_flag & ND_EXTPG) != 0) || + ((m2->m_flags & (M_EXT | M_EXTPG)) != + (M_EXT | M_EXTPG) && (nd->nd_flag & ND_EXTPG) == 0), + ("nfsm_strtom: ext_pgs and non-ext_pgs mbufs mixed")); /* * Loop around copying the string to mbuf(s). */ while (siz > 0) { if (left == 0) { - if (siz > ncl_mbuf_mlen) - NFSMCLGET(m1, M_WAITOK); - else - NFSMGET(m1); - m1->m_len = 0; - m2->m_next = m1; - m2 = m1; - cp2 = mtod(m2, caddr_t); - left = M_TRAILINGSPACE(m2); + if ((nd->nd_flag & ND_EXTPG) != 0) { + m2 = nfsm_add_ext_pgs(m2, + nd->nd_maxextsiz, &nd->nd_bextpg); + cp2 = (char *)(void *)PHYS_TO_DMAP( + m2->m_epg_pa[nd->nd_bextpg]); + nd->nd_bextpgsiz = left = PAGE_SIZE; + } else { + if (siz > ncl_mbuf_mlen) + NFSMCLGET(m1, M_WAITOK); + else + NFSMGET(m1); + m1->m_len = 0; + cp2 = mtod(m1, char *); + left = M_TRAILINGSPACE(m1); + m2->m_next = m1; + m2 = m1; + } } if (left >= siz) xfer = siz; @@ -855,18 +871,31 @@ nfsm_strtom(struct nfsrv_descript *nd, const char *cp, xfer = left; NFSBCOPY(cp, cp2, xfer); cp += xfer; + cp2 += xfer; m2->m_len += xfer; siz -= xfer; left -= xfer; + if ((nd->nd_flag & ND_EXTPG) != 0) { + nd->nd_bextpgsiz -= xfer; + m2->m_epg_last_len += xfer; + } if (siz == 0 && rem) { if (left < rem) panic("nfsm_strtom"); - NFSBZERO(cp2 + xfer, rem); + NFSBZERO(cp2, rem); m2->m_len += rem; + cp2 += rem; + if ((nd->nd_flag & ND_EXTPG) != 0) { + nd->nd_bextpgsiz -= rem; + m2->m_epg_last_len += rem; + } } } nd->nd_mb = m2; - nd->nd_bpos = mtod(m2, caddr_t) + m2->m_len; + if ((nd->nd_flag & ND_EXTPG) != 0) + nd->nd_bpos = cp2; + else + nd->nd_bpos = mtod(m2, char *) + m2->m_len; return (bytesize); } @@ -4844,4 +4873,35 @@ nfsm_set(struct nfsrv_descript *nd, u_int offs) nd->nd_bextpgsiz = PAGE_SIZE; } else nd->nd_bpos = mtod(m, char *) + offs; +} + +/* + * Grow a ext_pgs mbuf list. Either allocate another page or add + * an mbuf to the list. + */ +struct mbuf * +nfsm_add_ext_pgs(struct mbuf *m, int maxextsiz, int *bextpg) +{ + struct mbuf *mp; + vm_page_t pg; + + if ((m->m_epg_npgs + 1) * PAGE_SIZE > maxextsiz) { + mp = mb_alloc_ext_plus_pages(PAGE_SIZE, M_WAITOK); + *bextpg = 0; + m->m_next = mp; + } else { + do { + pg = vm_page_alloc(NULL, 0, VM_ALLOC_NORMAL | + VM_ALLOC_NOOBJ | VM_ALLOC_NODUMP | + VM_ALLOC_WIRED); + if (pg == NULL) + vm_wait(NULL); + } while (pg == NULL); + m->m_epg_pa[m->m_epg_npgs] = VM_PAGE_TO_PHYS(pg); + *bextpg = m->m_epg_npgs; + m->m_epg_npgs++; + m->m_epg_last_len = 0; + mp = m; + } + return (mp); } Modified: head/sys/fs/nfs/nfs_var.h ============================================================================== --- head/sys/fs/nfs/nfs_var.h Sun Jul 5 20:54:01 2020 (r362948) +++ head/sys/fs/nfs/nfs_var.h Sun Jul 5 21:55:16 2020 (r362949) @@ -361,6 +361,7 @@ void nfsv4_freeslot(struct nfsclsession *, int); struct ucred *nfsrv_getgrpscred(struct ucred *); struct nfsdevice *nfsv4_findmirror(struct nfsmount *); void nfsm_set(struct nfsrv_descript *, u_int); +struct mbuf *nfsm_add_ext_pgs(struct mbuf *, int, int *); /* nfs_clcomsubs.c */ void nfsm_uiombuf(struct nfsrv_descript *, struct uio *, int); From owner-svn-src-all@freebsd.org Sun Jul 5 23:07:54 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E489034F968; Sun, 5 Jul 2020 23:07:54 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0PVy5T4Wz4TrW; Sun, 5 Jul 2020 23:07:54 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9A10814AE6; Sun, 5 Jul 2020 23:07:54 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 065N7sfi034513; Sun, 5 Jul 2020 23:07:54 GMT (envelope-from mjg@FreeBSD.org) Received: (from mjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 065N7sRn034512; Sun, 5 Jul 2020 23:07:54 GMT (envelope-from mjg@FreeBSD.org) Message-Id: <202007052307.065N7sRn034512@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mjg set sender to mjg@FreeBSD.org using -f From: Mateusz Guzik Date: Sun, 5 Jul 2020 23:07:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362950 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: mjg X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 362950 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jul 2020 23:07:55 -0000 Author: mjg Date: Sun Jul 5 23:07:54 2020 New Revision: 362950 URL: https://svnweb.freebsd.org/changeset/base/362950 Log: lockf: elide avoidable locking in lf_advlockasync While here assert on ls_threads state. Modified: head/sys/kern/kern_lockf.c Modified: head/sys/kern/kern_lockf.c ============================================================================== --- head/sys/kern/kern_lockf.c Sun Jul 5 21:55:16 2020 (r362949) +++ head/sys/kern/kern_lockf.c Sun Jul 5 23:07:54 2020 (r362950) @@ -637,6 +637,7 @@ retry_setlock: VI_UNLOCK(vp); } else { state = *statep; + MPASS(state->ls_threads >= 0); state->ls_threads++; VI_UNLOCK(vp); @@ -647,6 +648,7 @@ retry_setlock: free(ls, M_LOCKF); } } else { + MPASS(state->ls_threads >= 0); state->ls_threads++; VI_UNLOCK(vp); } @@ -657,8 +659,9 @@ retry_setlock: * locked. lf_purgelocks() requires that no new threads add * pending locks when vnode is marked by VIRF_DOOMED flag. */ - VI_LOCK(vp); if (VN_IS_DOOMED(vp)) { + VI_LOCK(vp); + MPASS(state->ls_threads > 0); state->ls_threads--; wakeup(state); VI_UNLOCK(vp); @@ -666,7 +669,6 @@ retry_setlock: lf_free_lock(lock); return (ENOENT); } - VI_UNLOCK(vp); switch (ap->a_op) { case F_SETLK: @@ -728,15 +730,11 @@ retry_setlock: sx_xunlock(&state->ls_lock); VI_LOCK(vp); - + MPASS(state->ls_threads > 0); state->ls_threads--; - if (LIST_EMPTY(&state->ls_active) && state->ls_threads == 0) { - KASSERT(LIST_EMPTY(&state->ls_pending), - ("freeable state with pending locks")); - } else { + if (state->ls_threads != 0) { wakeup(state); } - VI_UNLOCK(vp); if (error == EDOOFUS) { @@ -790,6 +788,7 @@ lf_purgelocks(struct vnode *vp, struct lockf **statep) VI_UNLOCK(vp); goto out_free; } + MPASS(state->ls_threads >= 0); state->ls_threads++; VI_UNLOCK(vp); @@ -1953,6 +1952,7 @@ lf_iteratelocks_vnode(struct vnode *vp, lf_iterator *f VI_UNLOCK(vp); return (0); } + MPASS(ls->ls_threads >= 0); ls->ls_threads++; VI_UNLOCK(vp); @@ -1976,6 +1976,7 @@ lf_iteratelocks_vnode(struct vnode *vp, lf_iterator *f } sx_xunlock(&ls->ls_lock); VI_LOCK(vp); + MPASS(ls->ls_threads > 0); ls->ls_threads--; wakeup(ls); VI_UNLOCK(vp); From owner-svn-src-all@freebsd.org Mon Jul 6 02:00:35 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id EB0DD3520E8; Mon, 6 Jul 2020 02:00:35 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0TLC5mCZz4Zft; Mon, 6 Jul 2020 02:00:35 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A8B2716D1E; Mon, 6 Jul 2020 02:00:35 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06620Z16037943; Mon, 6 Jul 2020 02:00:35 GMT (envelope-from mjg@FreeBSD.org) Received: (from mjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06620ZZu037942; Mon, 6 Jul 2020 02:00:35 GMT (envelope-from mjg@FreeBSD.org) Message-Id: <202007060200.06620ZZu037942@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mjg set sender to mjg@FreeBSD.org using -f From: Mateusz Guzik Date: Mon, 6 Jul 2020 02:00:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362951 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: mjg X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 362951 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 02:00:36 -0000 Author: mjg Date: Mon Jul 6 02:00:35 2020 New Revision: 362951 URL: https://svnweb.freebsd.org/changeset/base/362951 Log: vfs: expand on vhold_smr comment Modified: head/sys/kern/vfs_subr.c Modified: head/sys/kern/vfs_subr.c ============================================================================== --- head/sys/kern/vfs_subr.c Sun Jul 5 23:07:54 2020 (r362950) +++ head/sys/kern/vfs_subr.c Mon Jul 6 02:00:35 2020 (r362951) @@ -3441,10 +3441,23 @@ vholdnz(struct vnode *vp) } /* - * Grab a hold count as long as the vnode is not getting freed. + * Grab a hold count unless the vnode is freed. * * Only use this routine if vfs smr is the only protection you have against * freeing the vnode. + * + * The code loops trying to add a hold count as long as the VHOLD_NO_SMR flag + * is not set. After the flag is set the vnode becomes immutable to anyone but + * the thread which managed to set the flag. + * + * It may be tempting to replace the loop with: + * count = atomic_fetchadd_int(&vp->v_holdcnt, 1); + * if (count & VHOLD_NO_SMR) { + * backpedal and error out; + * } + * + * However, while this is more performant, it hinders debugging by eliminating + * the previously mentioned invariant. */ bool vhold_smr(struct vnode *vp) From owner-svn-src-all@freebsd.org Mon Jul 6 06:28:20 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id CC2EE35B57E; Mon, 6 Jul 2020 06:28:20 +0000 (UTC) (envelope-from gbe@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [IPv6:2610:1c1:1:606c::24b:4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0bH852Dtz4p8g; Mon, 6 Jul 2020 06:28:20 +0000 (UTC) (envelope-from gbe@freebsd.org) Received: from localhost (p548612f6.dip0.t-ipconnect.de [84.134.18.246]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) (Authenticated sender: gbe) by smtp.freebsd.org (Postfix) with ESMTPSA id 4CFFD1F367; Mon, 6 Jul 2020 06:28:20 +0000 (UTC) (envelope-from gbe@freebsd.org) Date: Mon, 6 Jul 2020 08:28:19 +0200 From: Gordon Bergling To: rgrimes@freebsd.org Cc: Alexey Dokuchaev , Warner Losh , src-committers , svn-src-all , svn-src-head Subject: Re: svn commit: r362809 - head/contrib/mandoc Message-ID: <20200706062819.GA88664@lion.0xfce3.net> References: <20200705074014.GA16505@lion.0xfce3.net> <202007051722.065HMwE1074449@gndrsh.dnsmgr.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <202007051722.065HMwE1074449@gndrsh.dnsmgr.net> X-Url: X-Operating-System: FreeBSD 12.1-STABLE amd64 X-Host-Uptime: 8:26AM up 2 days, 21:14, 6 users, load averages: 5.05, 4.99, 4.93 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 06:28:20 -0000 On Sun, Jul 05, 2020 at 10:22:58AM -0700, Rodney W. Grimes wrote: > > On Thu, Jul 02, 2020 at 12:06:13AM +0000, Alexey Dokuchaev wrote: > > > On Wed, Jul 01, 2020 at 05:01:00PM -0700, Rodney W. Grimes wrote: > > > > Thats good, but realize the page already contains history that > > > > reads like: > > > > > > > > HISTORY > > > > Part of the functionality of whatis was already provided by the former > > > > manwhere utility in 1BSD. The apropos and whatis utilities first ap- > > > > peared in 2BSD. They were rewritten from scratch for OpenBSD 5.6. > > > > > > > > The -M option and the MANPATH variable first appeared in 4.3BSD; -m in > > > > 4.3BSD-Reno; -C in 4.4BSD Lite1; and -S and -s in OpenBSD 4.5 for apropos > > > > and in OpenBSD 5.6 for whatis. The options -acfhIKklOTWw appeared in > > > > OpenBSD 5.7. > > > > > > > > And further contains: > > > > > > > > AUTHORS > > > > Bill Joy wrote manwhere in 1977 and the original BSD apropos and whatis > > > > in February 1979. The current version was written by Kristaps Dzonsons > > > > and Ingo Schwarze . > > > > > > > > So the history is rich and complete, do we really need to say when we > > > > incorporated this into FreeBSD from OpenBSD's mandoc in the manual page? > > > > > > Ah, in this case, the only thing lacking from the current version is mention > > > of FreeBSD 11.1. Sorry for not checking with that before writing my reply. > > > My main point, however, was that reverse chronological order looks strange. > > > > I have created the following differential and integrated the given feedback. > > > > https://reviews.freebsd.org/D25566 > > > > If necessary I could revert r362809, but somebody should explicit request it. > > Consider it so requested. Consider it done. --Gordon > -- > Rod Grimes rgrimes@freebsd.org > _______________________________________________ > svn-src-head@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/svn-src-head > To unsubscribe, send any mail to "svn-src-head-unsubscribe@freebsd.org" -- From owner-svn-src-all@freebsd.org Mon Jul 6 08:36:15 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B4BEE35FB5D; Mon, 6 Jul 2020 08:36:15 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0f6l4Jhhz3T8Q; Mon, 6 Jul 2020 08:36:15 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 726261B6C2; Mon, 6 Jul 2020 08:36:15 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0668aF3A090890; Mon, 6 Jul 2020 08:36:15 GMT (envelope-from grehan@FreeBSD.org) Received: (from grehan@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0668aFZo090889; Mon, 6 Jul 2020 08:36:15 GMT (envelope-from grehan@FreeBSD.org) Message-Id: <202007060836.0668aFZo090889@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: grehan set sender to grehan@FreeBSD.org using -f From: Peter Grehan Date: Mon, 6 Jul 2020 08:36:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362952 - head/usr.sbin/bhyve X-SVN-Group: head X-SVN-Commit-Author: grehan X-SVN-Commit-Paths: head/usr.sbin/bhyve X-SVN-Commit-Revision: 362952 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 08:36:15 -0000 Author: grehan Date: Mon Jul 6 08:36:14 2020 New Revision: 362952 URL: https://svnweb.freebsd.org/changeset/base/362952 Log: Silence ACPI RTC error/warning in Linux guests. Allow guests to set the RTC bit in the ACPI PM control register. This eliminates an annoying (and harmless) Linux kernel boot message. PR: 244721 Submitted by: Jose Luis Duran MFC after: 1 week Modified: head/usr.sbin/bhyve/pm.c Modified: head/usr.sbin/bhyve/pm.c ============================================================================== --- head/usr.sbin/bhyve/pm.c Mon Jul 6 02:00:35 2020 (r362951) +++ head/usr.sbin/bhyve/pm.c Mon Jul 6 08:36:14 2020 (r362952) @@ -198,7 +198,7 @@ pm1_enable_handler(struct vmctx *ctx, int vcpu, int in * the global lock, but ACPI-CA whines profusely if it * can't set GBL_EN. */ - pm1_enable = *eax & (PM1_PWRBTN_EN | PM1_GBL_EN); + pm1_enable = *eax & (PM1_RTC_EN | PM1_PWRBTN_EN | PM1_GBL_EN); sci_update(ctx); } pthread_mutex_unlock(&pm_lock); From owner-svn-src-all@freebsd.org Mon Jul 6 08:50:16 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 274BD360361; Mon, 6 Jul 2020 08:50:16 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0fQw0DsGz3Twh; Mon, 6 Jul 2020 08:50:16 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C6FE51BAAC; Mon, 6 Jul 2020 08:50:15 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0668oFa8098032; Mon, 6 Jul 2020 08:50:15 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0668oB1o098012; Mon, 6 Jul 2020 08:50:11 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202007060850.0668oB1o098012@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 6 Jul 2020 08:50:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362953 - in head/sys: dev/mlx4/mlx4_core dev/mlx4/mlx4_en dev/mlx4/mlx4_ib dev/mlx5/mlx5_core dev/mlx5/mlx5_en dev/mlx5/mlx5_fpga_tools dev/mlx5/mlx5_ib dev/mthca ofed/drivers/infiniba... X-SVN-Group: head X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: in head/sys: dev/mlx4/mlx4_core dev/mlx4/mlx4_en dev/mlx4/mlx4_ib dev/mlx5/mlx5_core dev/mlx5/mlx5_en dev/mlx5/mlx5_fpga_tools dev/mlx5/mlx5_ib dev/mthca ofed/drivers/infiniband/core ofed/drivers/infi... X-SVN-Commit-Revision: 362953 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 08:50:16 -0000 Author: hselasky Date: Mon Jul 6 08:50:11 2020 New Revision: 362953 URL: https://svnweb.freebsd.org/changeset/base/362953 Log: Infiniband clients must be attached and detached in a specific order in ibcore. Currently the linking order of the infiniband, IB, modules decide in which order the clients are attached and detached. For example one IB client may use resources from another IB client. This can lead to a potential deadlock at shutdown. For example if the ipoib is unregistered after the ib_multicast client is detached, then if ipoib is using multicast addresses a deadlock may happen, because ib_multicast will wait for all its resources to be freed before returning from the remove method. Fix this by using module_xxx_order() instead of module_xxx(). Differential Revision: https://reviews.freebsd.org/D23973 MFC after: 1 week Sponsored by: Mellanox Technologies Modified: head/sys/dev/mlx4/mlx4_core/mlx4_main.c head/sys/dev/mlx4/mlx4_en/mlx4_en_main.c head/sys/dev/mlx4/mlx4_ib/mlx4_ib_main.c head/sys/dev/mlx5/mlx5_core/mlx5_main.c head/sys/dev/mlx5/mlx5_en/mlx5_en_main.c head/sys/dev/mlx5/mlx5_fpga_tools/mlx5fpga_tools_main.c head/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c head/sys/dev/mthca/mthca_main.c head/sys/ofed/drivers/infiniband/core/ib_cm.c head/sys/ofed/drivers/infiniband/core/ib_cma.c head/sys/ofed/drivers/infiniband/core/ib_device.c head/sys/ofed/drivers/infiniband/core/ib_iwcm.c head/sys/ofed/drivers/infiniband/core/ib_ucm.c head/sys/ofed/drivers/infiniband/core/ib_ucma.c head/sys/ofed/drivers/infiniband/core/ib_user_mad.c head/sys/ofed/drivers/infiniband/core/ib_uverbs_main.c head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c head/sys/ofed/drivers/infiniband/util/madeye.c Modified: head/sys/dev/mlx4/mlx4_core/mlx4_main.c ============================================================================== --- head/sys/dev/mlx4/mlx4_core/mlx4_main.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/dev/mlx4/mlx4_core/mlx4_main.c Mon Jul 6 08:50:11 2020 (r362953) @@ -4218,8 +4218,8 @@ static void __exit mlx4_cleanup(void) destroy_workqueue(mlx4_wq); } -module_init(mlx4_init); -module_exit(mlx4_cleanup); +module_init_order(mlx4_init, SI_ORDER_FIRST); +module_exit_order(mlx4_cleanup, SI_ORDER_FIRST); static int mlx4_evhand(module_t mod, int event, void *arg) Modified: head/sys/dev/mlx4/mlx4_en/mlx4_en_main.c ============================================================================== --- head/sys/dev/mlx4/mlx4_en/mlx4_en_main.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/dev/mlx4/mlx4_en/mlx4_en_main.c Mon Jul 6 08:50:11 2020 (r362953) @@ -304,8 +304,8 @@ static void __exit mlx4_en_cleanup(void) mlx4_unregister_interface(&mlx4_en_interface); } -module_init(mlx4_en_init); -module_exit(mlx4_en_cleanup); +module_init_order(mlx4_en_init, SI_ORDER_SIXTH); +module_exit_order(mlx4_en_cleanup, SI_ORDER_SIXTH); static int mlx4en_evhand(module_t mod, int event, void *arg) Modified: head/sys/dev/mlx4/mlx4_ib/mlx4_ib_main.c ============================================================================== --- head/sys/dev/mlx4/mlx4_ib/mlx4_ib_main.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/dev/mlx4/mlx4_ib/mlx4_ib_main.c Mon Jul 6 08:50:11 2020 (r362953) @@ -3319,8 +3319,8 @@ static void __exit mlx4_ib_cleanup(void) destroy_workqueue(wq); } -module_init_order(mlx4_ib_init, SI_ORDER_THIRD); -module_exit(mlx4_ib_cleanup); +module_init_order(mlx4_ib_init, SI_ORDER_SEVENTH); +module_exit_order(mlx4_ib_cleanup, SI_ORDER_SEVENTH); static int mlx4ib_evhand(module_t mod, int event, void *arg) Modified: head/sys/dev/mlx5/mlx5_core/mlx5_main.c ============================================================================== --- head/sys/dev/mlx5/mlx5_core/mlx5_main.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/dev/mlx5/mlx5_core/mlx5_main.c Mon Jul 6 08:50:11 2020 (r362953) @@ -2026,5 +2026,5 @@ static void __exit cleanup(void) pci_unregister_driver(&mlx5_core_driver); } -module_init(init); -module_exit(cleanup); +module_init_order(init, SI_ORDER_FIRST); +module_exit_order(cleanup, SI_ORDER_FIRST); Modified: head/sys/dev/mlx5/mlx5_en/mlx5_en_main.c ============================================================================== --- head/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Jul 6 08:50:11 2020 (r362953) @@ -4723,8 +4723,8 @@ mlx5e_show_version(void __unused *arg) } SYSINIT(mlx5e_show_version, SI_SUB_DRIVERS, SI_ORDER_ANY, mlx5e_show_version, NULL); -module_init_order(mlx5e_init, SI_ORDER_THIRD); -module_exit_order(mlx5e_cleanup, SI_ORDER_THIRD); +module_init_order(mlx5e_init, SI_ORDER_SIXTH); +module_exit_order(mlx5e_cleanup, SI_ORDER_SIXTH); #if (__FreeBSD_version >= 1100000) MODULE_DEPEND(mlx5en, linuxkpi, 1, 1, 1); Modified: head/sys/dev/mlx5/mlx5_fpga_tools/mlx5fpga_tools_main.c ============================================================================== --- head/sys/dev/mlx5/mlx5_fpga_tools/mlx5fpga_tools_main.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/dev/mlx5/mlx5_fpga_tools/mlx5fpga_tools_main.c Mon Jul 6 08:50:11 2020 (r362953) @@ -139,5 +139,5 @@ static void __exit mlx5_fpga_tools_exit(void) mlx5_fpga_tools_char_deinit(); } -module_init(mlx5_fpga_tools_init); -module_exit(mlx5_fpga_tools_exit); +module_init_order(mlx5_fpga_tools_init, SI_ORDER_SECOND); +module_exit_order(mlx5_fpga_tools_exit, SI_ORDER_SECOND); Modified: head/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c ============================================================================== --- head/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c Mon Jul 6 08:50:11 2020 (r362953) @@ -3399,5 +3399,5 @@ mlx5_ib_show_version(void __unused *arg) } SYSINIT(mlx5_ib_show_version, SI_SUB_DRIVERS, SI_ORDER_ANY, mlx5_ib_show_version, NULL); -module_init_order(mlx5_ib_init, SI_ORDER_THIRD); -module_exit_order(mlx5_ib_cleanup, SI_ORDER_THIRD); +module_init_order(mlx5_ib_init, SI_ORDER_SEVENTH); +module_exit_order(mlx5_ib_cleanup, SI_ORDER_SEVENTH); Modified: head/sys/dev/mthca/mthca_main.c ============================================================================== --- head/sys/dev/mthca/mthca_main.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/dev/mthca/mthca_main.c Mon Jul 6 08:50:11 2020 (r362953) @@ -1271,8 +1271,8 @@ static void __exit mthca_cleanup(void) mthca_catas_cleanup(); } -module_init_order(mthca_init, SI_ORDER_THIRD); -module_exit(mthca_cleanup); +module_init_order(mthca_init, SI_ORDER_SEVENTH); +module_exit_order(mthca_cleanup, SI_ORDER_SEVENTH); MODULE_VERSION(mthca, 1); MODULE_DEPEND(mthca, ibcore, 1, 1, 1); Modified: head/sys/ofed/drivers/infiniband/core/ib_cm.c ============================================================================== --- head/sys/ofed/drivers/infiniband/core/ib_cm.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/ofed/drivers/infiniband/core/ib_cm.c Mon Jul 6 08:50:11 2020 (r362953) @@ -4180,5 +4180,5 @@ static void __exit ib_cm_cleanup(void) } module_init_order(ib_cm_init, SI_ORDER_SECOND); -module_exit_order(ib_cm_cleanup, SI_ORDER_FIRST); +module_exit_order(ib_cm_cleanup, SI_ORDER_SECOND); Modified: head/sys/ofed/drivers/infiniband/core/ib_cma.c ============================================================================== --- head/sys/ofed/drivers/infiniband/core/ib_cma.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/ofed/drivers/infiniband/core/ib_cma.c Mon Jul 6 08:50:11 2020 (r362953) @@ -4619,5 +4619,5 @@ static void __exit cma_cleanup(void) destroy_workqueue(cma_wq); } -module_init(cma_init); -module_exit(cma_cleanup); +module_init_order(cma_init, SI_ORDER_FOURTH); +module_exit_order(cma_cleanup, SI_ORDER_FOURTH); Modified: head/sys/ofed/drivers/infiniband/core/ib_device.c ============================================================================== --- head/sys/ofed/drivers/infiniband/core/ib_device.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/ofed/drivers/infiniband/core/ib_device.c Mon Jul 6 08:50:11 2020 (r362953) @@ -1060,8 +1060,25 @@ static void __exit ib_core_cleanup(void) destroy_workqueue(ib_wq); } -module_init(ib_core_init); -module_exit(ib_core_cleanup); +/* + * Typical loading and unloading order values and their use: + * + * SI_ORDER_FIRST (default for module_init): + * Core modules (PCI, infiniband) + * SI_ORDER_SECOND (default for module_exit): + * Infiniband core modules (CM) + * SI_ORDER_THIRD: + * SI_ORDER_FOURTH: + * Infiniband core modules (CMA) + * SI_ORDER_FIFTH: + * Infiniband user-space modules (UCM,UCMA,UMAD,UVERBS,IPOIB) + * SI_ORDER_SIXTH: + * Network HW driver modules + * SI_ORDER_SEVENTH: + * Infiniband HW driver modules + */ +module_init_order(ib_core_init, SI_ORDER_FIRST); +module_exit_order(ib_core_cleanup, SI_ORDER_FIRST); MODULE_VERSION(ibcore, 1); MODULE_DEPEND(ibcore, linuxkpi, 1, 1, 1); Modified: head/sys/ofed/drivers/infiniband/core/ib_iwcm.c ============================================================================== --- head/sys/ofed/drivers/infiniband/core/ib_iwcm.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/ofed/drivers/infiniband/core/ib_iwcm.c Mon Jul 6 08:50:11 2020 (r362953) @@ -1052,5 +1052,5 @@ static void __exit iw_cm_cleanup(void) destroy_workqueue(iwcm_wq); } -module_init(iw_cm_init); -module_exit(iw_cm_cleanup); +module_init_order(iw_cm_init, SI_ORDER_FIRST); +module_exit_order(iw_cm_cleanup, SI_ORDER_FIRST); Modified: head/sys/ofed/drivers/infiniband/core/ib_ucm.c ============================================================================== --- head/sys/ofed/drivers/infiniband/core/ib_ucm.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/ofed/drivers/infiniband/core/ib_ucm.c Mon Jul 6 08:50:11 2020 (r362953) @@ -1371,5 +1371,5 @@ static void __exit ib_ucm_cleanup(void) idr_destroy(&ctx_id_table); } -module_init_order(ib_ucm_init, SI_ORDER_THIRD); -module_exit(ib_ucm_cleanup); +module_init_order(ib_ucm_init, SI_ORDER_FIFTH); +module_exit_order(ib_ucm_cleanup, SI_ORDER_FIFTH); Modified: head/sys/ofed/drivers/infiniband/core/ib_ucma.c ============================================================================== --- head/sys/ofed/drivers/infiniband/core/ib_ucma.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/ofed/drivers/infiniband/core/ib_ucma.c Mon Jul 6 08:50:11 2020 (r362953) @@ -1782,5 +1782,5 @@ static void __exit ucma_cleanup(void) idr_destroy(&multicast_idr); } -module_init(ucma_init); -module_exit(ucma_cleanup); +module_init_order(ucma_init, SI_ORDER_FIFTH); +module_exit_order(ucma_cleanup, SI_ORDER_FIFTH); Modified: head/sys/ofed/drivers/infiniband/core/ib_user_mad.c ============================================================================== --- head/sys/ofed/drivers/infiniband/core/ib_user_mad.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/ofed/drivers/infiniband/core/ib_user_mad.c Mon Jul 6 08:50:11 2020 (r362953) @@ -1405,5 +1405,5 @@ static void __exit ib_umad_cleanup(void) unregister_chrdev_region(overflow_maj, IB_UMAD_MAX_PORTS * 2); } -module_init_order(ib_umad_init, SI_ORDER_THIRD); -module_exit(ib_umad_cleanup); +module_init_order(ib_umad_init, SI_ORDER_FIFTH); +module_exit_order(ib_umad_cleanup, SI_ORDER_FIFTH); Modified: head/sys/ofed/drivers/infiniband/core/ib_uverbs_main.c ============================================================================== --- head/sys/ofed/drivers/infiniband/core/ib_uverbs_main.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/ofed/drivers/infiniband/core/ib_uverbs_main.c Mon Jul 6 08:50:11 2020 (r362953) @@ -1431,5 +1431,5 @@ static void __exit ib_uverbs_cleanup(void) idr_destroy(&ib_uverbs_srq_idr); } -module_init_order(ib_uverbs_init, SI_ORDER_THIRD); -module_exit(ib_uverbs_cleanup); +module_init_order(ib_uverbs_init, SI_ORDER_FIFTH); +module_exit_order(ib_uverbs_cleanup, SI_ORDER_FIFTH); Modified: head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c ============================================================================== --- head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c Mon Jul 6 08:50:11 2020 (r362953) @@ -1753,8 +1753,8 @@ ipoib_resolvemulti(struct ifnet *ifp, struct sockaddr } } -module_init(ipoib_init_module); -module_exit(ipoib_cleanup_module); +module_init_order(ipoib_init_module, SI_ORDER_FIFTH); +module_exit_order(ipoib_cleanup_module, SI_ORDER_FIFTH); static int ipoib_evhand(module_t mod, int event, void *arg) Modified: head/sys/ofed/drivers/infiniband/util/madeye.c ============================================================================== --- head/sys/ofed/drivers/infiniband/util/madeye.c Mon Jul 6 08:36:14 2020 (r362952) +++ head/sys/ofed/drivers/infiniband/util/madeye.c Mon Jul 6 08:50:11 2020 (r362953) @@ -594,5 +594,5 @@ static void __exit ib_madeye_cleanup(void) ib_unregister_client(&madeye_client); } -module_init(ib_madeye_init); -module_exit(ib_madeye_cleanup); +module_init_order(ib_madeye_init, SI_ORDER_THIRD); +module_exit_order(ib_madeye_cleanup, SI_ORDER_THIRD); From owner-svn-src-all@freebsd.org Mon Jul 6 08:51:57 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2E216360543; Mon, 6 Jul 2020 08:51:57 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0fSs0cPWz3VFP; Mon, 6 Jul 2020 08:51:57 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E48721BC7A; Mon, 6 Jul 2020 08:51:56 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0668pu9C003652; Mon, 6 Jul 2020 08:51:56 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0668puow003646; Mon, 6 Jul 2020 08:51:56 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <202007060851.0668puow003646@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Mon, 6 Jul 2020 08:51:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362954 - in head/sys: arm/broadcom/bcm2835 conf dev/pci X-SVN-Group: head X-SVN-Commit-Author: andrew X-SVN-Commit-Paths: in head/sys: arm/broadcom/bcm2835 conf dev/pci X-SVN-Commit-Revision: 362954 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 08:51:57 -0000 Author: andrew Date: Mon Jul 6 08:51:55 2020 New Revision: 362954 URL: https://svnweb.freebsd.org/changeset/base/362954 Log: Add a driver for bcm2838 PCI express controller This adds support for the Broadcom bcm2711 PCI express controller, found on the Raspberry Pi 4 (aka the bcm2838 SoC). The driver has only been developed against the soldered-on VIA XHCI controller and not tested with other end points. Submitted by: Robert Crowston Differential Revision: https://reviews.freebsd.org/D25068 Added: head/sys/arm/broadcom/bcm2835/bcm2838_pci.c (contents, props changed) Modified: head/sys/arm/broadcom/bcm2835/files.bcm283x head/sys/conf/files.arm64 head/sys/dev/pci/pci_host_generic_fdt.c head/sys/dev/pci/pci_host_generic_fdt.h Added: head/sys/arm/broadcom/bcm2835/bcm2838_pci.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/broadcom/bcm2835/bcm2838_pci.c Mon Jul 6 08:51:55 2020 (r362954) @@ -0,0 +1,743 @@ +/*- + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2020 Dr Robert Harvey Crowston + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * + * $FreeBSD$ + * + */ + +/* + * BCM2838-compatible PCI-express controller. + * + * Broadcom likes to give the same chip lots of different names. The name of + * this driver is taken from the Raspberry Pi 4 Broadcom 2838 chip. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include "pcib_if.h" +#include "msi_if.h" + +extern struct bus_space memmap_bus; + +#define BUS_SPACE_3G_MAXADDR 0xc0000000 +#define PCI_ID_VAL3 0x43c +#define CLASS_SHIFT 0x10 +#define SUBCLASS_SHIFT 0x8 + +#define REG_CONTROLLER_HW_REV 0x406c +#define REG_BRIDGE_CTRL 0x9210 +#define BRIDGE_DISABLE_FLAG 0x1 +#define BRIDGE_RESET_FLAG 0x2 +#define REG_BRIDGE_SERDES_MODE 0x4204 +#define REG_BRIDGE_CONFIG 0x4008 +#define REG_BRIDGE_MEM_WINDOW_LOW 0x4034 +#define REG_BRIDGE_MEM_WINDOW_HIGH 0x4038 +#define REG_BRIDGE_MEM_WINDOW_1 0x403c +#define REG_BRIDGE_GISB_WINDOW 0x402c +#define REG_BRIDGE_STATE 0x4068 +#define REG_BRIDGE_LINK_STATE 0x00bc +#define REG_BRIDGE_BUS_WINDOW_LOW 0x400c +#define REG_BRIDGE_BUS_WINDOW_HIGH 0x4010 +#define REG_BRIDGE_CPU_WINDOW_LOW 0x4070 +#define REG_BRIDGE_CPU_WINDOW_START_HIGH 0x4080 +#define REG_BRIDGE_CPU_WINDOW_END_HIGH 0x4084 + +#define REG_MSI_ADDR_LOW 0x4044 +#define REG_MSI_ADDR_HIGH 0x4048 +#define REG_MSI_CONFIG 0x404c +#define REG_MSI_CLR 0x4508 +#define REG_MSI_MASK_CLR 0x4514 +#define REG_MSI_RAISED 0x4500 +#define REG_MSI_EOI 0x4060 +#define NUM_MSI 32 + +#define REG_EP_CONFIG_CHOICE 0x9000 +#define REG_EP_CONFIG_DATA 0x8000 + +/* + * These values were obtained from runtime inspection of a Linux system using a + * JTAG. The very limited documentation I have obtained from Broadcom does not + * explain how to compute them. + */ +#define REG_VALUE_4GB_WINDOW 0x11 +#define REG_VALUE_4GB_CONFIG 0x88003000 +#define REG_VALUE_MSI_CONFIG 0xffe06540 + +struct bcm_pcib_irqsrc { + struct intr_irqsrc isrc; + u_int irq; + bool allocated; +}; + +struct bcm_pcib_softc { + struct generic_pcie_fdt_softc base; + device_t dev; + struct mtx config_mtx; + struct mtx msi_mtx; + struct resource *msi_irq_res; + void *msi_intr_cookie; + struct bcm_pcib_irqsrc *msi_isrcs; + pci_addr_t msi_addr; +}; + +static struct ofw_compat_data compat_data[] = { + {"brcm,bcm2711-pcie", 1}, + {"brcm,bcm7211-pcie", 1}, + {"brcm,bcm7445-pcie", 1}, + + {NULL, 0} +}; + +static int +bcm_pcib_probe(device_t dev) +{ + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (!ofw_bus_search_compatible(dev, compat_data)->ocd_data) + return (ENXIO); + + device_set_desc(dev, + "BCM2838-compatible PCI-express controller"); + return (BUS_PROBE_DEFAULT); +} + +static void +bcm_pcib_set_reg(struct bcm_pcib_softc *sc, uint32_t reg, uint32_t val) +{ + + bus_space_write_4(sc->base.base.bst, sc->base.base.bsh, reg, + htole32(val)); +} + +static uint32_t +bcm_pcib_read_reg(struct bcm_pcib_softc *sc, uint32_t reg) +{ + + return (le32toh(bus_space_read_4(sc->base.base.bst, sc->base.base.bsh, + reg))); +} + +static void +bcm_pcib_reset_controller(struct bcm_pcib_softc *sc) +{ + uint32_t val; + + val = bcm_pcib_read_reg(sc, REG_BRIDGE_CTRL); + val = val | BRIDGE_RESET_FLAG | BRIDGE_DISABLE_FLAG; + bcm_pcib_set_reg(sc, REG_BRIDGE_CTRL, val); + + DELAY(100); + + val = bcm_pcib_read_reg(sc, REG_BRIDGE_CTRL); + val = val & ~BRIDGE_RESET_FLAG; + bcm_pcib_set_reg(sc, REG_BRIDGE_CTRL, val); + + DELAY(100); + + bcm_pcib_set_reg(sc, REG_BRIDGE_SERDES_MODE, 0); + + DELAY(100); +} + +static void +bcm_pcib_enable_controller(struct bcm_pcib_softc *sc) +{ + uint32_t val; + + val = bcm_pcib_read_reg(sc, REG_BRIDGE_CTRL); + val = val & ~BRIDGE_DISABLE_FLAG; + bcm_pcib_set_reg(sc, REG_BRIDGE_CTRL, val); + + DELAY(100); +} + +static int +bcm_pcib_check_ranges(device_t dev) +{ + struct bcm_pcib_softc *sc; + struct pcie_range *ranges; + int error = 0, i; + + sc = device_get_softc(dev); + ranges = &sc->base.base.ranges[0]; + + /* The first range needs to be non-zero. */ + if (ranges[0].size == 0) { + device_printf(dev, "error: first outbound memory range " + "(pci addr: 0x%jx, cpu addr: 0x%jx) has zero size.\n", + ranges[0].pci_base, ranges[0].phys_base); + error = ENXIO; + } + + /* + * The controller can actually handle three distinct ranges, but we + * only implement support for one. + */ + for (i = 1; (bootverbose || error) && i < MAX_RANGES_TUPLES; ++i) { + if (ranges[i].size > 0) + device_printf(dev, + "note: outbound memory range %d (pci addr: 0x%jx, " + "cpu addr: 0x%jx, size: 0x%jx) will be ignored.\n", + i, ranges[i].pci_base, ranges[i].phys_base, + ranges[i].size); + } + + return (error); +} + +static const char * +bcm_pcib_link_state_string(uint32_t mode) +{ + + switch(mode & PCIEM_LINK_STA_SPEED) { + case 0: + return ("not up"); + case 1: + return ("2.5 GT/s"); + case 2: + return ("5.0 GT/s"); + case 4: + return ("8.0 GT/s"); + default: + return ("unknown"); + } +} + +static bus_addr_t +bcm_get_offset_and_prepare_config(struct bcm_pcib_softc *sc, u_int bus, + u_int slot, u_int func, u_int reg) +{ + /* + * Config for an end point is only available through a narrow window for + * one end point at a time. We first tell the controller which end point + * we want, then access it through the window. + */ + uint32_t func_index; + + if (bus == 0 && slot == 0 && func == 0) + /* + * Special case for root device; its config is always available + * through the zero-offset. + */ + return (reg); + + /* Tell the controller to show us the config in question. */ + func_index = PCIE_ADDR_OFFSET(bus, slot, func, 0); + bcm_pcib_set_reg(sc, REG_EP_CONFIG_CHOICE, func_index); + + return (REG_EP_CONFIG_DATA + reg); +} + +static bool +bcm_pcib_is_valid_quad(struct bcm_pcib_softc *sc, u_int bus, u_int slot, + u_int func, u_int reg) +{ + + if ((bus < sc->base.base.bus_start) || (bus > sc->base.base.bus_end)) + return (false); + if ((slot > PCI_SLOTMAX) || (func > PCI_FUNCMAX) || (reg > PCIE_REGMAX)) + return (false); + + if (bus == 0 && slot == 0 && func == 0) + return (true); + if (bus == 0) + /* + * Probing other slots and funcs on bus 0 will lock up the + * memory controller. + */ + return (false); + + return (true); +} + +static uint32_t +bcm_pcib_read_config(device_t dev, u_int bus, u_int slot, u_int func, u_int reg, + int bytes) +{ + struct bcm_pcib_softc *sc; + bus_space_handle_t h; + bus_space_tag_t t; + bus_addr_t offset; + uint32_t data; + + sc = device_get_softc(dev); + if (!bcm_pcib_is_valid_quad(sc, bus, slot, func, reg)) + return (~0U); + + mtx_lock(&sc->config_mtx); + offset = bcm_get_offset_and_prepare_config(sc, bus, slot, func, reg); + + t = sc->base.base.bst; + h = sc->base.base.bsh; + + switch (bytes) { + case 1: + data = bus_space_read_1(t, h, offset); + break; + case 2: + data = le16toh(bus_space_read_2(t, h, offset)); + break; + case 4: + data = le32toh(bus_space_read_4(t, h, offset)); + break; + default: + data = ~0U; + break; + } + + mtx_unlock(&sc->config_mtx); + return (data); +} + +static void +bcm_pcib_write_config(device_t dev, u_int bus, u_int slot, + u_int func, u_int reg, uint32_t val, int bytes) +{ + struct bcm_pcib_softc *sc; + bus_space_handle_t h; + bus_space_tag_t t; + uint32_t offset; + + sc = device_get_softc(dev); + if (!bcm_pcib_is_valid_quad(sc, bus, slot, func, reg)) + return; + + mtx_lock(&sc->config_mtx); + offset = bcm_get_offset_and_prepare_config(sc, bus, slot, func, reg); + + t = sc->base.base.bst; + h = sc->base.base.bsh; + + switch (bytes) { + case 1: + bus_space_write_1(t, h, offset, val); + break; + case 2: + bus_space_write_2(t, h, offset, htole16(val)); + break; + case 4: + bus_space_write_4(t, h, offset, htole32(val)); + break; + default: + break; + } + + mtx_unlock(&sc->config_mtx); +} + +static void +bcm_pcib_msi_intr_process(struct bcm_pcib_softc *sc, uint32_t interrupt_bitmap, + struct trapframe *tf) +{ + struct bcm_pcib_irqsrc *irqsrc; + uint32_t bit, irq; + + while ((bit = ffs(interrupt_bitmap))) { + irq = bit - 1; + + /* Acknowledge interrupt. */ + bcm_pcib_set_reg(sc, REG_MSI_CLR, 1 << irq); + + /* Send EOI. */ + bcm_pcib_set_reg(sc, REG_MSI_EOI, 1); + + /* Despatch to handler. */ + irqsrc = &sc->msi_isrcs[irq]; + if (intr_isrc_dispatch(&irqsrc->isrc, tf)) + device_printf(sc->dev, + "note: unexpected interrupt (%d) triggered.\n", + irq); + + /* Done with this interrupt. */ + interrupt_bitmap = interrupt_bitmap & ~(1 << irq); + } +} + +static int +bcm_pcib_msi_intr(void *arg) +{ + struct bcm_pcib_softc *sc; + struct trapframe *tf; + uint32_t interrupt_bitmap; + + sc = (struct bcm_pcib_softc *) arg; + tf = curthread->td_intr_frame; + + while ((interrupt_bitmap = bcm_pcib_read_reg(sc, REG_MSI_RAISED))) + bcm_pcib_msi_intr_process(sc, interrupt_bitmap, tf); + + return (FILTER_HANDLED); +} + +static int +bcm_pcib_alloc_msi(device_t dev, device_t child, int count, int maxcount, + device_t *pic, struct intr_irqsrc **srcs) +{ + struct bcm_pcib_softc *sc; + int first_int, i; + + sc = device_get_softc(dev); + mtx_lock(&sc->msi_mtx); + + /* Find a continguous region of free message-signalled interrupts. */ + for (first_int = 0; first_int + count < NUM_MSI; ) { + for (i = first_int; i < first_int + count; ++i) { + if (sc->msi_isrcs[i].allocated) + goto next; + } + goto found; +next: + first_int = i + 1; + } + + /* No appropriate region available. */ + mtx_unlock(&sc->msi_mtx); + device_printf(dev, "warning: failed to allocate %d MSI messages.\n", + count); + return (ENXIO); + +found: + /* Mark the messages as in use. */ + for (i = 0; i < count; ++i) { + sc->msi_isrcs[i + first_int].allocated = true; + srcs[i] = &(sc->msi_isrcs[i + first_int].isrc); + } + + mtx_unlock(&sc->msi_mtx); + *pic = device_get_parent(dev); + + return (0); +} + +static int +bcm_pcib_map_msi(device_t dev, device_t child, struct intr_irqsrc *isrc, + uint64_t *addr, uint32_t *data) +{ + struct bcm_pcib_softc *sc; + struct bcm_pcib_irqsrc *msi_msg; + + sc = device_get_softc(dev); + msi_msg = (struct bcm_pcib_irqsrc *) isrc; + + *addr = sc->msi_addr; + *data = (REG_VALUE_MSI_CONFIG & 0xffff) | msi_msg->irq; + return (0); +} + +static int +bcm_pcib_release_msi(device_t dev, device_t child, int count, + struct intr_irqsrc **isrc) +{ + struct bcm_pcib_softc *sc; + struct bcm_pcib_irqsrc *msi_isrc; + int i; + + sc = device_get_softc(dev); + mtx_lock(&sc->msi_mtx); + + for (i = 0; i < count; i++) { + msi_isrc = (struct bcm_pcib_irqsrc *) isrc[i]; + msi_isrc->allocated = false; + } + + mtx_unlock(&sc->msi_mtx); + return (0); +} + +static int +bcm_pcib_msi_attach(device_t dev) +{ + struct bcm_pcib_softc *sc; + phandle_t node, xref; + char const *bcm_name; + int i, rid; + + sc = device_get_softc(dev); + sc->msi_addr = 0xffffffffc; + + /* Clear any pending interrupts. */ + bcm_pcib_set_reg(sc, REG_MSI_CLR, 0xffffffff); + + rid = 1; + sc->msi_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, + RF_ACTIVE); + if (sc->msi_irq_res == NULL) { + device_printf(dev, "could not allocate MSI irq resource.\n"); + return (ENXIO); + } + + sc->msi_isrcs = malloc(sizeof(*sc->msi_isrcs) * NUM_MSI, M_DEVBUF, + M_WAITOK | M_ZERO); + + int error = bus_setup_intr(dev, sc->msi_irq_res, INTR_TYPE_BIO | + INTR_MPSAFE, bcm_pcib_msi_intr, NULL, sc, &sc->msi_intr_cookie); + if (error) { + device_printf(dev, "error: failed to setup MSI handler.\n"); + return (ENXIO); + } + + bcm_name = device_get_nameunit(dev); + for (i = 0; i < NUM_MSI; i++) { + sc->msi_isrcs[i].irq = i; + error = intr_isrc_register(&sc->msi_isrcs[i].isrc, dev, 0, + "%s,%u", bcm_name, i); + if (error) { + device_printf(dev, + "error: failed to register interrupt %d.\n", i); + return (ENXIO); + } + } + + node = ofw_bus_get_node(dev); + xref = OF_xref_from_node(node); + OF_device_register_xref(xref, dev); + + error = intr_msi_register(dev, xref); + if (error) + return (ENXIO); + + mtx_init(&sc->msi_mtx, "bcm_pcib: msi_mtx", NULL, MTX_DEF); + + bcm_pcib_set_reg(sc, REG_MSI_MASK_CLR, 0xffffffff); + bcm_pcib_set_reg(sc, REG_MSI_ADDR_LOW, (sc->msi_addr & 0xffffffff) | 1); + bcm_pcib_set_reg(sc, REG_MSI_ADDR_HIGH, (sc->msi_addr >> 32)); + bcm_pcib_set_reg(sc, REG_MSI_CONFIG, REG_VALUE_MSI_CONFIG); + + return (0); +} + +static void +bcm_pcib_relocate_bridge_window(device_t dev) +{ + /* + * In principle an out-of-bounds bridge window could be automatically + * adjusted at resource-activation time to lie within the bus address + * space by pcib_grow_window(), but that is not possible because the + * out-of-bounds resource allocation fails at allocation time. Instead, + * we will just fix up the window on the controller here, before it is + * re-discovered by pcib_probe_windows(). + */ + + struct bcm_pcib_softc *sc; + pci_addr_t base, size, new_base, new_limit; + uint16_t val; + + sc = device_get_softc(dev); + + val = bcm_pcib_read_config(dev, 0, 0, 0, PCIR_MEMBASE_1, 2); + base = PCI_PPBMEMBASE(0, val); + + val = bcm_pcib_read_config(dev, 0, 0, 0, PCIR_MEMLIMIT_1, 2); + size = PCI_PPBMEMLIMIT(0, val) - base; + + new_base = sc->base.base.ranges[0].pci_base; + val = (uint16_t) (new_base >> 16); + bcm_pcib_write_config(dev, 0, 0, 0, PCIR_MEMBASE_1, val, 2); + + new_limit = new_base + size; + val = (uint16_t) (new_limit >> 16); + bcm_pcib_write_config(dev, 0, 0, 0, PCIR_MEMLIMIT_1, val, 2); +} + +static uint32_t +encode_cpu_window_low(pci_addr_t phys_base, bus_size_t size) +{ + + return (((phys_base >> 0x10) & 0xfff0) | + ((phys_base + size - 1) & 0xfff00000)); +} + +static uint32_t +encode_cpu_window_start_high(pci_addr_t phys_base) +{ + + return ((phys_base >> 0x20) & 0xff); +} + +static uint32_t +encode_cpu_window_end_high(pci_addr_t phys_base, bus_size_t size) +{ + + return (((phys_base + size - 1) >> 0x20) & 0xff); +} + +static int +bcm_pcib_attach(device_t dev) +{ + struct bcm_pcib_softc *sc; + pci_addr_t phys_base, pci_base; + bus_size_t size; + uint32_t hardware_rev, bridge_state, link_state; + int error, tries; + + sc = device_get_softc(dev); + sc->dev = dev; + + error = pci_host_generic_setup_fdt(dev); + if (error) + return (error); + + error = bcm_pcib_check_ranges(dev); + if (error) + return (error); + + mtx_init(&sc->config_mtx, "bcm_pcib: config_mtx", NULL, MTX_DEF); + + bcm_pcib_reset_controller(sc); + + hardware_rev = bcm_pcib_read_reg(sc, REG_CONTROLLER_HW_REV) & 0xffff; + device_printf(dev, "hardware identifies as revision 0x%x.\n", + hardware_rev); + + /* + * Set PCI->CPU memory window. This encodes the inbound window showing + * up to 4 GiB of system memory to the controller, with zero offset. + * Thus, from the perspective of a device on the PCI-E bus, there is a + * 1:1 map from PCI-E bus addresses to system memory addresses. However, + * a hardware limitation means that the controller can only perform DMA + * on the lower 3 GiB of system memory. + */ + bcm_pcib_set_reg(sc, REG_BRIDGE_MEM_WINDOW_LOW, REG_VALUE_4GB_WINDOW); + bcm_pcib_set_reg(sc, REG_BRIDGE_MEM_WINDOW_HIGH, 0); + bcm_pcib_set_reg(sc, REG_BRIDGE_CONFIG, REG_VALUE_4GB_CONFIG); + bcm_pcib_set_reg(sc, REG_BRIDGE_GISB_WINDOW, 0); + bcm_pcib_set_reg(sc, REG_BRIDGE_MEM_WINDOW_1, 0); + + bcm_pcib_enable_controller(sc); + + /* Wait for controller to start. */ + for(tries = 0; ; ++tries) { + bridge_state = bcm_pcib_read_reg(sc, REG_BRIDGE_STATE); + + if ((bridge_state & 0x30) == 0x30) + /* Controller ready. */ + break; + + if (tries > 100) { + device_printf(dev, + "error: controller failed to start.\n"); + return (ENXIO); + } + + DELAY(1000); + } + + link_state = bcm_pcib_read_reg(sc, REG_BRIDGE_LINK_STATE) >> 0x10; + if (!link_state) { + device_printf(dev, "error: controller started but link is not " + "up.\n"); + return (ENXIO); + } + if (bootverbose) + device_printf(dev, "note: reported link speed is %s.\n", + bcm_pcib_link_state_string(link_state)); + + /* + * Set the CPU->PCI memory window. The map in this direction is not 1:1. + * Addresses seen by the CPU need to be adjusted to make sense to the + * controller as they pass through the window. + */ + pci_base = sc->base.base.ranges[0].pci_base; + phys_base = sc->base.base.ranges[0].phys_base; + size = sc->base.base.ranges[0].size; + + bcm_pcib_set_reg(sc, REG_BRIDGE_BUS_WINDOW_LOW, pci_base & 0xffffffff); + bcm_pcib_set_reg(sc, REG_BRIDGE_BUS_WINDOW_HIGH, pci_base >> 32); + + bcm_pcib_set_reg(sc, REG_BRIDGE_CPU_WINDOW_LOW, + encode_cpu_window_low(phys_base, size)); + bcm_pcib_set_reg(sc, REG_BRIDGE_CPU_WINDOW_START_HIGH, + encode_cpu_window_start_high(phys_base)); + bcm_pcib_set_reg(sc, REG_BRIDGE_CPU_WINDOW_END_HIGH, + encode_cpu_window_end_high(phys_base, size)); + + /* + * The controller starts up declaring itself an endpoint; readvertise it + * as a bridge. + */ + bcm_pcib_set_reg(sc, PCI_ID_VAL3, + PCIC_BRIDGE << CLASS_SHIFT | PCIS_BRIDGE_PCI << SUBCLASS_SHIFT); + + bcm_pcib_set_reg(sc, REG_BRIDGE_SERDES_MODE, 0x2); + DELAY(100); + + bcm_pcib_relocate_bridge_window(dev); + + /* Configure interrupts. */ + error = bcm_pcib_msi_attach(dev); + if (error) + return (error); + + /* Done. */ + device_add_child(dev, "pci", -1); + return (bus_generic_attach(dev)); +} + +/* + * Device method table. + */ +static device_method_t bcm_pcib_methods[] = { + /* Device interface. */ + DEVMETHOD(device_probe, bcm_pcib_probe), + DEVMETHOD(device_attach, bcm_pcib_attach), + + /* PCIB interface. */ + DEVMETHOD(pcib_read_config, bcm_pcib_read_config), + DEVMETHOD(pcib_write_config, bcm_pcib_write_config), + + /* MSI interface. */ + DEVMETHOD(msi_alloc_msi, bcm_pcib_alloc_msi), + DEVMETHOD(msi_release_msi, bcm_pcib_release_msi), + DEVMETHOD(msi_map_msi, bcm_pcib_map_msi), + + DEVMETHOD_END +}; + +DEFINE_CLASS_1(pcib, bcm_pcib_driver, bcm_pcib_methods, + sizeof(struct bcm_pcib_softc), generic_pcie_fdt_driver); + +static devclass_t bcm_pcib_devclass; +DRIVER_MODULE(pcib, simplebus, bcm_pcib_driver, bcm_pcib_devclass, 0, 0); + Modified: head/sys/arm/broadcom/bcm2835/files.bcm283x ============================================================================== --- head/sys/arm/broadcom/bcm2835/files.bcm283x Mon Jul 6 08:50:11 2020 (r362953) +++ head/sys/arm/broadcom/bcm2835/files.bcm283x Mon Jul 6 08:51:55 2020 (r362954) @@ -17,6 +17,7 @@ arm/broadcom/bcm2835/bcm2835_spi.c optional bcm2835_s arm/broadcom/bcm2835/bcm2835_vcbus.c standard arm/broadcom/bcm2835/bcm2835_vcio.c standard arm/broadcom/bcm2835/bcm2835_wdog.c standard +arm/broadcom/bcm2835/bcm2838_pci.c optional pci arm/broadcom/bcm2835/bcm283x_dwc_fdt.c optional dwcotg fdt dev/mbox/mbox_if.m standard Modified: head/sys/conf/files.arm64 ============================================================================== --- head/sys/conf/files.arm64 Mon Jul 6 08:50:11 2020 (r362953) +++ head/sys/conf/files.arm64 Mon Jul 6 08:51:55 2020 (r362954) @@ -105,6 +105,7 @@ arm/broadcom/bcm2835/bcm2835_vcio.c optional soc_brcm arm/broadcom/bcm2835/bcm2835_wdog.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt arm/broadcom/bcm2835/bcm2836.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt arm/broadcom/bcm2835/bcm283x_dwc_fdt.c optional dwcotg fdt soc_brcm_bcm2837 | dwcotg fdt soc_brcm_bcm2838 +arm/broadcom/bcm2835/bcm2838_pci.c optional soc_brcm_bcm2838 fdt pci arm/freescale/vybrid/vf_i2c.c optional vf_i2c iicbus SOC_NXP_LS arm/mv/a37x0_gpio.c optional a37x0_gpio gpio fdt arm/mv/a37x0_iic.c optional a37x0_iic iicbus fdt Modified: head/sys/dev/pci/pci_host_generic_fdt.c ============================================================================== --- head/sys/dev/pci/pci_host_generic_fdt.c Mon Jul 6 08:50:11 2020 (r362953) +++ head/sys/dev/pci/pci_host_generic_fdt.c Mon Jul 6 08:51:55 2020 (r362954) @@ -120,7 +120,7 @@ generic_pcie_fdt_probe(device_t dev) } int -pci_host_generic_attach(device_t dev) +pci_host_generic_setup_fdt(device_t dev) { struct generic_pcie_fdt_softc *sc; phandle_t node; @@ -149,11 +149,27 @@ pci_host_generic_attach(device_t dev) /* TODO parse FDT bus ranges */ sc->base.bus_start = 0; sc->base.bus_end = 0xFF; + error = pci_host_generic_core_attach(dev); if (error != 0) return (error); ofw_bus_setup_iinfo(node, &sc->pci_iinfo, sizeof(cell_t)); + + return (0); +} + +int +pci_host_generic_attach(device_t dev) +{ + struct generic_pcie_fdt_softc *sc; + int error; + + sc = device_get_softc(dev); + + error = pci_host_generic_setup_fdt(dev); + if (error != 0) + return (error); device_add_child(dev, "pci", -1); return (bus_generic_attach(dev)); Modified: head/sys/dev/pci/pci_host_generic_fdt.h ============================================================================== --- head/sys/dev/pci/pci_host_generic_fdt.h Mon Jul 6 08:50:11 2020 (r362953) +++ head/sys/dev/pci/pci_host_generic_fdt.h Mon Jul 6 08:51:55 2020 (r362954) @@ -43,6 +43,7 @@ DECLARE_CLASS(generic_pcie_fdt_driver); struct resource *pci_host_generic_alloc_resource(device_t, device_t, int, int *, rman_res_t, rman_res_t, rman_res_t, u_int); +int pci_host_generic_setup_fdt(device_t); int pci_host_generic_attach(device_t); int generic_pcie_get_id(device_t, device_t, enum pci_id_type, uintptr_t *); From owner-svn-src-all@freebsd.org Mon Jul 6 09:04:07 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DC004360BA0; Mon, 6 Jul 2020 09:04:07 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0fkv57D7z3Vvv; Mon, 6 Jul 2020 09:04:07 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 935DC1B9D8; Mon, 6 Jul 2020 09:04:07 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066947tN009769; Mon, 6 Jul 2020 09:04:07 GMT (envelope-from 0mp@FreeBSD.org) Received: (from 0mp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066947lm009767; Mon, 6 Jul 2020 09:04:07 GMT (envelope-from 0mp@FreeBSD.org) Message-Id: <202007060904.066947lm009767@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: 0mp set sender to 0mp@FreeBSD.org using -f From: Mateusz Piotrowski <0mp@FreeBSD.org> Date: Mon, 6 Jul 2020 09:04:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r362955 - in stable/12: crypto/heimdal/lib/krb5 lib/libcasper/libcasper X-SVN-Group: stable-12 X-SVN-Commit-Author: 0mp X-SVN-Commit-Paths: in stable/12: crypto/heimdal/lib/krb5 lib/libcasper/libcasper X-SVN-Commit-Revision: 362955 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 09:04:07 -0000 Author: 0mp (doc,ports committer) Date: Mon Jul 6 09:04:06 2020 New Revision: 362955 URL: https://svnweb.freebsd.org/changeset/base/362955 Log: MFC 362676: Fix trailing-comma-related typos in the tree when the Xr macro is used Modified: stable/12/crypto/heimdal/lib/krb5/krb5.conf.5 stable/12/lib/libcasper/libcasper/libcasper_service.3 Directory Properties: stable/12/ (props changed) Modified: stable/12/crypto/heimdal/lib/krb5/krb5.conf.5 ============================================================================== --- stable/12/crypto/heimdal/lib/krb5/krb5.conf.5 Mon Jul 6 08:51:55 2020 (r362954) +++ stable/12/crypto/heimdal/lib/krb5/krb5.conf.5 Mon Jul 6 09:04:06 2020 (r362955) @@ -257,7 +257,7 @@ Setting this flag to make it store the MIT way, this is default for Heimdal 0.7. .It Li check-rd-req-server If set to "ignore", the framework will ignore any the server input to -.Xr krb5_rd_req 3, +.Xr krb5_rd_req 3 , this is very useful when the GSS-API server input the wrong server name into the gss_accept_sec_context call. .El Modified: stable/12/lib/libcasper/libcasper/libcasper_service.3 ============================================================================== --- stable/12/lib/libcasper/libcasper/libcasper_service.3 Mon Jul 6 08:51:55 2020 (r362954) +++ stable/12/lib/libcasper/libcasper/libcasper_service.3 Mon Jul 6 09:04:06 2020 (r362955) @@ -51,7 +51,7 @@ macro to create a new Casper service. The .Fa name is a string containing the service name, which will be used in the -.Xr cap_service_open 3, +.Xr cap_service_open 3 , function to identify it. .Pp The From owner-svn-src-all@freebsd.org Mon Jul 6 09:53:00 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id AC765362398; Mon, 6 Jul 2020 09:53:00 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0gqJ4CFdz3Ypf; Mon, 6 Jul 2020 09:53:00 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 737F81C817; Mon, 6 Jul 2020 09:53:00 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0669r0m3040922; Mon, 6 Jul 2020 09:53:00 GMT (envelope-from 0mp@FreeBSD.org) Received: (from 0mp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0669r04g040921; Mon, 6 Jul 2020 09:53:00 GMT (envelope-from 0mp@FreeBSD.org) Message-Id: <202007060953.0669r04g040921@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: 0mp set sender to 0mp@FreeBSD.org using -f From: Mateusz Piotrowski <0mp@FreeBSD.org> Date: Mon, 6 Jul 2020 09:53:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362956 - head/lib/libcam X-SVN-Group: head X-SVN-Commit-Author: 0mp X-SVN-Commit-Paths: head/lib/libcam X-SVN-Commit-Revision: 362956 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 09:53:00 -0000 Author: 0mp (doc,ports committer) Date: Mon Jul 6 09:53:00 2020 New Revision: 362956 URL: https://svnweb.freebsd.org/changeset/base/362956 Log: Clean up cam.3 - Add a missing Pp [1] - Remove uses of Tn - Use "Xr open 2" when appropriate PR: 247783 [1] Submitted by: PauAmma [1] MFC after: 3 days Modified: head/lib/libcam/cam.3 Modified: head/lib/libcam/cam.3 ============================================================================== --- head/lib/libcam/cam.3 Mon Jul 6 09:04:06 2020 (r362955) +++ head/lib/libcam/cam.3 Mon Jul 6 09:53:00 2020 (r362956) @@ -27,7 +27,7 @@ .\" .\" $FreeBSD$ .\" -.Dd March 11, 2017 +.Dd July 6, 2020 .Dt CAM 3 .Os .Sh NAME @@ -218,15 +218,12 @@ structure using .Fn cam_open_btl is similar to .Fn cam_open_spec_device , -except that it takes a -.Tn SCSI -bus, target and logical unit instead of a device name and unit number as +except that it takes a SCSI bus, +target and logical unit instead of a device name and unit number as arguments. The .Va path_id -argument is the CAM equivalent of a -.Tn SCSI -bus number. +argument is the CAM equivalent of a SCSI bus number. It represents the logical bus number in the system. The .Ar flags @@ -263,10 +260,13 @@ should be if the user wants the CAM library to allocate space for the .Va cam_device structure. +.Pp .Fn cam_close_device frees the .Va cam_device -structure allocated by one of the above open() calls, and closes the file +structure allocated by one of the above +.Xr open 2 +calls, and closes the file descriptor to the passthrough device. This routine should not be called if the user allocated space for the @@ -276,7 +276,9 @@ Instead, the user should call .Fn cam_close_spec_device . .Pp .Fn cam_close_spec_device -merely closes the file descriptor opened in one of the open() routines +merely closes the file descriptor opened in one of the +.Xr open 2 +routines described above. This function should be called when the .Va cam_device From owner-svn-src-all@freebsd.org Mon Jul 6 10:05:36 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 34B4C362B3B; Mon, 6 Jul 2020 10:05:36 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0h5r0X02z3Zfp; Mon, 6 Jul 2020 10:05:36 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E59C61C849; Mon, 6 Jul 2020 10:05:35 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066A5ZUO046928; Mon, 6 Jul 2020 10:05:35 GMT (envelope-from 0mp@FreeBSD.org) Received: (from 0mp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066A5Z5M046927; Mon, 6 Jul 2020 10:05:35 GMT (envelope-from 0mp@FreeBSD.org) Message-Id: <202007061005.066A5Z5M046927@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: 0mp set sender to 0mp@FreeBSD.org using -f From: Mateusz Piotrowski <0mp@FreeBSD.org> Date: Mon, 6 Jul 2020 10:05:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362957 - head/bin/sh X-SVN-Group: head X-SVN-Commit-Author: 0mp X-SVN-Commit-Paths: head/bin/sh X-SVN-Commit-Revision: 362957 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 10:05:36 -0000 Author: 0mp (doc,ports committer) Date: Mon Jul 6 10:05:35 2020 New Revision: 362957 URL: https://svnweb.freebsd.org/changeset/base/362957 Log: Fix description of the "\$" sequence for PS1 The manual page documents "\$" to expand to either "$" or "#" followed by a single space. In reality, the single space character is not appended. PR: 247791 Submitted by: kd-dev@pm.me MFC after: 7 days Modified: head/bin/sh/sh.1 Modified: head/bin/sh/sh.1 ============================================================================== --- head/bin/sh/sh.1 Mon Jul 6 09:53:00 2020 (r362956) +++ head/bin/sh/sh.1 Mon Jul 6 10:05:35 2020 (r362957) @@ -32,7 +32,7 @@ .\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95 .\" $FreeBSD$ .\" -.Dd February 24, 2019 +.Dd July 6, 2020 .Dt SH 1 .Os .Sh NAME @@ -1425,9 +1425,9 @@ The final component of the current working directory. The entire path of the current working directory. .It Li \e$ Superuser status. -.Dq Li "$ " +.Dq Li "$" for normal users and -.Dq Li "# " +.Dq Li "#" for superusers. .It Li \e\e A literal backslash. From owner-svn-src-all@freebsd.org Mon Jul 6 11:58:00 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 42C2C364D43; Mon, 6 Jul 2020 11:58:00 +0000 (UTC) (envelope-from luporl@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0kbW61R5z3gdk; Mon, 6 Jul 2020 11:57:59 +0000 (UTC) (envelope-from luporl@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B31E31DC31; Mon, 6 Jul 2020 11:57:59 +0000 (UTC) (envelope-from luporl@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066BvxLu014820; Mon, 6 Jul 2020 11:57:59 GMT (envelope-from luporl@FreeBSD.org) Received: (from luporl@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066BvxTI014819; Mon, 6 Jul 2020 11:57:59 GMT (envelope-from luporl@FreeBSD.org) Message-Id: <202007061157.066BvxTI014819@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: luporl set sender to luporl@FreeBSD.org using -f From: Leandro Lupori Date: Mon, 6 Jul 2020 11:57:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362958 - head/libexec/rtld-elf X-SVN-Group: head X-SVN-Commit-Author: luporl X-SVN-Commit-Paths: head/libexec/rtld-elf X-SVN-Commit-Revision: 362958 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 11:58:00 -0000 Author: luporl Date: Mon Jul 6 11:57:59 2020 New Revision: 362958 URL: https://svnweb.freebsd.org/changeset/base/362958 Log: Handle non-PLT GNU IFUNC relocations in rtld In the last IFUNC related changes to rtld, the code that handled non-PLT GNU IFUNC relocations ended up getting lost. This could leave some relocations unhandled, causing crashes or misbehavior. This change restores the handling of these relocations, but now together with the other IFUNC relocations, allowing resolvers to reference external symbols. Reviewed by: kib MFC after: 2 weeks Sponsored by: Eldorado Research Institute (eldorado.org.br) Differential Revision: https://reviews.freebsd.org/D25550 Modified: head/libexec/rtld-elf/rtld.c Modified: head/libexec/rtld-elf/rtld.c ============================================================================== --- head/libexec/rtld-elf/rtld.c Mon Jul 6 10:05:35 2020 (r362957) +++ head/libexec/rtld-elf/rtld.c Mon Jul 6 11:57:59 2020 (r362958) @@ -3111,7 +3111,8 @@ resolve_object_ifunc(Obj_Entry *obj, bool bind_now, in return (0); obj->ifuncs_resolved = true; if (!obj->irelative && !obj->irelative_nonplt && - !((obj->bind_now || bind_now) && obj->gnu_ifunc)) + !((obj->bind_now || bind_now) && obj->gnu_ifunc) && + !obj->non_plt_gnu_ifunc) return (0); if (obj_disable_relro(obj) == -1 || (obj->irelative && reloc_iresolve(obj, lockstate) == -1) || @@ -3119,6 +3120,8 @@ resolve_object_ifunc(Obj_Entry *obj, bool bind_now, in lockstate) == -1) || ((obj->bind_now || bind_now) && obj->gnu_ifunc && reloc_gnu_ifunc(obj, flags, lockstate) == -1) || + (obj->non_plt_gnu_ifunc && reloc_non_plt(obj, &obj_rtld, + flags | SYMLOOK_IFUNC, lockstate) == -1) || obj_enforce_relro(obj) == -1) return (-1); return (0); From owner-svn-src-all@freebsd.org Mon Jul 6 13:54:18 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id EFAB03686EF; Mon, 6 Jul 2020 13:54:18 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0n9k63dcz45Bp; Mon, 6 Jul 2020 13:54:18 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B30ED1F588; Mon, 6 Jul 2020 13:54:18 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066DsIqG088791; Mon, 6 Jul 2020 13:54:18 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066DsIv2088788; Mon, 6 Jul 2020 13:54:18 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007061354.066DsIv2088788@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Mon, 6 Jul 2020 13:54:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r362959 - in stable/12: share/man/man4 sys/dev/acpi_support X-SVN-Group: stable-12 X-SVN-Commit-Author: markj X-SVN-Commit-Paths: in stable/12: share/man/man4 sys/dev/acpi_support X-SVN-Commit-Revision: 362959 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 13:54:19 -0000 Author: markj Date: Mon Jul 6 13:54:18 2020 New Revision: 362959 URL: https://svnweb.freebsd.org/changeset/base/362959 Log: MFC r362496, r362592: acpi_ibm(4): Add support for putting fans in disengaged mode. PR: 247306 Modified: stable/12/share/man/man4/acpi_ibm.4 stable/12/sys/dev/acpi_support/acpi_ibm.c Directory Properties: stable/12/ (props changed) Modified: stable/12/share/man/man4/acpi_ibm.4 ============================================================================== --- stable/12/share/man/man4/acpi_ibm.4 Mon Jul 6 11:57:59 2020 (r362958) +++ stable/12/share/man/man4/acpi_ibm.4 Mon Jul 6 13:54:18 2020 (r362959) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 19, 2015 +.Dd June 24, 2020 .Dt ACPI_IBM 4 .Os .Sh NAME @@ -289,7 +289,12 @@ fan control might overheat the ThinkPad and lead to pe is not set accordingly. .It Va dev.acpi_ibm.0.fan_level Indicates at what speed the fan should run when being in manual mode. -Values are ranging from 0 (off) to 7 (max). +Valid values range from 0 (off) to 7 (max) and 8. +Level 8 is used by the driver to set the fan in unthrottled mode. +In this mode, the fan is set to spin freely and will quickly reach a very +high speed. +Use this mode only if absolutely necessary, e.g., if the system has reached its +critical temperature and it is about to shut down. The resulting speed differs from model to model. On a T41p this is as follows: .Pp @@ -302,6 +307,8 @@ off ~3600 RPM .It Li 6, 7 ~4300 RPM +.It Li 8 +~6400 RPM (Full-speed, unthrottled) .El .It Va dev.acpi_ibm.0.fan_speed (read-only) Modified: stable/12/sys/dev/acpi_support/acpi_ibm.c ============================================================================== --- stable/12/sys/dev/acpi_support/acpi_ibm.c Mon Jul 6 11:57:59 2020 (r362958) +++ stable/12/sys/dev/acpi_support/acpi_ibm.c Mon Jul 6 13:54:18 2020 (r362959) @@ -2,6 +2,7 @@ * Copyright (c) 2004 Takanori Watanabe * Copyright (c) 2005 Markus Brueffer * All rights reserved. + * Copyright (c) 2020 Ali Abdallah * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -105,7 +106,7 @@ ACPI_MODULE_NAME("IBM") #define IBM_EC_MASK_MUTE (1 << 6) #define IBM_EC_FANSTATUS 0x2F #define IBM_EC_MASK_FANLEVEL 0x3f -#define IBM_EC_MASK_FANDISENGAGED (1 << 6) +#define IBM_EC_MASK_FANUNTHROTTLED (1 << 6) #define IBM_EC_MASK_FANSTATUS (1 << 7) #define IBM_EC_FANSPEED 0x84 @@ -263,7 +264,8 @@ static struct { { .name = "fan_level", .method = ACPI_IBM_METHOD_FANLEVEL, - .description = "Fan level", + .description = "Fan level, 0-7 (recommended max), " + "8 (unthrottled, full-speed)", }, { .name = "fan", @@ -830,7 +832,10 @@ acpi_ibm_sysctl_get(struct acpi_ibm_softc *sc, int met */ if (!sc->fan_handle) { ACPI_EC_READ(sc->ec_dev, IBM_EC_FANSTATUS, &val_ec, 1); - val = val_ec & IBM_EC_MASK_FANLEVEL; + if (val_ec & IBM_EC_MASK_FANUNTHROTTLED) + val = 8; + else + val = val_ec & IBM_EC_MASK_FANLEVEL; } break; @@ -914,15 +919,23 @@ acpi_ibm_sysctl_set(struct acpi_ibm_softc *sc, int met break; case ACPI_IBM_METHOD_FANLEVEL: - if (arg < 0 || arg > 7) + if (arg < 0 || arg > 8) return (EINVAL); if (!sc->fan_handle) { - /* Read the current fanstatus */ + /* Read the current fan status. */ ACPI_EC_READ(sc->ec_dev, IBM_EC_FANSTATUS, &val_ec, 1); - val = val_ec & (~IBM_EC_MASK_FANLEVEL); + val = val_ec & ~(IBM_EC_MASK_FANLEVEL | + IBM_EC_MASK_FANUNTHROTTLED); - return ACPI_EC_WRITE(sc->ec_dev, IBM_EC_FANSTATUS, val | arg, 1); + if (arg == 8) + /* Full speed, set the unthrottled bit. */ + val |= 7 | IBM_EC_MASK_FANUNTHROTTLED; + else + val |= arg; + + return (ACPI_EC_WRITE(sc->ec_dev, IBM_EC_FANSTATUS, val, + 1)); } break; From owner-svn-src-all@freebsd.org Mon Jul 6 13:54:45 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 298B13689C6; Mon, 6 Jul 2020 13:54:45 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0nBF0CHdz45GY; Mon, 6 Jul 2020 13:54:45 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DF1581F554; Mon, 6 Jul 2020 13:54:44 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066Dsi5B088919; Mon, 6 Jul 2020 13:54:44 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066Dsicq088917; Mon, 6 Jul 2020 13:54:44 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007061354.066Dsicq088917@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Mon, 6 Jul 2020 13:54:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r362960 - in stable/12/sys: compat/linuxkpi/common/src dev/md X-SVN-Group: stable-12 X-SVN-Commit-Author: markj X-SVN-Commit-Paths: in stable/12/sys: compat/linuxkpi/common/src dev/md X-SVN-Commit-Revision: 362960 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 13:54:45 -0000 Author: markj Date: Mon Jul 6 13:54:44 2020 New Revision: 362960 URL: https://svnweb.freebsd.org/changeset/base/362960 Log: MFC r362739: Remove some redundant assignments and computations. Modified: stable/12/sys/compat/linuxkpi/common/src/linux_page.c stable/12/sys/dev/md/md.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/compat/linuxkpi/common/src/linux_page.c ============================================================================== --- stable/12/sys/compat/linuxkpi/common/src/linux_page.c Mon Jul 6 13:54:18 2020 (r362959) +++ stable/12/sys/compat/linuxkpi/common/src/linux_page.c Mon Jul 6 13:54:44 2020 (r362960) @@ -201,7 +201,7 @@ linux_get_user_pages_internal(vm_map_t map, unsigned l int i; prot = write ? (VM_PROT_READ | VM_PROT_WRITE) : VM_PROT_READ; - len = ((size_t)nr_pages) << PAGE_SHIFT; + len = ptoa((vm_offset_t)nr_pages); count = vm_fault_quick_hold_pages(map, start, len, prot, pages, nr_pages); if (count == -1) return (-EFAULT); @@ -232,9 +232,8 @@ __get_user_pages_fast(unsigned long start, int nr_page return (0); MPASS(pages != NULL); - va = start; map = &curthread->td_proc->p_vmspace->vm_map; - end = start + (((size_t)nr_pages) << PAGE_SHIFT); + end = start + ptoa((vm_offset_t)nr_pages); if (!vm_map_range_valid(map, start, end)) return (-EINVAL); prot = write ? (VM_PROT_READ | VM_PROT_WRITE) : VM_PROT_READ; Modified: stable/12/sys/dev/md/md.c ============================================================================== --- stable/12/sys/dev/md/md.c Mon Jul 6 13:54:18 2020 (r362959) +++ stable/12/sys/dev/md/md.c Mon Jul 6 13:54:44 2020 (r362960) @@ -1562,8 +1562,8 @@ mdresize(struct md_s *sc, struct md_req *mdr) if (mdr->md_mediasize <= 0 || (mdr->md_mediasize % PAGE_SIZE) != 0) return (EDOM); - oldpages = OFF_TO_IDX(round_page(sc->mediasize)); - newpages = OFF_TO_IDX(round_page(mdr->md_mediasize)); + oldpages = OFF_TO_IDX(sc->mediasize); + newpages = OFF_TO_IDX(mdr->md_mediasize); if (newpages < oldpages) { VM_OBJECT_WLOCK(sc->object); vm_object_page_remove(sc->object, newpages, 0, 0); From owner-svn-src-all@freebsd.org Mon Jul 6 14:00:24 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 332213689E2; Mon, 6 Jul 2020 14:00:24 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0nJm0wF6z45YY; Mon, 6 Jul 2020 14:00:24 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 02AF01F58D; Mon, 6 Jul 2020 14:00:24 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066E0N6a089388; Mon, 6 Jul 2020 14:00:23 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066E0L9A089374; Mon, 6 Jul 2020 14:00:21 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007061400.066E0L9A089374@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Mon, 6 Jul 2020 14:00:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r362961 - in stable/12: share/man/man4 sys/conf sys/kern sys/netinet sys/netinet6 sys/netipsec sys/netpfil/pf X-SVN-Group: stable-12 X-SVN-Commit-Author: markj X-SVN-Commit-Paths: in stable/12: share/man/man4 sys/conf sys/kern sys/netinet sys/netinet6 sys/netipsec sys/netpfil/pf X-SVN-Commit-Revision: 362961 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 14:00:24 -0000 Author: markj Date: Mon Jul 6 14:00:20 2020 New Revision: 362961 URL: https://svnweb.freebsd.org/changeset/base/362961 Log: MFC r362338: Add the SCTP_SUPPORT kernel option. Modified: stable/12/share/man/man4/sctp.4 stable/12/sys/conf/NOTES stable/12/sys/conf/options stable/12/sys/kern/uipc_socket.c stable/12/sys/netinet/in_proto.c stable/12/sys/netinet/ip_divert.c stable/12/sys/netinet/ip_output.c stable/12/sys/netinet/sctp_crc32.c stable/12/sys/netinet/sctp_crc32.h stable/12/sys/netinet6/in6_proto.c stable/12/sys/netinet6/ip6_forward.c stable/12/sys/netinet6/ip6_output.c stable/12/sys/netipsec/ipsec_output.c stable/12/sys/netpfil/pf/pf.c Directory Properties: stable/12/ (props changed) Modified: stable/12/share/man/man4/sctp.4 ============================================================================== --- stable/12/share/man/man4/sctp.4 Mon Jul 6 13:54:44 2020 (r362960) +++ stable/12/share/man/man4/sctp.4 Mon Jul 6 14:00:20 2020 (r362961) @@ -26,13 +26,16 @@ .\" .\" $FreeBSD$ .\" -.Dd January 4, 2020 +.Dd June 18, 2020 .Dt SCTP 4 .Os .Sh NAME .Nm sctp .Nd Internet Stream Control Transmission Protocol .Sh SYNOPSIS +.Cd "options SCTP" +.Cd "options SCTP_SUPPORT" +.Pp .In sys/types.h .In sys/socket.h .In netinet/sctp.h Modified: stable/12/sys/conf/NOTES ============================================================================== --- stable/12/sys/conf/NOTES Mon Jul 6 13:54:44 2020 (r362960) +++ stable/12/sys/conf/NOTES Mon Jul 6 14:00:20 2020 (r362961) @@ -692,7 +692,12 @@ options LIBALIAS # the V6 and V4.. since an association can span # both a V6 and V4 address at the SAME time :-) # +# The SCTP_SUPPORT option does not enable SCTP, but provides the necessary +# support for loading SCTP as a loadable kernel module. +# options SCTP +options SCTP_SUPPORT + # There are bunches of options: # this one turns on all sorts of # nastily printing that you can @@ -705,6 +710,7 @@ options SCTP # bits and prints.. which makes the code run # faster.. if you are not debugging don't use. options SCTP_DEBUG + # # All that options after that turn on specific types of # logging. You can monitor CWND growth, flight size @@ -727,7 +733,6 @@ options SCTP_MBCNT_LOGGING options SCTP_PACKET_LOGGING options SCTP_LTRACE_CHUNKS options SCTP_LTRACE_ERRORS - # altq(9). Enable the base part of the hooks with the ALTQ option. # Individual disciplines must be built into the base system and can not be Modified: stable/12/sys/conf/options ============================================================================== --- stable/12/sys/conf/options Mon Jul 6 13:54:44 2020 (r362960) +++ stable/12/sys/conf/options Mon Jul 6 14:00:20 2020 (r362961) @@ -478,6 +478,7 @@ XBONEHACK # SCTP # SCTP opt_sctp.h +SCTP_SUPPORT opt_sctp.h SCTP_DEBUG opt_sctp.h # Enable debug printfs SCTP_LOCK_LOGGING opt_sctp.h # Log to KTR lock activity SCTP_MBUF_LOGGING opt_sctp.h # Log to KTR general mbuf aloc/free Modified: stable/12/sys/kern/uipc_socket.c ============================================================================== --- stable/12/sys/kern/uipc_socket.c Mon Jul 6 13:54:44 2020 (r362960) +++ stable/12/sys/kern/uipc_socket.c Mon Jul 6 14:00:20 2020 (r362961) @@ -689,7 +689,7 @@ sonewconn(struct socket *head, int connstatus) return (so); } -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) /* * Socket part of sctp_peeloff(). Detach a new socket from an * association. The new socket is returned with a reference. Modified: stable/12/sys/netinet/in_proto.c ============================================================================== --- stable/12/sys/netinet/in_proto.c Mon Jul 6 13:54:44 2020 (r362960) +++ stable/12/sys/netinet/in_proto.c Mon Jul 6 14:00:20 2020 (r362961) @@ -97,7 +97,7 @@ static struct pr_usrreqs nousrreqs; #include #include #include -#endif /* SCTP */ +#endif FEATURE(inet, "Internet Protocol version 4"); @@ -327,7 +327,7 @@ SYSCTL_NODE(_net_inet, IPPROTO_IP, ip, CTLFLAG_RW, 0, SYSCTL_NODE(_net_inet, IPPROTO_ICMP, icmp, CTLFLAG_RW, 0, "ICMP"); SYSCTL_NODE(_net_inet, IPPROTO_UDP, udp, CTLFLAG_RW, 0, "UDP"); SYSCTL_NODE(_net_inet, IPPROTO_TCP, tcp, CTLFLAG_RW, 0, "TCP"); -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) SYSCTL_NODE(_net_inet, IPPROTO_SCTP, sctp, CTLFLAG_RW, 0, "SCTP"); #endif SYSCTL_NODE(_net_inet, IPPROTO_IGMP, igmp, CTLFLAG_RW, 0, "IGMP"); Modified: stable/12/sys/netinet/ip_divert.c ============================================================================== --- stable/12/sys/netinet/ip_divert.c Mon Jul 6 13:54:44 2020 (r362960) +++ stable/12/sys/netinet/ip_divert.c Mon Jul 6 14:00:20 2020 (r362961) @@ -69,7 +69,7 @@ __FBSDID("$FreeBSD$"); #include #include #endif -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) #include #endif @@ -210,7 +210,7 @@ divert_packet(struct mbuf *m, int incoming) in_delayed_cksum(m); m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA; } -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) if (m->m_pkthdr.csum_flags & CSUM_SCTP) { sctp_delayed_cksum(m, (uint32_t)(ip->ip_hl << 2)); m->m_pkthdr.csum_flags &= ~CSUM_SCTP; Modified: stable/12/sys/netinet/ip_output.c ============================================================================== --- stable/12/sys/netinet/ip_output.c Mon Jul 6 13:54:44 2020 (r362960) +++ stable/12/sys/netinet/ip_output.c Mon Jul 6 14:00:20 2020 (r362961) @@ -84,7 +84,7 @@ __FBSDID("$FreeBSD$"); #include #include -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) #include #include #endif @@ -143,7 +143,7 @@ ip_output_pfil(struct mbuf **mp, struct ifnet *ifp, st } m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED | CSUM_IP_VALID; -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) if (m->m_pkthdr.csum_flags & CSUM_SCTP) m->m_pkthdr.csum_flags |= CSUM_SCTP_VALID; #endif @@ -174,7 +174,7 @@ ip_output_pfil(struct mbuf **mp, struct ifnet *ifp, st CSUM_DATA_VALID | CSUM_PSEUDO_HDR; m->m_pkthdr.csum_data = 0xffff; } -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) if (m->m_pkthdr.csum_flags & CSUM_SCTP) m->m_pkthdr.csum_flags |= CSUM_SCTP_VALID; #endif @@ -603,7 +603,7 @@ sendit: in_delayed_cksum(m); m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA; } -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) if (m->m_pkthdr.csum_flags & CSUM_SCTP & ~ifp->if_hwassist) { sctp_delayed_cksum(m, (uint32_t)(ip->ip_hl << 2)); m->m_pkthdr.csum_flags &= ~CSUM_SCTP; @@ -786,7 +786,7 @@ ip_fragment(struct ip *ip, struct mbuf **m_frag, int m in_delayed_cksum(m0); m0->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA; } -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) if (m0->m_pkthdr.csum_flags & CSUM_SCTP) { sctp_delayed_cksum(m0, hlen); m0->m_pkthdr.csum_flags &= ~CSUM_SCTP; Modified: stable/12/sys/netinet/sctp_crc32.c ============================================================================== --- stable/12/sys/netinet/sctp_crc32.c Mon Jul 6 13:54:44 2020 (r362960) +++ stable/12/sys/netinet/sctp_crc32.c Mon Jul 6 14:00:20 2020 (r362961) @@ -37,17 +37,16 @@ __FBSDID("$FreeBSD$"); #include "opt_sctp.h" -#ifdef SCTP -#include -#include -#include -#include -#else #include #include #include +#include #include +#ifdef SCTP +#include +#include +#include #endif static uint32_t @@ -116,7 +115,7 @@ sctp_calculate_cksum(struct mbuf *m, uint32_t offset) return (base); } -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) /* * Compute and insert the SCTP checksum in network byte order for a given * mbuf chain m which contains an SCTP packet starting at offset. @@ -127,8 +126,10 @@ sctp_delayed_cksum(struct mbuf *m, uint32_t offset) uint32_t checksum; checksum = sctp_calculate_cksum(m, offset); +#ifdef SCTP SCTP_STAT_DECR(sctps_sendhwcrc); SCTP_STAT_INCR(sctps_sendswcrc); +#endif offset += offsetof(struct sctphdr, checksum); if (offset + sizeof(uint32_t) > (uint32_t)(m->m_len)) { Modified: stable/12/sys/netinet/sctp_crc32.h ============================================================================== --- stable/12/sys/netinet/sctp_crc32.h Mon Jul 6 13:54:44 2020 (r362960) +++ stable/12/sys/netinet/sctp_crc32.h Mon Jul 6 14:00:20 2020 (r362961) @@ -40,7 +40,7 @@ __FBSDID("$FreeBSD$"); #if defined(_KERNEL) uint32_t sctp_calculate_cksum(struct mbuf *, uint32_t); -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) void sctp_delayed_cksum(struct mbuf *, uint32_t offset); #endif #endif /* _KERNEL */ Modified: stable/12/sys/netinet6/in6_proto.c ============================================================================== --- stable/12/sys/netinet6/in6_proto.c Mon Jul 6 13:54:44 2020 (r362960) +++ stable/12/sys/netinet6/in6_proto.c Mon Jul 6 14:00:20 2020 (r362961) @@ -432,7 +432,7 @@ SYSCTL_NODE(_net_inet6, IPPROTO_IPV6, ip6, CTLFLAG_RW, SYSCTL_NODE(_net_inet6, IPPROTO_ICMPV6, icmp6, CTLFLAG_RW, 0, "ICMP6"); SYSCTL_NODE(_net_inet6, IPPROTO_UDP, udp6, CTLFLAG_RW, 0, "UDP6"); SYSCTL_NODE(_net_inet6, IPPROTO_TCP, tcp6, CTLFLAG_RW, 0, "TCP6"); -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) SYSCTL_NODE(_net_inet6, IPPROTO_SCTP, sctp6, CTLFLAG_RW, 0, "SCTP6"); #endif #if defined(IPSEC) || defined(IPSEC_SUPPORT) Modified: stable/12/sys/netinet6/ip6_forward.c ============================================================================== --- stable/12/sys/netinet6/ip6_forward.c Mon Jul 6 13:54:44 2020 (r362960) +++ stable/12/sys/netinet6/ip6_forward.c Mon Jul 6 14:00:20 2020 (r362961) @@ -353,7 +353,7 @@ again2: CSUM_DATA_VALID_IPV6 | CSUM_PSEUDO_HDR; m->m_pkthdr.csum_data = 0xffff; } -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) if (m->m_pkthdr.csum_flags & CSUM_SCTP_IPV6) m->m_pkthdr.csum_flags |= CSUM_SCTP_VALID; #endif Modified: stable/12/sys/netinet6/ip6_output.c ============================================================================== --- stable/12/sys/netinet6/ip6_output.c Mon Jul 6 13:54:44 2020 (r362960) +++ stable/12/sys/netinet6/ip6_output.c Mon Jul 6 14:00:20 2020 (r362961) @@ -111,7 +111,7 @@ __FBSDID("$FreeBSD$"); #include #include -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) #include #include #endif @@ -218,7 +218,7 @@ ip6_output_delayed_csum(struct mbuf *m, struct ifnet * __func__, __LINE__, plen, optlen, m, ifp, csum_flags, frag)); if ((csum_flags & CSUM_DELAY_DATA_IPV6) || -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) (csum_flags & CSUM_SCTP_IPV6) || #endif false) { @@ -227,7 +227,7 @@ ip6_output_delayed_csum(struct mbuf *m, struct ifnet * sizeof(struct ip6_hdr) + optlen); m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6; } -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) if (csum_flags & CSUM_SCTP_IPV6) { sctp_delayed_cksum(m, sizeof(struct ip6_hdr) + optlen); m->m_pkthdr.csum_flags &= ~CSUM_SCTP_IPV6; @@ -868,7 +868,7 @@ again: CSUM_DATA_VALID_IPV6 | CSUM_PSEUDO_HDR; m->m_pkthdr.csum_data = 0xffff; } -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) if (m->m_pkthdr.csum_flags & CSUM_SCTP_IPV6) m->m_pkthdr.csum_flags |= CSUM_SCTP_VALID; #endif @@ -898,7 +898,7 @@ again: CSUM_DATA_VALID_IPV6 | CSUM_PSEUDO_HDR; m->m_pkthdr.csum_data = 0xffff; } -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) if (m->m_pkthdr.csum_flags & CSUM_SCTP_IPV6) m->m_pkthdr.csum_flags |= CSUM_SCTP_VALID; #endif Modified: stable/12/sys/netipsec/ipsec_output.c ============================================================================== --- stable/12/sys/netipsec/ipsec_output.c Mon Jul 6 13:54:44 2020 (r362960) +++ stable/12/sys/netipsec/ipsec_output.c Mon Jul 6 14:00:20 2020 (r362961) @@ -71,7 +71,7 @@ #ifdef INET6 #include #endif -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) #include #endif @@ -326,7 +326,7 @@ ipsec4_common_output(struct mbuf *m, struct inpcb *inp in_delayed_cksum(m); m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA; } -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) if (m->m_pkthdr.csum_flags & CSUM_SCTP) { struct ip *ip = mtod(m, struct ip *); @@ -621,7 +621,7 @@ ipsec6_common_output(struct mbuf *m, struct inpcb *inp sizeof(struct ip6_hdr), sizeof(struct ip6_hdr)); m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6; } -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) if (m->m_pkthdr.csum_flags & CSUM_SCTP_IPV6) { sctp_delayed_cksum(m, sizeof(struct ip6_hdr)); m->m_pkthdr.csum_flags &= ~CSUM_SCTP_IPV6; Modified: stable/12/sys/netpfil/pf/pf.c ============================================================================== --- stable/12/sys/netpfil/pf/pf.c Mon Jul 6 13:54:44 2020 (r362960) +++ stable/12/sys/netpfil/pf/pf.c Mon Jul 6 14:00:20 2020 (r362961) @@ -40,9 +40,9 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_bpf.h" #include "opt_inet.h" #include "opt_inet6.h" -#include "opt_bpf.h" #include "opt_pf.h" #include "opt_sctp.h" @@ -104,7 +104,7 @@ __FBSDID("$FreeBSD$"); #include #endif /* INET6 */ -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) #include #endif @@ -5592,7 +5592,7 @@ pf_route(struct mbuf **m, struct pf_rule *r, int dir, in_delayed_cksum(m0); m0->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA; } -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) if (m0->m_pkthdr.csum_flags & CSUM_SCTP & ~ifp->if_hwassist) { sctp_delayed_cksum(m0, (uint32_t)(ip->ip_hl << 2)); m0->m_pkthdr.csum_flags &= ~CSUM_SCTP; From owner-svn-src-all@freebsd.org Mon Jul 6 14:52:10 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 95245369DA5; Mon, 6 Jul 2020 14:52:10 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0pSV3QGlz48sh; Mon, 6 Jul 2020 14:52:10 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 599871FDB0; Mon, 6 Jul 2020 14:52:10 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066EqAC7025537; Mon, 6 Jul 2020 14:52:10 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066EqAap025536; Mon, 6 Jul 2020 14:52:10 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007061452.066EqAap025536@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Mon, 6 Jul 2020 14:52:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362962 - head/sys/net X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: head/sys/net X-SVN-Commit-Revision: 362962 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 14:52:10 -0000 Author: markj Date: Mon Jul 6 14:52:09 2020 New Revision: 362962 URL: https://svnweb.freebsd.org/changeset/base/362962 Log: iflib: Fix handling of mbuf cluster allocation failures. When refilling an rx freelist, make sure we only update the hardware producer index if at least one cluster was allocated. Otherwise the NIC is programmed to write a previously used cluster, typically resulting in a use-after-free when packet data is written by the hardware. Also make sure that we don't update the fragment index cursor if the last allocation attempt didn't succeed. For at least Intel drivers, iflib assumes that the consumer index and fragment index cursor stay in lockstep, but this assumption was violated in the face of cluster allocation failures. Reported and tested by: pho Reviewed by: gallatin, hselasky MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D25489 Modified: head/sys/net/iflib.c Modified: head/sys/net/iflib.c ============================================================================== --- head/sys/net/iflib.c Mon Jul 6 14:00:20 2020 (r362961) +++ head/sys/net/iflib.c Mon Jul 6 14:52:09 2020 (r362962) @@ -1975,7 +1975,8 @@ _iflib_fl_refill(if_ctx_t ctx, iflib_fl_t fl, int coun bit_ffc(fl->ifl_rx_bitmap, fl->ifl_size, &frag_idx); MPASS(frag_idx >= 0); if ((cl = sd_cl[frag_idx]) == NULL) { - if ((cl = m_cljget(NULL, M_NOWAIT, fl->ifl_buf_size)) == NULL) + cl = m_cljget(NULL, M_NOWAIT, fl->ifl_buf_size); + if (__predict_false(cl == NULL)) break; cb_arg.error = 0; @@ -1983,12 +1984,8 @@ _iflib_fl_refill(if_ctx_t ctx, iflib_fl_t fl, int coun err = bus_dmamap_load(fl->ifl_buf_tag, sd_map[frag_idx], cl, fl->ifl_buf_size, _rxq_refill_cb, &cb_arg, BUS_DMA_NOWAIT); - if (err != 0 || cb_arg.error) { - /* - * !zone_pack ? - */ - if (fl->ifl_zone == zone_pack) - uma_zfree(fl->ifl_zone, cl); + if (__predict_false(err != 0 || cb_arg.error)) { + uma_zfree(fl->ifl_zone, cl); break; } @@ -2004,9 +2001,9 @@ _iflib_fl_refill(if_ctx_t ctx, iflib_fl_t fl, int coun BUS_DMASYNC_PREREAD); if (sd_m[frag_idx] == NULL) { - if ((m = m_gethdr(M_NOWAIT, MT_NOINIT)) == NULL) { + m = m_gethdr(M_NOWAIT, MT_NOINIT); + if (__predict_false(m == NULL)) break; - } sd_m[frag_idx] = m; } bit_set(fl->ifl_rx_bitmap, frag_idx); @@ -2036,25 +2033,32 @@ _iflib_fl_refill(if_ctx_t ctx, iflib_fl_t fl, int coun } } - if (i) { - iru.iru_pidx = pidx; - iru.iru_count = i; - ctx->isc_rxd_refill(ctx->ifc_softc, &iru); - fl->ifl_pidx = idx; - fl->ifl_credits = credits; - } - DBG_COUNTER_INC(rxd_flush); - if (fl->ifl_pidx == 0) - pidx = fl->ifl_size - 1; - else - pidx = fl->ifl_pidx - 1; + if (n < count - 1) { + if (i != 0) { + iru.iru_pidx = pidx; + iru.iru_count = i; + ctx->isc_rxd_refill(ctx->ifc_softc, &iru); + fl->ifl_pidx = idx; + fl->ifl_credits = credits; + } + DBG_COUNTER_INC(rxd_flush); + if (fl->ifl_pidx == 0) + pidx = fl->ifl_size - 1; + else + pidx = fl->ifl_pidx - 1; - bus_dmamap_sync(fl->ifl_ifdi->idi_tag, fl->ifl_ifdi->idi_map, - BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); - ctx->isc_rxd_flush(ctx->ifc_softc, fl->ifl_rxq->ifr_id, fl->ifl_id, pidx); - fl->ifl_fragidx = frag_idx + 1; - if (fl->ifl_fragidx == fl->ifl_size) - fl->ifl_fragidx = 0; + bus_dmamap_sync(fl->ifl_ifdi->idi_tag, fl->ifl_ifdi->idi_map, + BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); + ctx->isc_rxd_flush(ctx->ifc_softc, fl->ifl_rxq->ifr_id, + fl->ifl_id, pidx); + if (__predict_true(bit_test(fl->ifl_rx_bitmap, frag_idx))) { + fl->ifl_fragidx = frag_idx + 1; + if (fl->ifl_fragidx == fl->ifl_size) + fl->ifl_fragidx = 0; + } else { + fl->ifl_fragidx = frag_idx; + } + } return (n == -1 ? 0 : IFLIB_RXEOF_EMPTY); } From owner-svn-src-all@freebsd.org Mon Jul 6 14:52:22 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id F3601369DAB; Mon, 6 Jul 2020 14:52:22 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0pSk5sstz492F; Mon, 6 Jul 2020 14:52:22 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8FB6E1FD2B; Mon, 6 Jul 2020 14:52:22 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066EqMES025589; Mon, 6 Jul 2020 14:52:22 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066EqMhb025587; Mon, 6 Jul 2020 14:52:22 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007061452.066EqMhb025587@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Mon, 6 Jul 2020 14:52:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362963 - head/sys/net X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: head/sys/net X-SVN-Commit-Revision: 362963 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 14:52:23 -0000 Author: markj Date: Mon Jul 6 14:52:21 2020 New Revision: 362963 URL: https://svnweb.freebsd.org/changeset/base/362963 Log: iflib: Fix some nits in the rx refill code. - Get rid of the ifl_vm_addrs array. It is not used by any existing consumer, so we are just dirtying a couple of cache lines for no reason. - Use uma_zalloc(fl->ifl_zone) instead of m_cljget(). Otherwise m_cljget() is doing unnecessary work to look up the correct zone, when iflib already knows what that zone is. - ifl_gen is only used when INVARIANTS is on, so make that more clear. - Fix some style nits and inconsistencies. Reviewed by: gallatin Tested by: pho MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D25490 Modified: head/sys/net/iflib.c head/sys/net/iflib.h Modified: head/sys/net/iflib.c ============================================================================== --- head/sys/net/iflib.c Mon Jul 6 14:52:09 2020 (r362962) +++ head/sys/net/iflib.c Mon Jul 6 14:52:21 2020 (r362963) @@ -206,8 +206,6 @@ struct iflib_ctx { #define isc_rxd_pkt_get ifc_txrx.ift_rxd_pkt_get #define isc_rxd_refill ifc_txrx.ift_rxd_refill #define isc_rxd_flush ifc_txrx.ift_rxd_flush -#define isc_rxd_refill ifc_txrx.ift_rxd_refill -#define isc_rxd_refill ifc_txrx.ift_rxd_refill #define isc_legacy_intr ifc_txrx.ift_legacy_intr eventhandler_tag ifc_vlan_attach_event; eventhandler_tag ifc_vlan_detach_event; @@ -392,8 +390,7 @@ struct iflib_fl { bus_dma_tag_t ifl_buf_tag; iflib_dma_info_t ifl_ifdi; uint64_t ifl_bus_addrs[IFLIB_MAX_RX_REFRESH] __aligned(CACHE_LINE_SIZE); - caddr_t ifl_vm_addrs[IFLIB_MAX_RX_REFRESH]; - qidx_t ifl_rxd_idxs[IFLIB_MAX_RX_REFRESH]; + qidx_t ifl_rxd_idxs[IFLIB_MAX_RX_REFRESH]; } __aligned(CACHE_LINE_SIZE); static inline qidx_t @@ -854,7 +851,6 @@ netmap_fl_refill(iflib_rxq_t rxq, struct netmap_kring if (addr == NETMAP_BUF_BASE(na)) /* bad buf */ return netmap_ring_reinit(kring); - fl->ifl_vm_addrs[tmp_pidx] = addr; if (__predict_false(init)) { netmap_load_map(na, fl->ifl_buf_tag, map[nic_i], addr); @@ -1295,7 +1291,6 @@ iru_init(if_rxd_update_t iru, iflib_rxq_t rxq, uint8_t fl = &rxq->ifr_fl[flid]; iru->iru_paddrs = fl->ifl_bus_addrs; - iru->iru_vaddrs = &fl->ifl_vm_addrs[0]; iru->iru_idxs = fl->ifl_rxd_idxs; iru->iru_qsidx = rxq->ifr_id; iru->iru_buf_size = fl->ifl_buf_size; @@ -1916,7 +1911,7 @@ _rxq_refill_cb(void *arg, bus_dma_segment_t *segs, int } /** - * _iflib_fl_refill - refill an rxq free-buffer list + * iflib_fl_refill - refill an rxq free-buffer list * @ctx: the iflib context * @fl: the free list to refill * @count: the number of new buffers to allocate @@ -1925,7 +1920,7 @@ _rxq_refill_cb(void *arg, bus_dma_segment_t *segs, int * The caller must assure that @count does not exceed the queue's capacity. */ static uint8_t -_iflib_fl_refill(if_ctx_t ctx, iflib_fl_t fl, int count) +iflib_fl_refill(if_ctx_t ctx, iflib_fl_t fl, int count) { struct if_rxd_update iru; struct rxq_refill_cb_arg cb_arg; @@ -1962,12 +1957,13 @@ _iflib_fl_refill(if_ctx_t ctx, iflib_fl_t fl, int coun if (n > 8) DBG_COUNTER_INC(fl_refills_large); iru_init(&iru, fl->ifl_rxq, fl->ifl_id); - while (n--) { + while (n-- > 0) { /* * We allocate an uninitialized mbuf + cluster, mbuf is * initialized after rx. * - * If the cluster is still set then we know a minimum sized packet was received + * If the cluster is still set then we know a minimum sized + * packet was received */ bit_ffc_at(fl->ifl_rx_bitmap, frag_idx, fl->ifl_size, &frag_idx); @@ -1975,7 +1971,7 @@ _iflib_fl_refill(if_ctx_t ctx, iflib_fl_t fl, int coun bit_ffc(fl->ifl_rx_bitmap, fl->ifl_size, &frag_idx); MPASS(frag_idx >= 0); if ((cl = sd_cl[frag_idx]) == NULL) { - cl = m_cljget(NULL, M_NOWAIT, fl->ifl_buf_size); + cl = uma_zalloc(fl->ifl_zone, M_NOWAIT); if (__predict_false(cl == NULL)) break; @@ -1989,7 +1985,7 @@ _iflib_fl_refill(if_ctx_t ctx, iflib_fl_t fl, int coun break; } - sd_ba[frag_idx] = bus_addr = cb_arg.seg.ds_addr; + sd_ba[frag_idx] = bus_addr = cb_arg.seg.ds_addr; sd_cl[frag_idx] = cl; #if MEMORY_LOGGING fl->ifl_cl_enqueued++; @@ -2014,22 +2010,23 @@ _iflib_fl_refill(if_ctx_t ctx, iflib_fl_t fl, int coun DBG_COUNTER_INC(rx_allocs); fl->ifl_rxd_idxs[i] = frag_idx; fl->ifl_bus_addrs[i] = bus_addr; - fl->ifl_vm_addrs[i] = cl; credits++; i++; MPASS(credits <= fl->ifl_size); if (++idx == fl->ifl_size) { +#ifdef INVARIANTS fl->ifl_gen = 1; +#endif idx = 0; } if (n == 0 || i == IFLIB_MAX_RX_REFRESH) { iru.iru_pidx = pidx; iru.iru_count = i; ctx->isc_rxd_refill(ctx->ifc_softc, &iru); - i = 0; - pidx = idx; fl->ifl_pidx = idx; fl->ifl_credits = credits; + pidx = idx; + i = 0; } } @@ -2063,8 +2060,8 @@ _iflib_fl_refill(if_ctx_t ctx, iflib_fl_t fl, int coun return (n == -1 ? 0 : IFLIB_RXEOF_EMPTY); } -static __inline uint8_t -__iflib_fl_refill_all(if_ctx_t ctx, iflib_fl_t fl) +static inline uint8_t +iflib_fl_refill_all(if_ctx_t ctx, iflib_fl_t fl) { /* we avoid allowing pidx to catch up with cidx as it confuses ixl */ int32_t reclaimable = fl->ifl_size - fl->ifl_credits - 1; @@ -2076,7 +2073,7 @@ __iflib_fl_refill_all(if_ctx_t ctx, iflib_fl_t fl) MPASS(reclaimable == delta); if (reclaimable > 0) - return (_iflib_fl_refill(ctx, fl, reclaimable)); + return (iflib_fl_refill(ctx, fl, reclaimable)); return (0); } @@ -2107,22 +2104,20 @@ iflib_fl_bufs_free(iflib_fl_t fl) bus_dmamap_sync(fl->ifl_buf_tag, sd_map, BUS_DMASYNC_POSTREAD); bus_dmamap_unload(fl->ifl_buf_tag, sd_map); - if (*sd_cl != NULL) - uma_zfree(fl->ifl_zone, *sd_cl); + uma_zfree(fl->ifl_zone, *sd_cl); + *sd_cl = NULL; if (*sd_m != NULL) { m_init(*sd_m, M_NOWAIT, MT_DATA, 0); uma_zfree(zone_mbuf, *sd_m); + *sd_m = NULL; } } else { - MPASS(*sd_cl == NULL); MPASS(*sd_m == NULL); } #if MEMORY_LOGGING fl->ifl_m_dequeued++; fl->ifl_cl_dequeued++; #endif - *sd_cl = NULL; - *sd_m = NULL; } #ifdef INVARIANTS for (i = 0; i < fl->ifl_size; i++) { @@ -2176,7 +2171,7 @@ iflib_fl_setup(iflib_fl_t fl) /* avoid pre-allocating zillions of clusters to an idle card * potentially speeding up attach */ - (void) _iflib_fl_refill(ctx, fl, min(128, fl->ifl_size)); + (void)iflib_fl_refill(ctx, fl, min(128, fl->ifl_size)); MPASS(min(128, fl->ifl_size) == fl->ifl_credits); if (min(128, fl->ifl_size) != fl->ifl_credits) return (ENOBUFS); @@ -2791,7 +2786,7 @@ iflib_rxeof(iflib_rxq_t rxq, qidx_t budget) cidxp = &rxq->ifr_fl[0].ifl_cidx; if ((avail = iflib_rxd_avail(ctx, rxq, *cidxp, budget)) == 0) { for (i = 0, fl = &rxq->ifr_fl[0]; i < sctx->isc_nfl; i++, fl++) - retval |= __iflib_fl_refill_all(ctx, fl); + retval |= iflib_fl_refill_all(ctx, fl); DBG_COUNTER_INC(rx_unavail); return (retval); } @@ -2851,7 +2846,7 @@ iflib_rxeof(iflib_rxq_t rxq, qidx_t budget) CURVNET_RESTORE(); /* make sure that we can refill faster than drain */ for (i = 0, fl = &rxq->ifr_fl[0]; i < sctx->isc_nfl; i++, fl++) - retval |= __iflib_fl_refill_all(ctx, fl); + retval |= iflib_fl_refill_all(ctx, fl); lro_enabled = (if_getcapenable(ifp) & IFCAP_LRO); if (lro_enabled) Modified: head/sys/net/iflib.h ============================================================================== --- head/sys/net/iflib.h Mon Jul 6 14:52:09 2020 (r362962) +++ head/sys/net/iflib.h Mon Jul 6 14:52:21 2020 (r362963) @@ -95,7 +95,6 @@ typedef struct if_rxd_info { typedef struct if_rxd_update { uint64_t *iru_paddrs; - caddr_t *iru_vaddrs; qidx_t *iru_idxs; qidx_t iru_pidx; uint16_t iru_qsidx; From owner-svn-src-all@freebsd.org Mon Jul 6 15:00:29 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8CF0D36A115; Mon, 6 Jul 2020 15:00:29 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0pf536X1z49Sg; Mon, 6 Jul 2020 15:00:29 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4F4751FE29; Mon, 6 Jul 2020 15:00:29 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066F0Ttb027051; Mon, 6 Jul 2020 15:00:29 GMT (envelope-from mhorne@FreeBSD.org) Received: (from mhorne@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066F0Tjs027050; Mon, 6 Jul 2020 15:00:29 GMT (envelope-from mhorne@FreeBSD.org) Message-Id: <202007061500.066F0Tjs027050@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mhorne set sender to mhorne@FreeBSD.org using -f From: Mitchell Horne Date: Mon, 6 Jul 2020 15:00:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r362964 - stable/12/lib/libc/riscv X-SVN-Group: stable-12 X-SVN-Commit-Author: mhorne X-SVN-Commit-Paths: stable/12/lib/libc/riscv X-SVN-Commit-Revision: 362964 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 15:00:29 -0000 Author: mhorne Date: Mon Jul 6 15:00:28 2020 New Revision: 362964 URL: https://svnweb.freebsd.org/changeset/base/362964 Log: MFC r362788: Fix printf(3) output of long doubles on RISC-V PR: 242067 Modified: stable/12/lib/libc/riscv/_fpmath.h Modified: stable/12/lib/libc/riscv/_fpmath.h ============================================================================== --- stable/12/lib/libc/riscv/_fpmath.h Mon Jul 6 14:52:21 2020 (r362963) +++ stable/12/lib/libc/riscv/_fpmath.h Mon Jul 6 15:00:28 2020 (r362964) @@ -46,19 +46,6 @@ union IEEEl2bits { #define LDBL_IMPLICIT_NBIT #define mask_nbit_l(u) ((void)0) -#define LDBL_MANH_SIZE 20 -#define LDBL_MANL_SIZE 32 - -#define LDBL_TO_ARRAY32(u, a) do { \ - (a)[0] = (uint32_t)(u).bits.manl; \ - (a)[1] = (uint32_t)(u).bits.manh; \ -} while(0) - -/* - * TODO: Due to compiler problem we are temporary using - * LDBL_PREC == 53. Use code below for LDBL_PREC == 113 - */ -#if 0 #define LDBL_MANH_SIZE 48 #define LDBL_MANL_SIZE 64 @@ -68,4 +55,3 @@ union IEEEl2bits { (a)[2] = (uint32_t)(u).bits.manh; \ (a)[3] = (uint32_t)((u).bits.manh >> 32); \ } while(0) -#endif From owner-svn-src-all@freebsd.org Mon Jul 6 15:15:38 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5A44036A498; Mon, 6 Jul 2020 15:15:38 +0000 (UTC) (envelope-from bdragon@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0pzZ1hKkz4B78; Mon, 6 Jul 2020 15:15:38 +0000 (UTC) (envelope-from bdragon@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1917820594; Mon, 6 Jul 2020 15:15:38 +0000 (UTC) (envelope-from bdragon@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066FFboZ038472; Mon, 6 Jul 2020 15:15:37 GMT (envelope-from bdragon@FreeBSD.org) Received: (from bdragon@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066FFb8D038471; Mon, 6 Jul 2020 15:15:37 GMT (envelope-from bdragon@FreeBSD.org) Message-Id: <202007061515.066FFb8D038471@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bdragon set sender to bdragon@FreeBSD.org using -f From: Brandon Bergren Date: Mon, 6 Jul 2020 15:15:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362965 - head/sys/powerpc/powernv X-SVN-Group: head X-SVN-Commit-Author: bdragon X-SVN-Commit-Paths: head/sys/powerpc/powernv X-SVN-Commit-Revision: 362965 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 15:15:38 -0000 Author: bdragon Date: Mon Jul 6 15:15:37 2020 New Revision: 362965 URL: https://svnweb.freebsd.org/changeset/base/362965 Log: [PowerPC] XIVE dispatch tweaks * Only read the DPCPU pointer once per xive_dispatch call. * Optimize HE decoding for the common cases. Reported by: jhibbits (in irc) Reviewed by: jhibbits Sponsored by: Tag1 Consulting, Inc. Differential Revision: https://reviews.freebsd.org/D25545 Modified: head/sys/powerpc/powernv/xive.c Modified: head/sys/powerpc/powernv/xive.c ============================================================================== --- head/sys/powerpc/powernv/xive.c Mon Jul 6 15:00:28 2020 (r362964) +++ head/sys/powerpc/powernv/xive.c Mon Jul 6 15:15:37 2020 (r362965) @@ -507,6 +507,7 @@ xive_dispatch(device_t dev, struct trapframe *tf) sc = device_get_softc(dev); + xive_cpud = DPCPU_PTR(xive_cpu_data); for (;;) { ack = xive_read_2(sc, XIVE_TM_SPC_ACK); cppr = (ack & 0xff); @@ -515,19 +516,17 @@ xive_dispatch(device_t dev, struct trapframe *tf) if (he == TM_QW3_NSR_HE_NONE) break; - switch (he) { - case TM_QW3_NSR_HE_NONE: - goto end; - case TM_QW3_NSR_HE_POOL: - case TM_QW3_NSR_HE_LSI: + + else if (__predict_false(he != TM_QW3_NSR_HE_PHYS)) { + /* + * We don't support TM_QW3_NSR_HE_POOL or + * TM_QW3_NSR_HE_LSI interrupts. + */ device_printf(dev, "Unexpected interrupt he type: %d\n", he); goto end; - case TM_QW3_NSR_HE_PHYS: - break; } - xive_cpud = DPCPU_PTR(xive_cpu_data); xive_write_1(sc, XIVE_TM_CPPR, cppr); for (;;) { From owner-svn-src-all@freebsd.org Mon Jul 6 16:33:21 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C306636BA8B; Mon, 6 Jul 2020 16:33:21 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0rjF4VWvz4GBb; Mon, 6 Jul 2020 16:33:21 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7DA81212A7; Mon, 6 Jul 2020 16:33:21 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066GXLHp087145; Mon, 6 Jul 2020 16:33:21 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066GXLDd087144; Mon, 6 Jul 2020 16:33:21 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007061633.066GXLDd087144@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Mon, 6 Jul 2020 16:33:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362966 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 362966 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 16:33:21 -0000 Author: markj Date: Mon Jul 6 16:33:21 2020 New Revision: 362966 URL: https://svnweb.freebsd.org/changeset/base/362966 Log: Lift cpuset Capsicum checks into a subroutine. Otherwise the same checks are duplicated across four different system call implementations, cpuset_(get|set)(affinity|domain)(). No functional change intended. MFC after: 1 week Sponsored by: The FreeBSD Foundation Modified: head/sys/kern/kern_cpuset.c Modified: head/sys/kern/kern_cpuset.c ============================================================================== --- head/sys/kern/kern_cpuset.c Mon Jul 6 15:15:37 2020 (r362965) +++ head/sys/kern/kern_cpuset.c Mon Jul 6 16:33:21 2020 (r362966) @@ -1582,6 +1582,25 @@ cpuset_setproc_update_set(struct proc *p, struct cpuse return (0); } +/* + * In Capability mode, the only accesses that are permitted are to the current + * thread and process' CPU and domain sets. + */ +static int +cpuset_check_capabilities(struct thread *td, cpulevel_t level, cpuwhich_t which, + id_t id) +{ + if (IN_CAPABILITY_MODE(td)) { + if (level != CPU_LEVEL_WHICH) + return (ECAPMODE); + if (which != CPU_WHICH_TID && which != CPU_WHICH_PID) + return (ECAPMODE); + if (id != -1) + return (ECAPMODE); + } + return (0); +} + #ifndef _SYS_SYSPROTO_H_ struct cpuset_args { cpusetid_t *setid; @@ -1739,15 +1758,9 @@ kern_cpuset_getaffinity(struct thread *td, cpulevel_t if (cpusetsize < sizeof(cpuset_t) || cpusetsize > CPU_MAXSIZE / NBBY) return (ERANGE); - /* In Capability mode, you can only get your own CPU set. */ - if (IN_CAPABILITY_MODE(td)) { - if (level != CPU_LEVEL_WHICH) - return (ECAPMODE); - if (which != CPU_WHICH_TID && which != CPU_WHICH_PID) - return (ECAPMODE); - if (id != -1) - return (ECAPMODE); - } + error = cpuset_check_capabilities(td, level, which, id); + if (error != 0) + return (error); size = cpusetsize; mask = malloc(size, M_TEMP, M_WAITOK | M_ZERO); error = cpuset_which(which, id, &p, &ttd, &set); @@ -1856,15 +1869,9 @@ kern_cpuset_setaffinity(struct thread *td, cpulevel_t if (cpusetsize < sizeof(cpuset_t) || cpusetsize > CPU_MAXSIZE / NBBY) return (ERANGE); - /* In Capability mode, you can only set your own CPU set. */ - if (IN_CAPABILITY_MODE(td)) { - if (level != CPU_LEVEL_WHICH) - return (ECAPMODE); - if (which != CPU_WHICH_TID && which != CPU_WHICH_PID) - return (ECAPMODE); - if (id != -1) - return (ECAPMODE); - } + error = cpuset_check_capabilities(td, level, which, id); + if (error != 0) + return (error); mask = malloc(cpusetsize, M_TEMP, M_WAITOK | M_ZERO); error = copyin(maskp, mask, cpusetsize); if (error) @@ -1987,15 +1994,9 @@ kern_cpuset_getdomain(struct thread *td, cpulevel_t le if (domainsetsize < sizeof(domainset_t) || domainsetsize > DOMAINSET_MAXSIZE / NBBY) return (ERANGE); - /* In Capability mode, you can only get your own domain set. */ - if (IN_CAPABILITY_MODE(td)) { - if (level != CPU_LEVEL_WHICH) - return (ECAPMODE); - if (which != CPU_WHICH_TID && which != CPU_WHICH_PID) - return (ECAPMODE); - if (id != -1) - return (ECAPMODE); - } + error = cpuset_check_capabilities(td, level, which, id); + if (error != 0) + return (error); mask = malloc(domainsetsize, M_TEMP, M_WAITOK | M_ZERO); bzero(&outset, sizeof(outset)); error = cpuset_which(which, id, &p, &ttd, &set); @@ -2122,15 +2123,9 @@ kern_cpuset_setdomain(struct thread *td, cpulevel_t le if (policy <= DOMAINSET_POLICY_INVALID || policy > DOMAINSET_POLICY_MAX) return (EINVAL); - /* In Capability mode, you can only set your own CPU set. */ - if (IN_CAPABILITY_MODE(td)) { - if (level != CPU_LEVEL_WHICH) - return (ECAPMODE); - if (which != CPU_WHICH_TID && which != CPU_WHICH_PID) - return (ECAPMODE); - if (id != -1) - return (ECAPMODE); - } + error = cpuset_check_capabilities(td, level, which, id); + if (error != 0) + return (error); memset(&domain, 0, sizeof(domain)); mask = malloc(domainsetsize, M_TEMP, M_WAITOK | M_ZERO); error = copyin(maskp, mask, domainsetsize); From owner-svn-src-all@freebsd.org Mon Jul 6 16:33:32 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 844B436BB03; Mon, 6 Jul 2020 16:33:32 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0rjR10QTz4G1n; Mon, 6 Jul 2020 16:33:30 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B9B9C213AB; Mon, 6 Jul 2020 16:33:29 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066GXTC4087198; Mon, 6 Jul 2020 16:33:29 GMT (envelope-from kaktus@FreeBSD.org) Received: (from kaktus@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066GXTY9087195; Mon, 6 Jul 2020 16:33:29 GMT (envelope-from kaktus@FreeBSD.org) Message-Id: <202007061633.066GXTY9087195@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kaktus set sender to kaktus@FreeBSD.org using -f From: Pawel Biernacki Date: Mon, 6 Jul 2020 16:33:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362967 - in head/sys: kern sys X-SVN-Group: head X-SVN-Commit-Author: kaktus X-SVN-Commit-Paths: in head/sys: kern sys X-SVN-Commit-Revision: 362967 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 16:33:32 -0000 Author: kaktus Date: Mon Jul 6 16:33:28 2020 New Revision: 362967 URL: https://svnweb.freebsd.org/changeset/base/362967 Log: kern.tty_info_kstacks: add a compact format Add a more compact display format for kern.tty_info_kstacks inspired by procstat -kk. Set it as a default one. # sysctl kern.tty_info_kstacks=1 kern.tty_info_kstacks: 0 -> 1 # sleep 2 ^T load: 0.17 cmd: sleep 623 [nanslp] 0.72r 0.00u 0.00s 0% 2124k #0 0xffffffff80c4443e at mi_switch+0xbe #1 0xffffffff80c98044 at sleepq_catch_signals+0x494 #2 0xffffffff80c982c2 at sleepq_timedwait_sig+0x12 #3 0xffffffff80c43af3 at _sleep+0x193 #4 0xffffffff80c50e31 at kern_clock_nanosleep+0x1a1 #5 0xffffffff80c5119b at sys_nanosleep+0x3b #6 0xffffffff810ffc69 at amd64_syscall+0x119 #7 0xffffffff810d5520 at fast_syscall_common+0x101 sleep: about 1 second(s) left out of the original 2 ^C # sysctl kern.tty_info_kstacks=2 kern.tty_info_kstacks: 1 -> 2 # sleep 2 ^T load: 0.24 cmd: sleep 625 [nanslp] 0.81r 0.00u 0.00s 0% 2124k mi_switch+0xbe sleepq_catch_signals+0x494 sleepq_timedwait_sig+0x12 sleep+0x193 kern_clock_nanosleep+0x1a1 sys_nanosleep+0x3b amd64_syscall+0x119 fast_syscall_common+0x101 sleep: about 1 second(s) left out of the original 2 ^C Suggested by: avg Reviewed by: mjg Relnotes: yes Sponsored by: Mysterious Code Ltd. Differential Revision: https://reviews.freebsd.org/D25487 Modified: head/sys/kern/subr_stack.c head/sys/kern/tty_info.c head/sys/sys/stack.h Modified: head/sys/kern/subr_stack.c ============================================================================== --- head/sys/kern/subr_stack.c Mon Jul 6 16:33:21 2020 (r362966) +++ head/sys/kern/subr_stack.c Mon Jul 6 16:33:28 2020 (r362967) @@ -170,7 +170,8 @@ stack_print_short_ddb(const struct stack *st) * flags - M_WAITOK or M_NOWAIT (EWOULDBLOCK). */ int -stack_sbuf_print_flags(struct sbuf *sb, const struct stack *st, int flags) +stack_sbuf_print_flags(struct sbuf *sb, const struct stack *st, int flags, + enum stack_sbuf_fmt format) { char namebuf[64]; long offset; @@ -182,9 +183,19 @@ stack_sbuf_print_flags(struct sbuf *sb, const struct s &offset, flags); if (error == EWOULDBLOCK) return (error); - sbuf_printf(sb, "#%d %p at %s+%#lx\n", i, (void *)st->pcs[i], - namebuf, offset); + switch (format) { + case STACK_SBUF_FMT_LONG: + sbuf_printf(sb, "#%d %p at %s+%#lx\n", i, + (void *)st->pcs[i], namebuf, offset); + break; + case STACK_SBUF_FMT_COMPACT: + sbuf_printf(sb, "%s+%#lx ", namebuf, offset); + break; + default: + __assert_unreachable(); + } } + sbuf_nl_terminate(sb); return (0); } @@ -192,7 +203,7 @@ void stack_sbuf_print(struct sbuf *sb, const struct stack *st) { - (void)stack_sbuf_print_flags(sb, st, M_WAITOK); + (void)stack_sbuf_print_flags(sb, st, M_WAITOK, STACK_SBUF_FMT_LONG); } #if defined(DDB) || defined(WITNESS) Modified: head/sys/kern/tty_info.c ============================================================================== --- head/sys/kern/tty_info.c Mon Jul 6 16:33:21 2020 (r362966) +++ head/sys/kern/tty_info.c Mon Jul 6 16:33:28 2020 (r362967) @@ -239,10 +239,36 @@ sbuf_tty_drain(void *a, const char *d, int len) } #ifdef STACK -static bool tty_info_kstacks = true; -SYSCTL_BOOL(_kern, OID_AUTO, tty_info_kstacks, CTLFLAG_RWTUN, - &tty_info_kstacks, 0, - "Enable printing kernel stack(9) traces on ^T (tty info)"); +static int tty_info_kstacks = STACK_SBUF_FMT_LONG; + +static int +sysctl_tty_info_kstacks(SYSCTL_HANDLER_ARGS) +{ + enum stack_sbuf_fmt val; + int error; + + val = tty_info_kstacks; + error = sysctl_handle_int(oidp, &val, 0, req); + if (error != 0 || req->newptr == NULL) + return (error); + + switch (val) { + case STACK_SBUF_FMT_NONE: + case STACK_SBUF_FMT_LONG: + case STACK_SBUF_FMT_COMPACT: + tty_info_kstacks = val; + break; + default: + error = EINVAL; + } + + return (error); +} +SYSCTL_PROC(_kern, OID_AUTO, tty_info_kstacks, + CTLFLAG_RWTUN | CTLFLAG_MPSAFE | CTLTYPE_INT, NULL, 0, + sysctl_tty_info_kstacks, "I", + "Adjust format of kernel stack(9) traces on ^T (tty info): " + "0 - disabled; 1 - long; 2 - compact"); #endif /* @@ -254,7 +280,8 @@ tty_info(struct tty *tp) struct timeval rtime, utime, stime; #ifdef STACK struct stack stack; - int sterr; + int sterr, kstacks_val; + bool print_kstacks; #endif struct proc *p, *ppick; struct thread *td, *tdpick; @@ -337,7 +364,10 @@ tty_info(struct tty *tp) state = "unknown"; pctcpu = (sched_pctcpu(td) * 10000 + FSCALE / 2) >> FSHIFT; #ifdef STACK - if (tty_info_kstacks) { + kstacks_val = atomic_load_int(&tty_info_kstacks); + print_kstacks = (kstacks_val != STACK_SBUF_FMT_NONE); + + if (print_kstacks) { if (TD_IS_SWAPPED(td)) sterr = ENOENT; else @@ -366,8 +396,8 @@ tty_info(struct tty *tp) pctcpu / 100, rss); #ifdef STACK - if (tty_info_kstacks && sterr == 0) - stack_sbuf_print_flags(&sb, &stack, M_NOWAIT); + if (print_kstacks && sterr == 0) + stack_sbuf_print_flags(&sb, &stack, M_NOWAIT, kstacks_val); #endif out: Modified: head/sys/sys/stack.h ============================================================================== --- head/sys/sys/stack.h Mon Jul 6 16:33:21 2020 (r362966) +++ head/sys/sys/stack.h Mon Jul 6 16:33:28 2020 (r362967) @@ -39,6 +39,12 @@ MALLOC_DECLARE(M_STACK); struct sbuf; +enum stack_sbuf_fmt { + STACK_SBUF_FMT_NONE = 0, + STACK_SBUF_FMT_LONG = 1, + STACK_SBUF_FMT_COMPACT = 2, +}; + /* MI Routines. */ struct stack *stack_create(int); void stack_destroy(struct stack *); @@ -52,7 +58,7 @@ void stack_print_short_ddb(const struct stack *); void stack_sbuf_print(struct sbuf *, const struct stack *); void stack_sbuf_print_ddb(struct sbuf *, const struct stack *); int stack_sbuf_print_flags(struct sbuf *, const struct stack *, - int); + int, enum stack_sbuf_fmt); #ifdef KTR void stack_ktr(u_int, const char *, int, const struct stack *, u_int); From owner-svn-src-all@freebsd.org Mon Jul 6 16:34:10 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8C84236BB1A; Mon, 6 Jul 2020 16:34:10 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0rkB2z0Wz4G9T; Mon, 6 Jul 2020 16:34:10 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 49A1921225; Mon, 6 Jul 2020 16:34:10 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066GYANO087275; Mon, 6 Jul 2020 16:34:10 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066GYAGq087274; Mon, 6 Jul 2020 16:34:10 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007061634.066GYAGq087274@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Mon, 6 Jul 2020 16:34:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362968 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 362968 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 16:34:10 -0000 Author: markj Date: Mon Jul 6 16:34:09 2020 New Revision: 362968 URL: https://svnweb.freebsd.org/changeset/base/362968 Log: Allow accesses of the caller's CPU and domain sets in capability mode. cpuset_(get|set)(affinity|domain)(2) permit a get or set of the calling thread or process' CPU and domain set in capability mode, but only when the thread or process ID is specified as -1. Extend this to cover the case where the ID actually matches the caller's TID or PID, since some code, such as our pthread_attr_get_np() implementation, always provides an explicit ID. It was not and still is not permitted to access CPU and domain sets for other threads in the same process when the process is in capability mode. This might change in the future. Submitted by: Greg V (original version) MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D25552 Modified: head/sys/kern/kern_cpuset.c Modified: head/sys/kern/kern_cpuset.c ============================================================================== --- head/sys/kern/kern_cpuset.c Mon Jul 6 16:33:28 2020 (r362967) +++ head/sys/kern/kern_cpuset.c Mon Jul 6 16:34:09 2020 (r362968) @@ -1595,7 +1595,9 @@ cpuset_check_capabilities(struct thread *td, cpulevel_ return (ECAPMODE); if (which != CPU_WHICH_TID && which != CPU_WHICH_PID) return (ECAPMODE); - if (id != -1) + if (id != -1 && + !(which == CPU_WHICH_TID && id == td->td_tid) && + !(which == CPU_WHICH_PID && id == td->td_proc->p_pid)) return (ECAPMODE); } return (0); From owner-svn-src-all@freebsd.org Mon Jul 6 16:34:18 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9C46C36B855; Mon, 6 Jul 2020 16:34:18 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0rkL0VFbz4GRl; Mon, 6 Jul 2020 16:34:17 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6E4B42148D; Mon, 6 Jul 2020 16:34:16 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066GYGNo087326; Mon, 6 Jul 2020 16:34:16 GMT (envelope-from kaktus@FreeBSD.org) Received: (from kaktus@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066GYGOu087325; Mon, 6 Jul 2020 16:34:16 GMT (envelope-from kaktus@FreeBSD.org) Message-Id: <202007061634.066GYGOu087325@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kaktus set sender to kaktus@FreeBSD.org using -f From: Pawel Biernacki Date: Mon, 6 Jul 2020 16:34:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362969 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: kaktus X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 362969 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 16:34:18 -0000 Author: kaktus Date: Mon Jul 6 16:34:15 2020 New Revision: 362969 URL: https://svnweb.freebsd.org/changeset/base/362969 Log: kern.tty_info_kstacks: set compact format as default Modified: head/sys/kern/tty_info.c Modified: head/sys/kern/tty_info.c ============================================================================== --- head/sys/kern/tty_info.c Mon Jul 6 16:34:09 2020 (r362968) +++ head/sys/kern/tty_info.c Mon Jul 6 16:34:15 2020 (r362969) @@ -239,7 +239,7 @@ sbuf_tty_drain(void *a, const char *d, int len) } #ifdef STACK -static int tty_info_kstacks = STACK_SBUF_FMT_LONG; +static int tty_info_kstacks = STACK_SBUF_FMT_COMPACT; static int sysctl_tty_info_kstacks(SYSCTL_HANDLER_ARGS) From owner-svn-src-all@freebsd.org Mon Jul 6 16:34:29 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id BB2AD36B47C; Mon, 6 Jul 2020 16:34:29 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0rkY4dkkz4GVv; Mon, 6 Jul 2020 16:34:29 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 83E30212AB; Mon, 6 Jul 2020 16:34:29 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066GYTPn087376; Mon, 6 Jul 2020 16:34:29 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066GYTvP087375; Mon, 6 Jul 2020 16:34:29 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007061634.066GYTvP087375@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Mon, 6 Jul 2020 16:34:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362970 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 362970 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 16:34:29 -0000 Author: markj Date: Mon Jul 6 16:34:29 2020 New Revision: 362970 URL: https://svnweb.freebsd.org/changeset/base/362970 Log: Permit cpuset_(get|set)domain() in capability mode. These system calls already perform validation of their parameters when called in capability mode, identical to cpuset_(get|set)affinity(). MFC after: 1 week Sponsored by: The FreeBSD Foundation Modified: head/sys/kern/capabilities.conf Modified: head/sys/kern/capabilities.conf ============================================================================== --- head/sys/kern/capabilities.conf Mon Jul 6 16:34:15 2020 (r362969) +++ head/sys/kern/capabilities.conf Mon Jul 6 16:34:29 2020 (r362970) @@ -149,8 +149,10 @@ copy_file_range ## #cpuset cpuset_getaffinity +cpuset_getdomain #cpuset_getid cpuset_setaffinity +cpuset_setdomain #cpuset_setid ## From owner-svn-src-all@freebsd.org Mon Jul 6 16:34:50 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id CA51336BBB3; Mon, 6 Jul 2020 16:34:50 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0rky521Vz4Gl9; Mon, 6 Jul 2020 16:34:50 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 90F98212AF; Mon, 6 Jul 2020 16:34:50 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066GYoSR087438; Mon, 6 Jul 2020 16:34:50 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066GYoNl087436; Mon, 6 Jul 2020 16:34:50 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007061634.066GYoNl087436@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Mon, 6 Jul 2020 16:34:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362971 - in head/sys: compat/freebsd32 kern X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: in head/sys: compat/freebsd32 kern X-SVN-Commit-Revision: 362971 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 16:34:50 -0000 Author: markj Date: Mon Jul 6 16:34:49 2020 New Revision: 362971 URL: https://svnweb.freebsd.org/changeset/base/362971 Log: Regenerate. Sponsored by: The FreeBSD Foundation Modified: head/sys/compat/freebsd32/freebsd32_sysent.c head/sys/kern/init_sysent.c Modified: head/sys/compat/freebsd32/freebsd32_sysent.c ============================================================================== --- head/sys/compat/freebsd32/freebsd32_sysent.c Mon Jul 6 16:34:29 2020 (r362970) +++ head/sys/compat/freebsd32/freebsd32_sysent.c Mon Jul 6 16:34:49 2020 (r362971) @@ -650,8 +650,8 @@ struct sysent freebsd32_sysent[] = { { AS(freebsd32_mknodat_args), (sy_call_t *)freebsd32_mknodat, AUE_MKNODAT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 559 = freebsd32_mknodat */ #endif { AS(freebsd32_kevent_args), (sy_call_t *)freebsd32_kevent, AUE_KEVENT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 560 = freebsd32_kevent */ - { AS(freebsd32_cpuset_getdomain_args), (sy_call_t *)freebsd32_cpuset_getdomain, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 561 = freebsd32_cpuset_getdomain */ - { AS(freebsd32_cpuset_setdomain_args), (sy_call_t *)freebsd32_cpuset_setdomain, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 562 = freebsd32_cpuset_setdomain */ + { AS(freebsd32_cpuset_getdomain_args), (sy_call_t *)freebsd32_cpuset_getdomain, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 561 = freebsd32_cpuset_getdomain */ + { AS(freebsd32_cpuset_setdomain_args), (sy_call_t *)freebsd32_cpuset_setdomain, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 562 = freebsd32_cpuset_setdomain */ { AS(getrandom_args), (sy_call_t *)sys_getrandom, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 563 = getrandom */ { AS(getfhat_args), (sy_call_t *)sys_getfhat, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 564 = getfhat */ { AS(fhlink_args), (sy_call_t *)sys_fhlink, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 565 = fhlink */ Modified: head/sys/kern/init_sysent.c ============================================================================== --- head/sys/kern/init_sysent.c Mon Jul 6 16:34:29 2020 (r362970) +++ head/sys/kern/init_sysent.c Mon Jul 6 16:34:49 2020 (r362971) @@ -616,8 +616,8 @@ struct sysent sysent[] = { { AS(fhstatfs_args), (sy_call_t *)sys_fhstatfs, AUE_FHSTATFS, NULL, 0, 0, 0, SY_THR_STATIC }, /* 558 = fhstatfs */ { AS(mknodat_args), (sy_call_t *)sys_mknodat, AUE_MKNODAT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 559 = mknodat */ { AS(kevent_args), (sy_call_t *)sys_kevent, AUE_KEVENT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 560 = kevent */ - { AS(cpuset_getdomain_args), (sy_call_t *)sys_cpuset_getdomain, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 561 = cpuset_getdomain */ - { AS(cpuset_setdomain_args), (sy_call_t *)sys_cpuset_setdomain, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 562 = cpuset_setdomain */ + { AS(cpuset_getdomain_args), (sy_call_t *)sys_cpuset_getdomain, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 561 = cpuset_getdomain */ + { AS(cpuset_setdomain_args), (sy_call_t *)sys_cpuset_setdomain, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 562 = cpuset_setdomain */ { AS(getrandom_args), (sy_call_t *)sys_getrandom, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 563 = getrandom */ { AS(getfhat_args), (sy_call_t *)sys_getfhat, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 564 = getfhat */ { AS(fhlink_args), (sy_call_t *)sys_fhlink, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 565 = fhlink */ From owner-svn-src-all@freebsd.org Mon Jul 6 17:47:29 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E2EC636CF70; Mon, 6 Jul 2020 17:47:29 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0tLn4k7Hz4L92; Mon, 6 Jul 2020 17:47:29 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8616821D55; Mon, 6 Jul 2020 17:47:29 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066HlTTP031633; Mon, 6 Jul 2020 17:47:29 GMT (envelope-from mhorne@FreeBSD.org) Received: (from mhorne@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066HlTT8031632; Mon, 6 Jul 2020 17:47:29 GMT (envelope-from mhorne@FreeBSD.org) Message-Id: <202007061747.066HlTT8031632@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mhorne set sender to mhorne@FreeBSD.org using -f From: Mitchell Horne Date: Mon, 6 Jul 2020 17:47:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362972 - head/lib/libefivar X-SVN-Group: head X-SVN-Commit-Author: mhorne X-SVN-Commit-Paths: head/lib/libefivar X-SVN-Commit-Revision: 362972 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 17:47:30 -0000 Author: mhorne Date: Mon Jul 6 17:47:29 2020 New Revision: 362972 URL: https://svnweb.freebsd.org/changeset/base/362972 Log: libefivar: define MDE_CPU_RISCV64 The necessary definitions from EDK2 are present, so this allows the library to be built on RISC-V. Modified: head/lib/libefivar/efi-osdep.h Modified: head/lib/libefivar/efi-osdep.h ============================================================================== --- head/lib/libefivar/efi-osdep.h Mon Jul 6 16:34:49 2020 (r362971) +++ head/lib/libefivar/efi-osdep.h Mon Jul 6 17:47:29 2020 (r362972) @@ -104,6 +104,8 @@ typedef void VOID; #define MDE_CPU_ARM #elif defined(__aarch64__) #define MDE_CPU_AARCH64 +#elif defined(__riscv) +#define MDE_CPU_RISCV64 #endif /* FreeBSD doesn't have/use MDE_CPU_EBC or MDE_CPU_IPF (ia64) */ From owner-svn-src-all@freebsd.org Mon Jul 6 18:19:46 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0C79036D659; Mon, 6 Jul 2020 18:19:46 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0v416mQfz4N0v; Mon, 6 Jul 2020 18:19:45 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CABB9227D4; Mon, 6 Jul 2020 18:19:45 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066IJjHX050165; Mon, 6 Jul 2020 18:19:45 GMT (envelope-from mhorne@FreeBSD.org) Received: (from mhorne@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066IJhE0050151; Mon, 6 Jul 2020 18:19:43 GMT (envelope-from mhorne@FreeBSD.org) Message-Id: <202007061819.066IJhE0050151@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mhorne set sender to mhorne@FreeBSD.org using -f From: Mitchell Horne Date: Mon, 6 Jul 2020 18:19:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362973 - in head: share/mk stand stand/common stand/efi/include/riscv stand/efi/libefi stand/efi/loader stand/efi/loader/arch/riscv sys/riscv/include X-SVN-Group: head X-SVN-Commit-Author: mhorne X-SVN-Commit-Paths: in head: share/mk stand stand/common stand/efi/include/riscv stand/efi/libefi stand/efi/loader stand/efi/loader/arch/riscv sys/riscv/include X-SVN-Commit-Revision: 362973 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 18:19:46 -0000 Author: mhorne Date: Mon Jul 6 18:19:42 2020 New Revision: 362973 URL: https://svnweb.freebsd.org/changeset/base/362973 Log: RISC-V boot1.efi and loader.efi support This implementation doesn't have any major deviations from the other EFI ports. I've copied the boilerplate from arm and arm64. I've tested this with the following boot flows: OpenSBI (M-mode) -> u-boot (S-mode) -> loader.efi -> FreeBSD OpenSBI (M-mode) -> u-boot (S-mode) -> boot1.efi -> loader.efi -> FreeBSD Due to the way that u-boot handles secondary CPUs, OpenSBI >= v0.7 is required, as the HSM extension is needed to bring them up explicitly. Because of this, using BBL as the SBI implementation will not be possible. Additionally, there are a few recent u-boot changes that are required as well, all of which will be present in the upcoming v2020.07 release. Looks good: emaste Differential Revision: https://reviews.freebsd.org/D25135 Added: head/stand/efi/include/riscv/ head/stand/efi/include/riscv/efibind.h - copied unchanged from r362787, head/stand/efi/include/arm64/efibind.h head/stand/efi/loader/arch/riscv/ head/stand/efi/loader/arch/riscv/Makefile.inc (contents, props changed) head/stand/efi/loader/arch/riscv/exec.c - copied, changed from r362787, head/stand/efi/loader/arch/arm/exec.c head/stand/efi/loader/arch/riscv/ldscript.riscv (contents, props changed) head/stand/efi/loader/arch/riscv/start.S (contents, props changed) Modified: head/share/mk/src.opts.mk head/stand/common/self_reloc.c head/stand/defs.mk head/stand/efi/libefi/Makefile head/stand/efi/loader/copy.c head/stand/efi/loader/main.c head/stand/loader.mk head/sys/riscv/include/metadata.h Modified: head/share/mk/src.opts.mk ============================================================================== --- head/share/mk/src.opts.mk Mon Jul 6 17:47:29 2020 (r362972) +++ head/share/mk/src.opts.mk Mon Jul 6 18:19:42 2020 (r362973) @@ -318,8 +318,8 @@ BROKEN_OPTIONS+=LIBSOFT # marked no longer broken with the switch to LLVM. BROKEN_OPTIONS+=GOOGLETEST SSP .endif -# EFI doesn't exist on mips, powerpc, or riscv. -.if ${__T:Mmips*} || ${__T:Mpowerpc*} || ${__T:Mriscv*} +# EFI doesn't exist on mips or powerpc. +.if ${__T:Mmips*} || ${__T:Mpowerpc*} BROKEN_OPTIONS+=EFI .endif # OFW is only for powerpc, exclude others Modified: head/stand/common/self_reloc.c ============================================================================== --- head/stand/common/self_reloc.c Mon Jul 6 17:47:29 2020 (r362972) +++ head/stand/common/self_reloc.c Mon Jul 6 18:19:42 2020 (r362973) @@ -31,7 +31,7 @@ __FBSDID("$FreeBSD$"); #include #include -#if defined(__aarch64__) || defined(__amd64__) +#if defined(__aarch64__) || defined(__amd64__) || defined(__riscv) #define ElfW_Rel Elf64_Rela #define ElfW_Dyn Elf64_Dyn #define ELFW_R_TYPE ELF64_R_TYPE @@ -55,6 +55,9 @@ __FBSDID("$FreeBSD$"); #elif defined(__i386__) #define RELOC_TYPE_NONE R_386_NONE #define RELOC_TYPE_RELATIVE R_386_RELATIVE +#elif defined(__riscv) +#define RELOC_TYPE_NONE R_RISCV_NONE +#define RELOC_TYPE_RELATIVE R_RISCV_RELATIVE #endif void self_reloc(Elf_Addr baseaddr, ElfW_Dyn *dynamic); Modified: head/stand/defs.mk ============================================================================== --- head/stand/defs.mk Mon Jul 6 17:47:29 2020 (r362972) +++ head/stand/defs.mk Mon Jul 6 18:19:42 2020 (r362973) @@ -115,13 +115,14 @@ AFLAGS+= --32 SSP_CFLAGS= # Add in the no float / no SIMD stuff and announce we're freestanding -# aarch64 and riscv don't have -msoft-float, but all others do. riscv -# currently has no /boot/loader, but may soon. +# aarch64 and riscv don't have -msoft-float, but all others do. CFLAGS+= -ffreestanding ${CFLAGS_NO_SIMD} .if ${MACHINE_CPUARCH} == "aarch64" CFLAGS+= -mgeneral-regs-only -ffixed-x18 -fPIC .elif ${MACHINE_CPUARCH} == "riscv" -CFLAGS+= -march=rv64imac -mabi=lp64 +CFLAGS+= -march=rv64imac -mabi=lp64 -fPIC +CFLAGS.clang+= -mcmodel=medium +CFLAGS.gcc+= -mcmodel=medany .else CFLAGS+= -msoft-float .endif @@ -146,6 +147,12 @@ CFLAGS+= -fPIC -mno-red-zone CFLAGS.clang+= -mno-movt CFLAGS.clang+= -mfpu=none CFLAGS+= -fPIC +.endif + +# Some RISC-V linkers have support for relaxations, while some (lld) do not +# yet. If this is the case we inhibit the compiler from emitting relaxations. +.if ${LINKER_FEATURES:Mriscv-relaxations} == "" +CFLAGS+= -mno-relax .endif # The boot loader build uses dd status=none, where possible, for reproducible Copied: head/stand/efi/include/riscv/efibind.h (from r362787, head/stand/efi/include/arm64/efibind.h) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/stand/efi/include/riscv/efibind.h Mon Jul 6 18:19:42 2020 (r362973, copy of r362787, head/stand/efi/include/arm64/efibind.h) @@ -0,0 +1,217 @@ +/* $FreeBSD$ */ +/*++ + +Copyright (c) 1999 - 2003 Intel Corporation. All rights reserved +This software and associated documentation (if any) is furnished +under a license and may only be used or copied in accordance +with the terms of the license. Except as permitted by such +license, no part of this software or documentation may be +reproduced, stored in a retrieval system, or transmitted in any +form or by any means without the express written consent of +Intel Corporation. + +Module Name: + + efefind.h + +Abstract: + + EFI to compile bindings + + + + +Revision History + +--*/ + +#pragma pack() + + +#ifdef __FreeBSD__ +#include +#else +// +// Basic int types of various widths +// + +#if (__STDC_VERSION__ < 199901L ) + + // No ANSI C 1999/2000 stdint.h integer width declarations + + #ifdef _MSC_EXTENSIONS + + // Use Microsoft C compiler integer width declarations + + typedef unsigned __int64 uint64_t; + typedef __int64 int64_t; + typedef unsigned __int32 uint32_t; + typedef __int32 int32_t; + typedef unsigned __int16 uint16_t; + typedef __int16 int16_t; + typedef unsigned __int8 uint8_t; + typedef __int8 int8_t; + #else + #ifdef UNIX_LP64 + + // Use LP64 programming model from C_FLAGS for integer width declarations + + typedef unsigned long uint64_t; + typedef long int64_t; + typedef unsigned int uint32_t; + typedef int int32_t; + typedef unsigned short uint16_t; + typedef short int16_t; + typedef unsigned char uint8_t; + typedef char int8_t; + #else + + // Assume P64 programming model from C_FLAGS for integer width declarations + + typedef unsigned long long uint64_t; + typedef long long int64_t; + typedef unsigned int uint32_t; + typedef int int32_t; + typedef unsigned short uint16_t; + typedef short int16_t; + typedef unsigned char uint8_t; + typedef char int8_t; + #endif + #endif +#endif +#endif /* __FreeBSD__ */ + +// +// Basic EFI types of various widths +// + + +typedef uint64_t UINT64; +typedef int64_t INT64; +typedef uint32_t UINT32; +typedef int32_t INT32; +typedef uint16_t UINT16; +typedef int16_t INT16; +typedef uint8_t UINT8; +typedef int8_t INT8; + + +#undef VOID +#define VOID void + + +typedef int64_t INTN; +typedef uint64_t UINTN; + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// BugBug: Code to debug +// +#define BIT63 0x8000000000000000 + +#define PLATFORM_IOBASE_ADDRESS (0xffffc000000 | BIT63) +#define PORT_TO_MEMD(_Port) (PLATFORM_IOBASE_ADDRESS | ( ( ( (_Port) & 0xfffc) << 10 ) | ( (_Port) & 0x0fff) ) ) + +// +// Macro's with casts make this much easier to use and read. +// +#define PORT_TO_MEM8D(_Port) (*(UINT8 *)(PORT_TO_MEMD(_Port))) +#define POST_CODE(_Data) (PORT_TO_MEM8D(0x80) = (_Data)) +// +// BugBug: End Debug Code!!! +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +#define EFIERR(a) (0x8000000000000000 | a) +#define EFI_ERROR_MASK 0x8000000000000000 +#define EFIERR_OEM(a) (0xc000000000000000 | a) + +#define BAD_POINTER 0xFBFBFBFBFBFBFBFB +#define MAX_ADDRESS 0xFFFFFFFFFFFFFFFF + +#define BREAKPOINT() __break(0) + +// +// Pointers must be aligned to these address to function +// you will get an alignment fault if this value is less than 8 +// +#define MIN_ALIGNMENT_SIZE 8 + +#define ALIGN_VARIABLE(Value , Adjustment) \ + (UINTN) Adjustment = 0; \ + if((UINTN)Value % MIN_ALIGNMENT_SIZE) \ + (UINTN)Adjustment = MIN_ALIGNMENT_SIZE - ((UINTN)Value % MIN_ALIGNMENT_SIZE); \ + Value = (UINTN)Value + (UINTN)Adjustment + +// +// Define macros to create data structure signatures. +// + +#define EFI_SIGNATURE_16(A,B) ((A) | (B<<8)) +#define EFI_SIGNATURE_32(A,B,C,D) (EFI_SIGNATURE_16(A,B) | (EFI_SIGNATURE_16(C,D) << 16)) +#define EFI_SIGNATURE_64(A,B,C,D,E,F,G,H) (EFI_SIGNATURE_32(A,B,C,D) | ((UINT64)(EFI_SIGNATURE_32(E,F,G,H)) << 32)) + +// +// EFIAPI - prototype calling convention for EFI function pointers +// BOOTSERVICE - prototype for implementation of a boot service interface +// RUNTIMESERVICE - prototype for implementation of a runtime service interface +// RUNTIMEFUNCTION - prototype for implementation of a runtime function that is not a service +// RUNTIME_CODE - pragma macro for declaring runtime code +// + +#ifndef EFIAPI // Forces EFI calling conventions reguardless of compiler options + #ifdef _MSC_EXTENSIONS + #define EFIAPI __cdecl // Force C calling convention for Microsoft C compiler + #else + #define EFIAPI // Substitute expresion to force C calling convention + #endif +#endif + +#define BOOTSERVICE +#define RUNTIMESERVICE +#define RUNTIMEFUNCTION + +#define RUNTIME_CODE(a) alloc_text("rtcode", a) +#define BEGIN_RUNTIME_DATA() data_seg("rtdata") +#define END_RUNTIME_DATA() data_seg() + +#define VOLATILE volatile + +// +// BugBug: Need to find out if this is portable across compilers. +// +void __mfa (void); +#define MEMORY_FENCE() __mfa() + +#ifdef EFI_NO_INTERFACE_DECL + #define EFI_FORWARD_DECLARATION(x) + #define EFI_INTERFACE_DECL(x) +#else + #define EFI_FORWARD_DECLARATION(x) typedef struct _##x x + #define EFI_INTERFACE_DECL(x) typedef struct x +#endif + +// +// When build similar to FW, then link everything together as +// one big module. +// + +#define EFI_DRIVER_ENTRY_POINT(InitFunction) + +#define LOAD_INTERNAL_DRIVER(_if, type, name, entry) \ + (_if)->LoadInternal(type, name, entry) +// entry(NULL, ST) + +#ifdef __FreeBSD__ +#define INTERFACE_DECL(x) struct x +#else +// +// Some compilers don't support the forward reference construct: +// typedef struct XXXXX +// +// The following macro provide a workaround for such cases. +// +#ifdef NO_INTERFACE_DECL +#define INTERFACE_DECL(x) +#else +#define INTERFACE_DECL(x) typedef struct x +#endif +#endif Modified: head/stand/efi/libefi/Makefile ============================================================================== --- head/stand/efi/libefi/Makefile Mon Jul 6 17:47:29 2020 (r362972) +++ head/stand/efi/libefi/Makefile Mon Jul 6 18:19:42 2020 (r362973) @@ -27,7 +27,8 @@ SRCS+= teken.c .if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" SRCS+= time.c -.elif ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "arm" +.elif ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "arm" || \ + ${MACHINE_CPUARCH} == "riscv" SRCS+= time_event.c .endif Added: head/stand/efi/loader/arch/riscv/Makefile.inc ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/stand/efi/loader/arch/riscv/Makefile.inc Mon Jul 6 18:19:42 2020 (r362973) @@ -0,0 +1,7 @@ +# $FreeBSD$ + +HAVE_FDT=yes + +SRCS+= exec.c \ + efiserialio.c \ + start.S Copied and modified: head/stand/efi/loader/arch/riscv/exec.c (from r362787, head/stand/efi/loader/arch/arm/exec.c) ============================================================================== --- head/stand/efi/loader/arch/arm/exec.c Mon Jun 29 18:06:00 2020 (r362787, copy source) +++ head/stand/efi/loader/arch/riscv/exec.c Mon Jul 6 18:19:42 2020 (r362973) @@ -43,25 +43,11 @@ __FBSDID("$FreeBSD$"); #include "bootstrap.h" #include "loader_efi.h" -extern vm_offset_t md_load(char *, vm_offset_t *); extern int bi_load(char *, vm_offset_t *, vm_offset_t *); static int -__elfN(arm_load)(char *filename, uint64_t dest, - struct preloaded_file **result) +__elfN(exec)(struct preloaded_file *fp) { - int r; - - r = __elfN(loadfile)(filename, dest, result); - if (r != 0) - return (r); - - return (0); -} - -static int -__elfN(arm_exec)(struct preloaded_file *fp) -{ struct file_metadata *fmp; vm_offset_t modulep, kernend; Elf_Ehdr *e; @@ -85,22 +71,22 @@ __elfN(arm_exec)(struct preloaded_file *fp) return (error); } - /* At this point we've called ExitBootServices, so we can't call - * printf or any other function that uses Boot Services */ - + /* + * At this point we've called ExitBootServices, so we can't call + * printf or any other function that uses Boot Services + */ dev_cleanup(); (*entry)((void *)modulep); panic("exec returned"); } -static struct file_format arm_elf = { - __elfN(arm_load), - __elfN(arm_exec) +static struct file_format riscv_elf = { + __elfN(loadfile), + __elfN(exec) }; struct file_format *file_formats[] = { - &arm_elf, + &riscv_elf, NULL }; - Added: head/stand/efi/loader/arch/riscv/ldscript.riscv ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/stand/efi/loader/arch/riscv/ldscript.riscv Mon Jul 6 18:19:42 2020 (r362973) @@ -0,0 +1,87 @@ +/* $FreeBSD$ */ +OUTPUT_FORMAT("elf64-littleriscv", "elf64-littleriscv", "elf64-littleriscv") +OUTPUT_ARCH(riscv64) +ENTRY(_start) +SECTIONS +{ + /* Read-only sections, merged into text segment: */ + . = 0; + ImageBase = .; + .text : { + *(.peheader) + *(.text .stub .text.* .gnu.linkonce.t.*) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.plt) + } =0x9090 + . = ALIGN(16); + .data : { + *(.rodata .rodata.* .gnu.linkonce.r.*) + *(.rodata1) + *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) + *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) + *(.opd) + *(.data .data.* .gnu.linkonce.d.*) + *(.data1) + *(.plabel) + + . = ALIGN(16); + __bss_start = .; + *(.sbss .sbss.* .gnu.linkonce.sb.*) + *(.scommon) + *(.dynbss) + *(.bss *.bss.*) + *(COMMON) + . = ALIGN(16); + __bss_end = .; + } + . = ALIGN(16); + set_Xcommand_set : { + __start_set_Xcommand_set = .; + *(set_Xcommand_set) + __stop_set_Xcommand_set = .; + } + set_Xficl_compile_set : { + __start_set_Xficl_compile_set = .; + *(set_Xficl_compile_set) + __stop_set_Xficl_compile_set = .; + } + . = ALIGN(16); + .sdata : { + /* + * u-boot expects the gp register to be untouched by the EFI payload, so we + * can't enable this yet. + */ + /* __global_pointer$ = . + 0x800; */ + *(.got.plt .got) + *(.sdata .sdata.* .gnu.linkonce.s.*) + *(dynsbss) + *(.scommon) + } + . = ALIGN(16); + .dynamic : { *(.dynamic) } + . = ALIGN(16); + .rela.dyn : { + *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) + *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) + *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) + *(.rela.got) + *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) + *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) + *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) + *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) + *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) + *(.rela.plt) + *(.relset_*) + *(.rela.dyn .rela.dyn.*) + } + . = ALIGN(16); + .reloc : { *(.reloc) } + . = ALIGN(16); + .dynsym : { *(.dynsym) } + _edata = .; + + /* Unused sections */ + .dynstr : { *(.dynstr) } + .hash : { *(.hash) } +} Added: head/stand/efi/loader/arch/riscv/start.S ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/stand/efi/loader/arch/riscv/start.S Mon Jul 6 18:19:42 2020 (r362973) @@ -0,0 +1,168 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2020 Mitchell Horne + * + * 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. + * + * $FreeBSD$ + */ + +#include + +/* + * We need to be a PE32+ file for EFI. On some architectures we can use + * objcopy to create the correct file, however on RISC-V we need to do + * it ourselves. + */ + +#define IMAGE_FILE_MACHINE_RISCV64 0x5064 + +#define IMAGE_SCN_CNT_CODE 0x00000020 +#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 +#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 +#define IMAGE_SCN_MEM_EXECUTE 0x20000000 +#define IMAGE_SCN_MEM_READ 0x40000000 + + .section .peheader,"a" +efi_start: + /* The MS-DOS Stub, only used to get the offset of the COFF header */ + .ascii "MZ" + .short 0 + .space 0x38 + .long pe_sig - efi_start + + /* The PE32 Signature. Needs to be 8-byte aligned */ + .align 3 +pe_sig: + .ascii "PE" + .short 0 +coff_head: + .short IMAGE_FILE_MACHINE_RISCV64 /* RISC-V 64 file */ + .short 2 /* 2 Sections */ + .long 0 /* Timestamp */ + .long 0 /* No symbol table */ + .long 0 /* No symbols */ + .short section_table - optional_header /* Optional header size */ + .short 0 /* Characteristics TODO: Fill in */ + +optional_header: + .short 0x020b /* PE32+ (64-bit addressing) */ + .byte 0 /* Major linker version */ + .byte 0 /* Minor linker version */ + .long _edata - _end_header /* Code size */ + .long 0 /* No initialized data */ + .long 0 /* No uninitialized data */ + .long _start - efi_start /* Entry point */ + .long _end_header - efi_start /* Start of code */ + +optional_windows_header: + .quad 0 /* Image base */ + .long 32 /* Section Alignment */ + .long 8 /* File alignment */ + .short 0 /* Major OS version */ + .short 0 /* Minor OS version */ + .short 0 /* Major image version */ + .short 0 /* Minor image version */ + .short 0 /* Major subsystem version */ + .short 0 /* Minor subsystem version */ + .long 0 /* Win32 version */ + .long _edata - efi_start /* Image size */ + .long _end_header - efi_start /* Header size */ + .long 0 /* Checksum */ + .short 0xa /* Subsystem (EFI app) */ + .short 0 /* DLL Characteristics */ + .quad 0 /* Stack reserve */ + .quad 0 /* Stack commit */ + .quad 0 /* Heap reserve */ + .quad 0 /* Heap commit */ + .long 0 /* Loader flags */ + .long 6 /* Number of RVAs */ + + /* RVAs: */ + .quad 0 + .quad 0 + .quad 0 + .quad 0 + .quad 0 + .quad 0 + +section_table: + /* We need a .reloc section for EFI */ + .ascii ".reloc" + .byte 0 + .byte 0 /* Pad to 8 bytes */ + .long 0 /* Virtual size */ + .long 0 /* Virtual address */ + .long 0 /* Size of raw data */ + .long 0 /* Pointer to raw data */ + .long 0 /* Pointer to relocations */ + .long 0 /* Pointer to line numbers */ + .short 0 /* Number of relocations */ + .short 0 /* Number of line numbers */ + .long (IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | \ + IMAGE_SCN_MEM_DISCARDABLE) /* Characteristics */ + + /* The contents of the loader */ + .ascii ".text" + .byte 0 + .byte 0 + .byte 0 /* Pad to 8 bytes */ + .long _edata - _end_header /* Virtual size */ + .long _end_header - efi_start /* Virtual address */ + .long _edata - _end_header /* Size of raw data */ + .long _end_header - efi_start /* Pointer to raw data */ + .long 0 /* Pointer to relocations */ + .long 0 /* Pointer to line numbers */ + .short 0 /* Number of relocations */ + .short 0 /* Number of line numbers */ + .long (IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | \ + IMAGE_SCN_MEM_READ) /* Characteristics */ +_end_header: + + .text + .globl _start +_start: + /* Save the boot params to the stack */ + addi sp, sp, -16 + sd a0, 0(sp) + sd a1, 8(sp) + + /* Zero the BSS */ + lla t0, __bss_start + lla t1, __bss_end + +1: sd zero, 0(t0) + addi t0, t0, 8 + bltu t0, t1, 1b + + lla a0, ImageBase + lla a1, _DYNAMIC + call _C_LABEL(self_reloc) + + ld a1, 8(sp) + ld a0, 0(sp) + tail _C_LABEL(efi_main) + + /* NOTREACHED */ +2: wfi + j 2b Modified: head/stand/efi/loader/copy.c ============================================================================== --- head/stand/efi/loader/copy.c Mon Jul 6 17:47:29 2020 (r362972) +++ head/stand/efi/loader/copy.c Mon Jul 6 18:19:42 2020 (r362973) @@ -227,7 +227,7 @@ efi_copy_init(void) staging_base = staging; staging_end = staging + nr_pages * EFI_PAGE_SIZE; -#if defined(__aarch64__) || defined(__arm__) +#if defined(__aarch64__) || defined(__arm__) || defined(__riscv) /* * Round the kernel load address to a 2MiB value. This is needed * because the kernel builds a page table based on where it has @@ -277,7 +277,7 @@ before_staging: return (false); } addr = staging - nr_pages * EFI_PAGE_SIZE; -#if defined(__aarch64__) || defined(__arm__) +#if defined(__aarch64__) || defined(__arm__) || defined(__riscv) /* See efi_copy_init for why this is needed */ addr = rounddown2(addr, 2 * 1024 * 1024); #endif @@ -343,6 +343,11 @@ efi_copyout(const vm_offset_t src, void *dest, const s ssize_t efi_readin(readin_handle_t fd, vm_offset_t dest, const size_t len) { + + if (!stage_offset_set) { + stage_offset = (vm_offset_t)staging - dest; + stage_offset_set = 1; + } if (!efi_check_space(dest + stage_offset + len)) { errno = ENOMEM; Modified: head/stand/efi/loader/main.c ============================================================================== --- head/stand/efi/loader/main.c Mon Jul 6 17:47:29 2020 (r362972) +++ head/stand/efi/loader/main.c Mon Jul 6 18:19:42 2020 (r362973) @@ -912,7 +912,7 @@ main(int argc, CHAR16 *argv[]) */ setenv("console", "efi", 1); uhowto = parse_uefi_con_out(); -#if defined(__aarch64__) || defined(__arm__) +#if defined(__aarch64__) || defined(__arm__) || defined(__riscv) if ((uhowto & RB_SERIAL) != 0) setenv("console", "comconsole", 1); #endif Modified: head/stand/loader.mk ============================================================================== --- head/stand/loader.mk Mon Jul 6 17:47:29 2020 (r362972) +++ head/stand/loader.mk Mon Jul 6 18:19:42 2020 (r362973) @@ -25,6 +25,9 @@ SRCS+= metadata.c .elif ${MACHINE} == "mips" SRCS+= load_elf32.c reloc_elf32.c SRCS+= metadata.c +.elif ${MACHINE_CPUARCH} == "riscv" +SRCS+= load_elf64.c reloc_elf64.c +SRCS+= metadata.c .endif .if ${LOADER_DISK_SUPPORT:Uyes} == "yes" Modified: head/sys/riscv/include/metadata.h ============================================================================== --- head/sys/riscv/include/metadata.h Mon Jul 6 17:47:29 2020 (r362972) +++ head/sys/riscv/include/metadata.h Mon Jul 6 18:19:42 2020 (r362973) @@ -30,6 +30,28 @@ #ifndef _MACHINE_METADATA_H_ #define _MACHINE_METADATA_H_ -#define MODINFOMD_DTBP 0x1001 +#define MODINFOMD_DTBP 0x1001 +#define MODINFOMD_EFI_MAP 0x1002 + +struct efi_map_header { + size_t memory_size; + size_t descriptor_size; + uint32_t descriptor_version; +}; + +/* + * Placeholder for now + */ +struct efi_fb { + uint64_t fb_addr; + uint64_t fb_size; + uint32_t fb_height; + uint32_t fb_width; + uint32_t fb_stride; + uint32_t fb_mask_red; + uint32_t fb_mask_green; + uint32_t fb_mask_blue; + uint32_t fb_mask_reserved; +}; #endif /* !_MACHINE_METADATA_H_ */ From owner-svn-src-all@freebsd.org Mon Jul 6 18:26:51 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3545036DA56; Mon, 6 Jul 2020 18:26:51 +0000 (UTC) (envelope-from mhorne@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0vDC0xL6z4NPk; Mon, 6 Jul 2020 18:26:51 +0000 (UTC) (envelope-from mhorne@freebsd.org) Received: from mail-yb1-f175.google.com (mail-yb1-f175.google.com [209.85.219.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) (Authenticated sender: mhorne) by smtp.freebsd.org (Postfix) with ESMTPSA id EEC95249DE; Mon, 6 Jul 2020 18:26:50 +0000 (UTC) (envelope-from mhorne@freebsd.org) Received: by mail-yb1-f175.google.com with SMTP id y13so19391785ybj.10; Mon, 06 Jul 2020 11:26:50 -0700 (PDT) X-Gm-Message-State: AOAM533AFWROifMzdY6h7r08LOq1PFetA0rKRcjv6xLcJZr2/yr+PPvl /iWSHib5HcD/0NTKYhkEFjfMVOVnu/xPPeanS74= X-Google-Smtp-Source: ABdhPJwmK0YJ7k4uG78Gg+5WlMg8Rj+dZP+k6UldZyWZcj7gf6+23RbzHmR9G39RCRQqUvUfRpb7QgX0t/gKSLaXuUI= X-Received: by 2002:a25:3851:: with SMTP id f78mr81569403yba.212.1594060009740; Mon, 06 Jul 2020 11:26:49 -0700 (PDT) MIME-Version: 1.0 References: <202007061819.066IJhE0050151@repo.freebsd.org> In-Reply-To: <202007061819.066IJhE0050151@repo.freebsd.org> From: Mitchell Horne Date: Mon, 6 Jul 2020 15:26:38 -0300 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r362973 - in head: share/mk stand stand/common stand/efi/include/riscv stand/efi/libefi stand/efi/loader stand/efi/loader/arch/riscv sys/riscv/include To: Mitchell Horne Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 18:26:51 -0000 On Mon, Jul 6, 2020 at 3:19 PM Mitchell Horne wrote: > > Author: mhorne > Date: Mon Jul 6 18:19:42 2020 > New Revision: 362973 > URL: https://svnweb.freebsd.org/changeset/base/362973 > > Log: > RISC-V boot1.efi and loader.efi support > > This implementation doesn't have any major deviations from the other EFI > ports. I've copied the boilerplate from arm and arm64. > > I've tested this with the following boot flows: > OpenSBI (M-mode) -> u-boot (S-mode) -> loader.efi -> FreeBSD > OpenSBI (M-mode) -> u-boot (S-mode) -> boot1.efi -> loader.efi -> FreeBSD > > Due to the way that u-boot handles secondary CPUs, OpenSBI >= v0.7 is required, > as the HSM extension is needed to bring them up explicitly. Because of this, > using BBL as the SBI implementation will not be possible. Additionally, there > are a few recent u-boot changes that are required as well, all of which will be > present in the upcoming v2020.07 release. > > Looks good: emaste > Differential Revision: https://reviews.freebsd.org/D25135 > > Added: > head/stand/efi/include/riscv/ > head/stand/efi/include/riscv/efibind.h > - copied unchanged from r362787, head/stand/efi/include/arm64/efibind.h > head/stand/efi/loader/arch/riscv/ > head/stand/efi/loader/arch/riscv/Makefile.inc (contents, props changed) > head/stand/efi/loader/arch/riscv/exec.c > - copied, changed from r362787, head/stand/efi/loader/arch/arm/exec.c > head/stand/efi/loader/arch/riscv/ldscript.riscv (contents, props changed) > head/stand/efi/loader/arch/riscv/start.S (contents, props changed) > Modified: > head/share/mk/src.opts.mk > head/stand/common/self_reloc.c > head/stand/defs.mk > head/stand/efi/libefi/Makefile > head/stand/efi/loader/copy.c > head/stand/efi/loader/main.c > head/stand/loader.mk > head/sys/riscv/include/metadata.h > > Modified: head/share/mk/src.opts.mk > ============================================================================== > --- head/share/mk/src.opts.mk Mon Jul 6 17:47:29 2020 (r362972) > +++ head/share/mk/src.opts.mk Mon Jul 6 18:19:42 2020 (r362973) > @@ -318,8 +318,8 @@ BROKEN_OPTIONS+=LIBSOFT > # marked no longer broken with the switch to LLVM. > BROKEN_OPTIONS+=GOOGLETEST SSP > .endif > -# EFI doesn't exist on mips, powerpc, or riscv. > -.if ${__T:Mmips*} || ${__T:Mpowerpc*} || ${__T:Mriscv*} > +# EFI doesn't exist on mips or powerpc. > +.if ${__T:Mmips*} || ${__T:Mpowerpc*} > BROKEN_OPTIONS+=EFI > .endif > # OFW is only for powerpc, exclude others > I meant to commit this hunk separately, but included it by mistake. The log would have been: Enable MK_EFI by default on RISC-V We can now build the EFI libraries, utilities, and bootloader. This is enough for EFI boot-time services and for us to un-break this option. Reviewed by: br Differential Revision: https://reviews.freebsd.org/D25137 > Modified: head/stand/common/self_reloc.c > ============================================================================== > --- head/stand/common/self_reloc.c Mon Jul 6 17:47:29 2020 (r362972) > +++ head/stand/common/self_reloc.c Mon Jul 6 18:19:42 2020 (r362973) > @@ -31,7 +31,7 @@ __FBSDID("$FreeBSD$"); > #include > #include > > -#if defined(__aarch64__) || defined(__amd64__) > +#if defined(__aarch64__) || defined(__amd64__) || defined(__riscv) > #define ElfW_Rel Elf64_Rela > #define ElfW_Dyn Elf64_Dyn > #define ELFW_R_TYPE ELF64_R_TYPE > @@ -55,6 +55,9 @@ __FBSDID("$FreeBSD$"); > #elif defined(__i386__) > #define RELOC_TYPE_NONE R_386_NONE > #define RELOC_TYPE_RELATIVE R_386_RELATIVE > +#elif defined(__riscv) > +#define RELOC_TYPE_NONE R_RISCV_NONE > +#define RELOC_TYPE_RELATIVE R_RISCV_RELATIVE > #endif > > void self_reloc(Elf_Addr baseaddr, ElfW_Dyn *dynamic); > > Modified: head/stand/defs.mk > ============================================================================== > --- head/stand/defs.mk Mon Jul 6 17:47:29 2020 (r362972) > +++ head/stand/defs.mk Mon Jul 6 18:19:42 2020 (r362973) > @@ -115,13 +115,14 @@ AFLAGS+= --32 > SSP_CFLAGS= > > # Add in the no float / no SIMD stuff and announce we're freestanding > -# aarch64 and riscv don't have -msoft-float, but all others do. riscv > -# currently has no /boot/loader, but may soon. > +# aarch64 and riscv don't have -msoft-float, but all others do. > CFLAGS+= -ffreestanding ${CFLAGS_NO_SIMD} > .if ${MACHINE_CPUARCH} == "aarch64" > CFLAGS+= -mgeneral-regs-only -ffixed-x18 -fPIC > .elif ${MACHINE_CPUARCH} == "riscv" > -CFLAGS+= -march=rv64imac -mabi=lp64 > +CFLAGS+= -march=rv64imac -mabi=lp64 -fPIC > +CFLAGS.clang+= -mcmodel=medium > +CFLAGS.gcc+= -mcmodel=medany > .else > CFLAGS+= -msoft-float > .endif > @@ -146,6 +147,12 @@ CFLAGS+= -fPIC -mno-red-zone > CFLAGS.clang+= -mno-movt > CFLAGS.clang+= -mfpu=none > CFLAGS+= -fPIC > +.endif > + > +# Some RISC-V linkers have support for relaxations, while some (lld) do not > +# yet. If this is the case we inhibit the compiler from emitting relaxations. > +.if ${LINKER_FEATURES:Mriscv-relaxations} == "" > +CFLAGS+= -mno-relax > .endif > > # The boot loader build uses dd status=none, where possible, for reproducible > > Copied: head/stand/efi/include/riscv/efibind.h (from r362787, head/stand/efi/include/arm64/efibind.h) > ============================================================================== > --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/stand/efi/include/riscv/efibind.h Mon Jul 6 18:19:42 2020 (r362973, copy of r362787, head/stand/efi/include/arm64/efibind.h) > @@ -0,0 +1,217 @@ > +/* $FreeBSD$ */ > +/*++ > + > +Copyright (c) 1999 - 2003 Intel Corporation. All rights reserved > +This software and associated documentation (if any) is furnished > +under a license and may only be used or copied in accordance > +with the terms of the license. Except as permitted by such > +license, no part of this software or documentation may be > +reproduced, stored in a retrieval system, or transmitted in any > +form or by any means without the express written consent of > +Intel Corporation. > + > +Module Name: > + > + efefind.h > + > +Abstract: > + > + EFI to compile bindings > + > + > + > + > +Revision History > + > +--*/ > + > +#pragma pack() > + > + > +#ifdef __FreeBSD__ > +#include > +#else > +// > +// Basic int types of various widths > +// > + > +#if (__STDC_VERSION__ < 199901L ) > + > + // No ANSI C 1999/2000 stdint.h integer width declarations > + > + #ifdef _MSC_EXTENSIONS > + > + // Use Microsoft C compiler integer width declarations > + > + typedef unsigned __int64 uint64_t; > + typedef __int64 int64_t; > + typedef unsigned __int32 uint32_t; > + typedef __int32 int32_t; > + typedef unsigned __int16 uint16_t; > + typedef __int16 int16_t; > + typedef unsigned __int8 uint8_t; > + typedef __int8 int8_t; > + #else > + #ifdef UNIX_LP64 > + > + // Use LP64 programming model from C_FLAGS for integer width declarations > + > + typedef unsigned long uint64_t; > + typedef long int64_t; > + typedef unsigned int uint32_t; > + typedef int int32_t; > + typedef unsigned short uint16_t; > + typedef short int16_t; > + typedef unsigned char uint8_t; > + typedef char int8_t; > + #else > + > + // Assume P64 programming model from C_FLAGS for integer width declarations > + > + typedef unsigned long long uint64_t; > + typedef long long int64_t; > + typedef unsigned int uint32_t; > + typedef int int32_t; > + typedef unsigned short uint16_t; > + typedef short int16_t; > + typedef unsigned char uint8_t; > + typedef char int8_t; > + #endif > + #endif > +#endif > +#endif /* __FreeBSD__ */ > + > +// > +// Basic EFI types of various widths > +// > + > + > +typedef uint64_t UINT64; > +typedef int64_t INT64; > +typedef uint32_t UINT32; > +typedef int32_t INT32; > +typedef uint16_t UINT16; > +typedef int16_t INT16; > +typedef uint8_t UINT8; > +typedef int8_t INT8; > + > + > +#undef VOID > +#define VOID void > + > + > +typedef int64_t INTN; > +typedef uint64_t UINTN; > + > +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > +// BugBug: Code to debug > +// > +#define BIT63 0x8000000000000000 > + > +#define PLATFORM_IOBASE_ADDRESS (0xffffc000000 | BIT63) > +#define PORT_TO_MEMD(_Port) (PLATFORM_IOBASE_ADDRESS | ( ( ( (_Port) & 0xfffc) << 10 ) | ( (_Port) & 0x0fff) ) ) > + > +// > +// Macro's with casts make this much easier to use and read. > +// > +#define PORT_TO_MEM8D(_Port) (*(UINT8 *)(PORT_TO_MEMD(_Port))) > +#define POST_CODE(_Data) (PORT_TO_MEM8D(0x80) = (_Data)) > +// > +// BugBug: End Debug Code!!! > +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > + > +#define EFIERR(a) (0x8000000000000000 | a) > +#define EFI_ERROR_MASK 0x8000000000000000 > +#define EFIERR_OEM(a) (0xc000000000000000 | a) > + > +#define BAD_POINTER 0xFBFBFBFBFBFBFBFB > +#define MAX_ADDRESS 0xFFFFFFFFFFFFFFFF > + > +#define BREAKPOINT() __break(0) > + > +// > +// Pointers must be aligned to these address to function > +// you will get an alignment fault if this value is less than 8 > +// > +#define MIN_ALIGNMENT_SIZE 8 > + > +#define ALIGN_VARIABLE(Value , Adjustment) \ > + (UINTN) Adjustment = 0; \ > + if((UINTN)Value % MIN_ALIGNMENT_SIZE) \ > + (UINTN)Adjustment = MIN_ALIGNMENT_SIZE - ((UINTN)Value % MIN_ALIGNMENT_SIZE); \ > + Value = (UINTN)Value + (UINTN)Adjustment > + > +// > +// Define macros to create data structure signatures. > +// > + > +#define EFI_SIGNATURE_16(A,B) ((A) | (B<<8)) > +#define EFI_SIGNATURE_32(A,B,C,D) (EFI_SIGNATURE_16(A,B) | (EFI_SIGNATURE_16(C,D) << 16)) > +#define EFI_SIGNATURE_64(A,B,C,D,E,F,G,H) (EFI_SIGNATURE_32(A,B,C,D) | ((UINT64)(EFI_SIGNATURE_32(E,F,G,H)) << 32)) > + > +// > +// EFIAPI - prototype calling convention for EFI function pointers > +// BOOTSERVICE - prototype for implementation of a boot service interface > +// RUNTIMESERVICE - prototype for implementation of a runtime service interface > +// RUNTIMEFUNCTION - prototype for implementation of a runtime function that is not a service > +// RUNTIME_CODE - pragma macro for declaring runtime code > +// > + > +#ifndef EFIAPI // Forces EFI calling conventions reguardless of compiler options > + #ifdef _MSC_EXTENSIONS > + #define EFIAPI __cdecl // Force C calling convention for Microsoft C compiler > + #else > + #define EFIAPI // Substitute expresion to force C calling convention > + #endif > +#endif > + > +#define BOOTSERVICE > +#define RUNTIMESERVICE > +#define RUNTIMEFUNCTION > + > +#define RUNTIME_CODE(a) alloc_text("rtcode", a) > +#define BEGIN_RUNTIME_DATA() data_seg("rtdata") > +#define END_RUNTIME_DATA() data_seg() > + > +#define VOLATILE volatile > + > +// > +// BugBug: Need to find out if this is portable across compilers. > +// > +void __mfa (void); > +#define MEMORY_FENCE() __mfa() > + > +#ifdef EFI_NO_INTERFACE_DECL > + #define EFI_FORWARD_DECLARATION(x) > + #define EFI_INTERFACE_DECL(x) > +#else > + #define EFI_FORWARD_DECLARATION(x) typedef struct _##x x > + #define EFI_INTERFACE_DECL(x) typedef struct x > +#endif > + > +// > +// When build similar to FW, then link everything together as > +// one big module. > +// > + > +#define EFI_DRIVER_ENTRY_POINT(InitFunction) > + > +#define LOAD_INTERNAL_DRIVER(_if, type, name, entry) \ > + (_if)->LoadInternal(type, name, entry) > +// entry(NULL, ST) > + > +#ifdef __FreeBSD__ > +#define INTERFACE_DECL(x) struct x > +#else > +// > +// Some compilers don't support the forward reference construct: > +// typedef struct XXXXX > +// > +// The following macro provide a workaround for such cases. > +// > +#ifdef NO_INTERFACE_DECL > +#define INTERFACE_DECL(x) > +#else > +#define INTERFACE_DECL(x) typedef struct x > +#endif > +#endif > > Modified: head/stand/efi/libefi/Makefile > ============================================================================== > --- head/stand/efi/libefi/Makefile Mon Jul 6 17:47:29 2020 (r362972) > +++ head/stand/efi/libefi/Makefile Mon Jul 6 18:19:42 2020 (r362973) > @@ -27,7 +27,8 @@ SRCS+= teken.c > > .if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" > SRCS+= time.c > -.elif ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "arm" > +.elif ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "arm" || \ > + ${MACHINE_CPUARCH} == "riscv" > SRCS+= time_event.c > .endif > > > Added: head/stand/efi/loader/arch/riscv/Makefile.inc > ============================================================================== > --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/stand/efi/loader/arch/riscv/Makefile.inc Mon Jul 6 18:19:42 2020 (r362973) > @@ -0,0 +1,7 @@ > +# $FreeBSD$ > + > +HAVE_FDT=yes > + > +SRCS+= exec.c \ > + efiserialio.c \ > + start.S > > Copied and modified: head/stand/efi/loader/arch/riscv/exec.c (from r362787, head/stand/efi/loader/arch/arm/exec.c) > ============================================================================== > --- head/stand/efi/loader/arch/arm/exec.c Mon Jun 29 18:06:00 2020 (r362787, copy source) > +++ head/stand/efi/loader/arch/riscv/exec.c Mon Jul 6 18:19:42 2020 (r362973) > @@ -43,25 +43,11 @@ __FBSDID("$FreeBSD$"); > #include "bootstrap.h" > #include "loader_efi.h" > > -extern vm_offset_t md_load(char *, vm_offset_t *); > extern int bi_load(char *, vm_offset_t *, vm_offset_t *); > > static int > -__elfN(arm_load)(char *filename, uint64_t dest, > - struct preloaded_file **result) > +__elfN(exec)(struct preloaded_file *fp) > { > - int r; > - > - r = __elfN(loadfile)(filename, dest, result); > - if (r != 0) > - return (r); > - > - return (0); > -} > - > -static int > -__elfN(arm_exec)(struct preloaded_file *fp) > -{ > struct file_metadata *fmp; > vm_offset_t modulep, kernend; > Elf_Ehdr *e; > @@ -85,22 +71,22 @@ __elfN(arm_exec)(struct preloaded_file *fp) > return (error); > } > > - /* At this point we've called ExitBootServices, so we can't call > - * printf or any other function that uses Boot Services */ > - > + /* > + * At this point we've called ExitBootServices, so we can't call > + * printf or any other function that uses Boot Services > + */ > dev_cleanup(); > > (*entry)((void *)modulep); > panic("exec returned"); > } > > -static struct file_format arm_elf = { > - __elfN(arm_load), > - __elfN(arm_exec) > +static struct file_format riscv_elf = { > + __elfN(loadfile), > + __elfN(exec) > }; > > struct file_format *file_formats[] = { > - &arm_elf, > + &riscv_elf, > NULL > }; > - > > Added: head/stand/efi/loader/arch/riscv/ldscript.riscv > ============================================================================== > --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/stand/efi/loader/arch/riscv/ldscript.riscv Mon Jul 6 18:19:42 2020 (r362973) > @@ -0,0 +1,87 @@ > +/* $FreeBSD$ */ > +OUTPUT_FORMAT("elf64-littleriscv", "elf64-littleriscv", "elf64-littleriscv") > +OUTPUT_ARCH(riscv64) > +ENTRY(_start) > +SECTIONS > +{ > + /* Read-only sections, merged into text segment: */ > + . = 0; > + ImageBase = .; > + .text : { > + *(.peheader) > + *(.text .stub .text.* .gnu.linkonce.t.*) > + /* .gnu.warning sections are handled specially by elf32.em. */ > + *(.gnu.warning) > + *(.plt) > + } =0x9090 > + . = ALIGN(16); > + .data : { > + *(.rodata .rodata.* .gnu.linkonce.r.*) > + *(.rodata1) > + *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) > + *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) > + *(.opd) > + *(.data .data.* .gnu.linkonce.d.*) > + *(.data1) > + *(.plabel) > + > + . = ALIGN(16); > + __bss_start = .; > + *(.sbss .sbss.* .gnu.linkonce.sb.*) > + *(.scommon) > + *(.dynbss) > + *(.bss *.bss.*) > + *(COMMON) > + . = ALIGN(16); > + __bss_end = .; > + } > + . = ALIGN(16); > + set_Xcommand_set : { > + __start_set_Xcommand_set = .; > + *(set_Xcommand_set) > + __stop_set_Xcommand_set = .; > + } > + set_Xficl_compile_set : { > + __start_set_Xficl_compile_set = .; > + *(set_Xficl_compile_set) > + __stop_set_Xficl_compile_set = .; > + } > + . = ALIGN(16); > + .sdata : { > + /* > + * u-boot expects the gp register to be untouched by the EFI payload, so we > + * can't enable this yet. > + */ > + /* __global_pointer$ = . + 0x800; */ > + *(.got.plt .got) > + *(.sdata .sdata.* .gnu.linkonce.s.*) > + *(dynsbss) > + *(.scommon) > + } > + . = ALIGN(16); > + .dynamic : { *(.dynamic) } > + . = ALIGN(16); > + .rela.dyn : { > + *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) > + *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) > + *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) > + *(.rela.got) > + *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) > + *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) > + *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) > + *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) > + *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) > + *(.rela.plt) > + *(.relset_*) > + *(.rela.dyn .rela.dyn.*) > + } > + . = ALIGN(16); > + .reloc : { *(.reloc) } > + . = ALIGN(16); > + .dynsym : { *(.dynsym) } > + _edata = .; > + > + /* Unused sections */ > + .dynstr : { *(.dynstr) } > + .hash : { *(.hash) } > +} > > Added: head/stand/efi/loader/arch/riscv/start.S > ============================================================================== > --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/stand/efi/loader/arch/riscv/start.S Mon Jul 6 18:19:42 2020 (r362973) > @@ -0,0 +1,168 @@ > +/*- > + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD > + * > + * Copyright (c) 2020 Mitchell Horne > + * > + * 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. > + * > + * $FreeBSD$ > + */ > + > +#include > + > +/* > + * We need to be a PE32+ file for EFI. On some architectures we can use > + * objcopy to create the correct file, however on RISC-V we need to do > + * it ourselves. > + */ > + > +#define IMAGE_FILE_MACHINE_RISCV64 0x5064 > + > +#define IMAGE_SCN_CNT_CODE 0x00000020 > +#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 > +#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 > +#define IMAGE_SCN_MEM_EXECUTE 0x20000000 > +#define IMAGE_SCN_MEM_READ 0x40000000 > + > + .section .peheader,"a" > +efi_start: > + /* The MS-DOS Stub, only used to get the offset of the COFF header */ > + .ascii "MZ" > + .short 0 > + .space 0x38 > + .long pe_sig - efi_start > + > + /* The PE32 Signature. Needs to be 8-byte aligned */ > + .align 3 > +pe_sig: > + .ascii "PE" > + .short 0 > +coff_head: > + .short IMAGE_FILE_MACHINE_RISCV64 /* RISC-V 64 file */ > + .short 2 /* 2 Sections */ > + .long 0 /* Timestamp */ > + .long 0 /* No symbol table */ > + .long 0 /* No symbols */ > + .short section_table - optional_header /* Optional header size */ > + .short 0 /* Characteristics TODO: Fill in */ > + > +optional_header: > + .short 0x020b /* PE32+ (64-bit addressing) */ > + .byte 0 /* Major linker version */ > + .byte 0 /* Minor linker version */ > + .long _edata - _end_header /* Code size */ > + .long 0 /* No initialized data */ > + .long 0 /* No uninitialized data */ > + .long _start - efi_start /* Entry point */ > + .long _end_header - efi_start /* Start of code */ > + > +optional_windows_header: > + .quad 0 /* Image base */ > + .long 32 /* Section Alignment */ > + .long 8 /* File alignment */ > + .short 0 /* Major OS version */ > + .short 0 /* Minor OS version */ > + .short 0 /* Major image version */ > + .short 0 /* Minor image version */ > + .short 0 /* Major subsystem version */ > + .short 0 /* Minor subsystem version */ > + .long 0 /* Win32 version */ > + .long _edata - efi_start /* Image size */ > + .long _end_header - efi_start /* Header size */ > + .long 0 /* Checksum */ > + .short 0xa /* Subsystem (EFI app) */ > + .short 0 /* DLL Characteristics */ > + .quad 0 /* Stack reserve */ > + .quad 0 /* Stack commit */ > + .quad 0 /* Heap reserve */ > + .quad 0 /* Heap commit */ > + .long 0 /* Loader flags */ > + .long 6 /* Number of RVAs */ > + > + /* RVAs: */ > + .quad 0 > + .quad 0 > + .quad 0 > + .quad 0 > + .quad 0 > + .quad 0 > + > +section_table: > + /* We need a .reloc section for EFI */ > + .ascii ".reloc" > + .byte 0 > + .byte 0 /* Pad to 8 bytes */ > + .long 0 /* Virtual size */ > + .long 0 /* Virtual address */ > + .long 0 /* Size of raw data */ > + .long 0 /* Pointer to raw data */ > + .long 0 /* Pointer to relocations */ > + .long 0 /* Pointer to line numbers */ > + .short 0 /* Number of relocations */ > + .short 0 /* Number of line numbers */ > + .long (IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | \ > + IMAGE_SCN_MEM_DISCARDABLE) /* Characteristics */ > + > + /* The contents of the loader */ > + .ascii ".text" > + .byte 0 > + .byte 0 > + .byte 0 /* Pad to 8 bytes */ > + .long _edata - _end_header /* Virtual size */ > + .long _end_header - efi_start /* Virtual address */ > + .long _edata - _end_header /* Size of raw data */ > + .long _end_header - efi_start /* Pointer to raw data */ > + .long 0 /* Pointer to relocations */ > + .long 0 /* Pointer to line numbers */ > + .short 0 /* Number of relocations */ > + .short 0 /* Number of line numbers */ > + .long (IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | \ > + IMAGE_SCN_MEM_READ) /* Characteristics */ > +_end_header: > + > + .text > + .globl _start > +_start: > + /* Save the boot params to the stack */ > + addi sp, sp, -16 > + sd a0, 0(sp) > + sd a1, 8(sp) > + > + /* Zero the BSS */ > + lla t0, __bss_start > + lla t1, __bss_end > + > +1: sd zero, 0(t0) > + addi t0, t0, 8 > + bltu t0, t1, 1b > + > + lla a0, ImageBase > + lla a1, _DYNAMIC > + call _C_LABEL(self_reloc) > + > + ld a1, 8(sp) > + ld a0, 0(sp) > + tail _C_LABEL(efi_main) > + > + /* NOTREACHED */ > +2: wfi > + j 2b > > Modified: head/stand/efi/loader/copy.c > ============================================================================== > --- head/stand/efi/loader/copy.c Mon Jul 6 17:47:29 2020 (r362972) > +++ head/stand/efi/loader/copy.c Mon Jul 6 18:19:42 2020 (r362973) > @@ -227,7 +227,7 @@ efi_copy_init(void) > staging_base = staging; > staging_end = staging + nr_pages * EFI_PAGE_SIZE; > > -#if defined(__aarch64__) || defined(__arm__) > +#if defined(__aarch64__) || defined(__arm__) || defined(__riscv) > /* > * Round the kernel load address to a 2MiB value. This is needed > * because the kernel builds a page table based on where it has > @@ -277,7 +277,7 @@ before_staging: > return (false); > } > addr = staging - nr_pages * EFI_PAGE_SIZE; > -#if defined(__aarch64__) || defined(__arm__) > +#if defined(__aarch64__) || defined(__arm__) || defined(__riscv) > /* See efi_copy_init for why this is needed */ > addr = rounddown2(addr, 2 * 1024 * 1024); > #endif > @@ -343,6 +343,11 @@ efi_copyout(const vm_offset_t src, void *dest, const s > ssize_t > efi_readin(readin_handle_t fd, vm_offset_t dest, const size_t len) > { > + > + if (!stage_offset_set) { > + stage_offset = (vm_offset_t)staging - dest; > + stage_offset_set = 1; > + } > > if (!efi_check_space(dest + stage_offset + len)) { > errno = ENOMEM; > > Modified: head/stand/efi/loader/main.c > ============================================================================== > --- head/stand/efi/loader/main.c Mon Jul 6 17:47:29 2020 (r362972) > +++ head/stand/efi/loader/main.c Mon Jul 6 18:19:42 2020 (r362973) > @@ -912,7 +912,7 @@ main(int argc, CHAR16 *argv[]) > */ > setenv("console", "efi", 1); > uhowto = parse_uefi_con_out(); > -#if defined(__aarch64__) || defined(__arm__) > +#if defined(__aarch64__) || defined(__arm__) || defined(__riscv) > if ((uhowto & RB_SERIAL) != 0) > setenv("console", "comconsole", 1); > #endif > > Modified: head/stand/loader.mk > ============================================================================== > --- head/stand/loader.mk Mon Jul 6 17:47:29 2020 (r362972) > +++ head/stand/loader.mk Mon Jul 6 18:19:42 2020 (r362973) > @@ -25,6 +25,9 @@ SRCS+= metadata.c > .elif ${MACHINE} == "mips" > SRCS+= load_elf32.c reloc_elf32.c > SRCS+= metadata.c > +.elif ${MACHINE_CPUARCH} == "riscv" > +SRCS+= load_elf64.c reloc_elf64.c > +SRCS+= metadata.c > .endif > > .if ${LOADER_DISK_SUPPORT:Uyes} == "yes" > > Modified: head/sys/riscv/include/metadata.h > ============================================================================== > --- head/sys/riscv/include/metadata.h Mon Jul 6 17:47:29 2020 (r362972) > +++ head/sys/riscv/include/metadata.h Mon Jul 6 18:19:42 2020 (r362973) > @@ -30,6 +30,28 @@ > #ifndef _MACHINE_METADATA_H_ > #define _MACHINE_METADATA_H_ > > -#define MODINFOMD_DTBP 0x1001 > +#define MODINFOMD_DTBP 0x1001 > +#define MODINFOMD_EFI_MAP 0x1002 > + > +struct efi_map_header { > + size_t memory_size; > + size_t descriptor_size; > + uint32_t descriptor_version; > +}; > + > +/* > + * Placeholder for now > + */ > +struct efi_fb { > + uint64_t fb_addr; > + uint64_t fb_size; > + uint32_t fb_height; > + uint32_t fb_width; > + uint32_t fb_stride; > + uint32_t fb_mask_red; > + uint32_t fb_mask_green; > + uint32_t fb_mask_blue; > + uint32_t fb_mask_reserved; > +}; > > #endif /* !_MACHINE_METADATA_H_ */ From owner-svn-src-all@freebsd.org Mon Jul 6 18:43:00 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B95C136E206; Mon, 6 Jul 2020 18:43:00 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0vZr4VYYz4PSn; Mon, 6 Jul 2020 18:43:00 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7EDFB22CA4; Mon, 6 Jul 2020 18:43:00 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066Ih097068505; Mon, 6 Jul 2020 18:43:00 GMT (envelope-from mhorne@FreeBSD.org) Received: (from mhorne@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066Ih01S068504; Mon, 6 Jul 2020 18:43:00 GMT (envelope-from mhorne@FreeBSD.org) Message-Id: <202007061843.066Ih01S068504@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mhorne set sender to mhorne@FreeBSD.org using -f From: Mitchell Horne Date: Mon, 6 Jul 2020 18:43:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362974 - head/share/man/man5 X-SVN-Group: head X-SVN-Commit-Author: mhorne X-SVN-Commit-Paths: head/share/man/man5 X-SVN-Commit-Revision: 362974 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 18:43:00 -0000 Author: mhorne Date: Mon Jul 6 18:43:00 2020 New Revision: 362974 URL: https://svnweb.freebsd.org/changeset/base/362974 Log: src.conf.5: regen after r362972, r362973, RISC-V EFI support Modified: head/share/man/man5/src.conf.5 Modified: head/share/man/man5/src.conf.5 ============================================================================== --- head/share/man/man5/src.conf.5 Mon Jul 6 18:19:42 2020 (r362973) +++ head/share/man/man5/src.conf.5 Mon Jul 6 18:43:00 2020 (r362974) @@ -1,6 +1,6 @@ .\" DO NOT EDIT-- this file is @generated by tools/build/options/makeman. .\" $FreeBSD$ -.Dd June 24, 2020 +.Dd July 6, 2020 .Dt SRC.CONF 5 .Os .Sh NAME @@ -585,7 +585,7 @@ and .Xr efivar 8 . .Pp This is a default setting on -mips/mips, mips/mips64, powerpc/powerpc, powerpc/powerpc64, riscv/riscv64 and riscv/riscv64sf. +mips/mips, mips/mips64, powerpc/powerpc and powerpc/powerpc64. .It Va WITH_EFI Set to build .Xr efivar 3 @@ -593,7 +593,7 @@ and .Xr efivar 8 . .Pp This is a default setting on -amd64/amd64, arm/armv6, arm/armv7, arm64/aarch64 and i386/i386. +amd64/amd64, arm/armv6, arm/armv7, arm64/aarch64, i386/i386, riscv/riscv64 and riscv/riscv64sf. .It Va WITHOUT_ELFTOOLCHAIN_BOOTSTRAP Set to not build ELF Tool Chain tools (addr2line, nm, size, strings and strip) From owner-svn-src-all@freebsd.org Mon Jul 6 20:23:15 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 12C4D36FE34; Mon, 6 Jul 2020 20:23:15 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0xpV6cZCz4Wdr; Mon, 6 Jul 2020 20:23:14 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C7C4D23F94; Mon, 6 Jul 2020 20:23:14 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066KNEI7030328; Mon, 6 Jul 2020 20:23:14 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066KNEdZ030327; Mon, 6 Jul 2020 20:23:14 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007062023.066KNEdZ030327@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Mon, 6 Jul 2020 20:23:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r362975 - stable/11/sys/netinet6 X-SVN-Group: stable-11 X-SVN-Commit-Author: markj X-SVN-Commit-Paths: stable/11/sys/netinet6 X-SVN-Commit-Revision: 362975 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 20:23:15 -0000 Author: markj Date: Mon Jul 6 20:23:14 2020 New Revision: 362975 URL: https://svnweb.freebsd.org/changeset/base/362975 Log: MFC r359154: Fix synchronization in the IPV6_2292PKTOPTIONS set handler. Modified: stable/11/sys/netinet6/ip6_output.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/netinet6/ip6_output.c ============================================================================== --- stable/11/sys/netinet6/ip6_output.c Mon Jul 6 18:43:00 2020 (r362974) +++ stable/11/sys/netinet6/ip6_output.c Mon Jul 6 20:23:14 2020 (r362975) @@ -1514,8 +1514,10 @@ ip6_ctloutput(struct socket *so, struct sockopt *sopt) error = soopt_mcopyin(sopt, m); /* XXX */ if (error != 0) break; + INP_WLOCK(in6p); error = ip6_pcbopts(&in6p->in6p_outputopts, m, so, sopt); + INP_WUNLOCK(in6p); m_freem(m); /* XXX */ break; } @@ -2260,8 +2262,11 @@ ip6_pcbopts(struct ip6_pktopts **pktopt, struct mbuf * printf("ip6_pcbopts: all specified options are cleared.\n"); #endif ip6_clearpktopts(opt, -1); - } else - opt = malloc(sizeof(*opt), M_IP6OPT, M_WAITOK); + } else { + opt = malloc(sizeof(*opt), M_IP6OPT, M_NOWAIT); + if (opt == NULL) + return (ENOMEM); + } *pktopt = NULL; if (!m || m->m_len == 0) { From owner-svn-src-all@freebsd.org Mon Jul 6 20:54:40 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1EC5D348A17; Mon, 6 Jul 2020 20:54:40 +0000 (UTC) (envelope-from gonzo@freebsd.org) Received: from id.bluezbox.com (id.bluezbox.com [45.55.20.155]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0yVl6zPPz4Y7W; Mon, 6 Jul 2020 20:54:39 +0000 (UTC) (envelope-from gonzo@freebsd.org) Received: from localhost ([127.0.0.1] helo=id.bluezbox.com) by id.bluezbox.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94 (FreeBSD)) (envelope-from ) id 1jsY8M-000Ogj-BH; Mon, 06 Jul 2020 13:54:38 -0700 Received: (from gonzo@localhost) by id.bluezbox.com (8.15.2/8.15.2/Submit) id 066KschI094904; Mon, 6 Jul 2020 13:54:38 -0700 (PDT) (envelope-from gonzo@freebsd.org) X-Authentication-Warning: id.bluezbox.com: gonzo set sender to gonzo@freebsd.org using -f Date: Mon, 6 Jul 2020 13:54:38 -0700 From: Oleksandr Tymoshenko To: Peter Jeremy Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r362736 - head/sys/arm64/rockchip Message-ID: <20200706205438.GA94576@bluezbox.com> References: <202006282111.05SLBAAq025544@repo.freebsd.org> <20200701085747.GA23928@server.rulingia.com> <20200701124738.GA30133@server.rulingia.com> <20200703002623.GA18584@bluezbox.com> <20200705000739.GE30039@server.rulingia.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200705000739.GE30039@server.rulingia.com> X-Operating-System: FreeBSD/11.2-RELEASE-p10 (amd64) X-Spam-Level: -- X-Spam-Report: Spam detection software, running on the system "id.bluezbox.com", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see The administrator of that system for details. Content preview: Peter Jeremy (peter@rulingia.com) wrote: > On 2020-Jul-02 17:26:23 -0700, Oleksandr Tymoshenko wrote: > >Could you try kernel with this patch? It's mostly debug output, > >with one [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Rspamd-Queue-Id: 4B0yVl6zPPz4Y7W X-Spamd-Bar: / Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [0.00 / 15.00]; local_wl_from(0.00)[freebsd.org]; ASN(0.00)[asn:14061, ipnet:45.55.0.0/19, country:US] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 20:54:40 -0000 Peter Jeremy (peter@rulingia.com) wrote: > On 2020-Jul-02 17:26:23 -0700, Oleksandr Tymoshenko wrote: > >Could you try kernel with this patch? It's mostly debug output, > >with one possible clock-related fix. > > > >https://people.freebsd.org/~gonzo/patches/rk3328-gmac-debug.patch > > It's still not working for me. I get the following: > dwc0: mem 0xff540000-0xff54ffff irq 44 on ofwbus0 > setting RK3328 RX/TX delays: 24/36 > >>> RK3328_GRF_MAC_CON1 (00000413): > >>> gmac2io_gmii_clk_sel: 0x0 > >>> gmac2io_rmii_extclk_sel: 0x1 > >>> gmac2io_rmii_mode: 0x0 > >>> gmac2io_rmii_clk_sel: 0x0 > >>> gmac2io_phy_intf_sel: 0x1 > >>> gmac2io_flowctrl: 0x0 > >>> gmac2io_rxclk_dly_ena: 0x1 > >>> gmac2io_txclk_dly_ena: 0x1 > >>> RK3328_GRF_MAC_CON0 (00000c24): > miibus0: on dwc0 > rgephy0: PHY 0 on miibus0 > rgephy0: OUI 0x00e04c, model 0x0011, rev. 6 > rgephy0: none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT-FDX, 1000baseT-FDX-master, auto Thanks for running the test. Register values seem OK :( > >I have Rock64 v2, which, as you mentioned, has a known issue with GigE, so > >my tests are not reliable. I'll try to get another RK3328 board for tests, > >but it may take some time. > > I've asked on -arm if anyone else has tried this on a Rock64 v2 or v3. > > >If the clock fix doesn't help, I'll make > >delays configuration run-time configurable with off by default until > >more hardware is tested. > > That sounds like a good way forward - maybe boot and run-time configurable. > It's a pity that there doesn't seem to be any documentation on what the > numbers represent (or what the "default" value is) - which means that > actually adjusting the delay numbers would be very time consuming. There are no "default" values AFAIK. They depend on the board schematics. I was told that Rockhip partners use some kind of proprietary tool which they feed with values based on the scematics (like trace lengths) and tool calculates delays. With boot-time or run-time configuration I think it's possible to automate the search for good value. Something like this: https://github.com/ayufan-rock64/linux-build/blob/master/recipes/gmac-delays-test/range-test but with loader.conf modifications instead of DTB -- gonzo From owner-svn-src-all@freebsd.org Mon Jul 6 21:20:58 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 926CD3491A7; Mon, 6 Jul 2020 21:20:58 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0z563PSxz4ZmR; Mon, 6 Jul 2020 21:20:58 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 56EA324912; Mon, 6 Jul 2020 21:20:58 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066LKw7v063633; Mon, 6 Jul 2020 21:20:58 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066LKwdV063632; Mon, 6 Jul 2020 21:20:58 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007062120.066LKwdV063632@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Mon, 6 Jul 2020 21:20:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362976 - head/sys/net/route X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: head/sys/net/route X-SVN-Commit-Revision: 362976 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 21:20:58 -0000 Author: markj Date: Mon Jul 6 21:20:57 2020 New Revision: 362976 URL: https://svnweb.freebsd.org/changeset/base/362976 Log: Split nhop_ref_object(). Now nhop_ref_object() unconditionally acquires a reference, and the new nhop_try_ref_object() uses refcount_acquire_if_not_zero() to conditionally acquire a reference. Since the former is cheaper, use it when we know that the initial counter value is non-zero. No functional change intended. Reviewed by: melifaro Differential Revision: https://reviews.freebsd.org/D25535 Modified: head/sys/net/route/nhop_ctl.c head/sys/net/route/shared.h Modified: head/sys/net/route/nhop_ctl.c ============================================================================== --- head/sys/net/route/nhop_ctl.c Mon Jul 6 20:23:14 2020 (r362975) +++ head/sys/net/route/nhop_ctl.c Mon Jul 6 21:20:57 2020 (r362976) @@ -598,10 +598,19 @@ destroy_nhop_epoch(epoch_context_t ctx) destroy_nhop(nh_priv); } -int +void nhop_ref_object(struct nhop_object *nh) { + u_int old; + old = refcount_acquire(&nh->nh_priv->nh_refcnt); + KASSERT(old > 0, ("%s: nhop object %p has 0 refs", __func__, nh)); +} + +int +nhop_try_ref_object(struct nhop_object *nh) +{ + return (refcount_acquire_if_not_zero(&nh->nh_priv->nh_refcnt)); } @@ -654,7 +663,7 @@ int nhop_ref_any(struct nhop_object *nh) { - return (nhop_ref_object(nh)); + return (nhop_try_ref_object(nh)); } void Modified: head/sys/net/route/shared.h ============================================================================== --- head/sys/net/route/shared.h Mon Jul 6 20:23:14 2020 (r362975) +++ head/sys/net/route/shared.h Mon Jul 6 21:20:57 2020 (r362976) @@ -51,7 +51,8 @@ struct rib_head; void nhops_init(void); int nhops_init_rib(struct rib_head *rh); void nhops_destroy_rib(struct rib_head *rh); -int nhop_ref_object(struct nhop_object *nh); +void nhop_ref_object(struct nhop_object *nh); +int nhop_try_ref_object(struct nhop_object *nh); int nhop_ref_any(struct nhop_object *nh); void nhop_free_any(struct nhop_object *nh); From owner-svn-src-all@freebsd.org Mon Jul 6 21:29:51 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0A5E03492D1; Mon, 6 Jul 2020 21:29:51 +0000 (UTC) (envelope-from kp@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0zHL6V1Pz4Zy6; Mon, 6 Jul 2020 21:29:50 +0000 (UTC) (envelope-from kp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A811C24A27; Mon, 6 Jul 2020 21:29:50 +0000 (UTC) (envelope-from kp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066LToVf067105; Mon, 6 Jul 2020 21:29:50 GMT (envelope-from kp@FreeBSD.org) Received: (from kp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066LToSl067104; Mon, 6 Jul 2020 21:29:50 GMT (envelope-from kp@FreeBSD.org) Message-Id: <202007062129.066LToSl067104@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kp set sender to kp@FreeBSD.org using -f From: Kristof Provost Date: Mon, 6 Jul 2020 21:29:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362977 - head/sys/riscv/riscv X-SVN-Group: head X-SVN-Commit-Author: kp X-SVN-Commit-Paths: head/sys/riscv/riscv X-SVN-Commit-Revision: 362977 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 21:29:51 -0000 Author: kp Date: Mon Jul 6 21:29:50 2020 New Revision: 362977 URL: https://svnweb.freebsd.org/changeset/base/362977 Log: riscv plic: Do not complete interrupts until the interrupt handler has run We cannot complete the interrupt (i.e. write to the claims/complete register until the interrupt handler has actually run. We don't run the interrupt handler immediately from intr_isrc_dispatch(), we only schedule it for later execution. If we immediately complete it (i.e. before the interrupt handler proper has run) the interrupt may be triggered again if the interrupt source remains set. From RISC-V Instruction Set Manual: Volume II: Priviliged Architecture, 7.4 Interrupt Gateways: "If a level-sensitive interrupt source deasserts the interrupt after the PLIC core accepts the request and before the interrupt is serviced, the interrupt request remains present in the IP bit of the PLIC core and will be serviced by a handler, which will then have to determine that the interrupt device no longer requires service." In other words, we may receive interrupts twice. Avoid that by postponing the completion until after the interrupt handler has run. If the interrupt is handled by a filter rather than by scheduling an interrupt thread we must also complete the interrupt, so set up a post_filter handler (which is the same as the post_ithread handler). Reviewed by: mhorne Sponsored by: Axiado Differential Revision: https://reviews.freebsd.org/D25531 Modified: head/sys/riscv/riscv/plic.c Modified: head/sys/riscv/riscv/plic.c ============================================================================== --- head/sys/riscv/riscv/plic.c Mon Jul 6 21:20:57 2020 (r362976) +++ head/sys/riscv/riscv/plic.c Mon Jul 6 21:29:50 2020 (r362977) @@ -169,11 +169,11 @@ plic_intr(void *arg) sc = arg; cpu = PCPU_GET(cpuid); + /* Claim any pending interrupt. */ pending = RD4(sc, PLIC_CLAIM(sc, cpu)); if (pending) { tf = curthread->td_intr_frame; plic_irq_dispatch(sc, pending, tf); - WR4(sc, PLIC_CLAIM(sc, cpu), pending); } return (FILTER_HANDLED); @@ -384,7 +384,17 @@ plic_pre_ithread(device_t dev, struct intr_irqsrc *isr static void plic_post_ithread(device_t dev, struct intr_irqsrc *isrc) { + struct plic_softc *sc; + struct plic_irqsrc *src; + uint32_t cpu; + sc = device_get_softc(dev); + src = (struct plic_irqsrc *)isrc; + + cpu = CPU_FFS(&isrc->isrc_cpu) - 1; + + /* Complete the interrupt. */ + WR4(sc, PLIC_CLAIM(sc, cpu), src->irq); plic_enable_intr(dev, isrc); } @@ -451,6 +461,7 @@ static device_method_t plic_methods[] = { DEVMETHOD(pic_map_intr, plic_map_intr), DEVMETHOD(pic_pre_ithread, plic_pre_ithread), DEVMETHOD(pic_post_ithread, plic_post_ithread), + DEVMETHOD(pic_post_filter, plic_post_ithread), DEVMETHOD(pic_setup_intr, plic_setup_intr), DEVMETHOD(pic_bind_intr, plic_bind_intr), From owner-svn-src-all@freebsd.org Mon Jul 6 21:39:15 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 054BA3495FE; Mon, 6 Jul 2020 21:39:15 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B0zVB6KJNz4brx; Mon, 6 Jul 2020 21:39:14 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B8A6224AC8; Mon, 6 Jul 2020 21:39:14 +0000 (UTC) (envelope-from mhorne@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066LdEKd073620; Mon, 6 Jul 2020 21:39:14 GMT (envelope-from mhorne@FreeBSD.org) Received: (from mhorne@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066LdE5b073619; Mon, 6 Jul 2020 21:39:14 GMT (envelope-from mhorne@FreeBSD.org) Message-Id: <202007062139.066LdE5b073619@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mhorne set sender to mhorne@FreeBSD.org using -f From: Mitchell Horne Date: Mon, 6 Jul 2020 21:39:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362978 - head/stand X-SVN-Group: head X-SVN-Commit-Author: mhorne X-SVN-Commit-Paths: head/stand X-SVN-Commit-Revision: 362978 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 21:39:15 -0000 Author: mhorne Date: Mon Jul 6 21:39:14 2020 New Revision: 362978 URL: https://svnweb.freebsd.org/changeset/base/362978 Log: Fix cleandir target post r362973 Reported by: mmacy Modified: head/stand/defs.mk Modified: head/stand/defs.mk ============================================================================== --- head/stand/defs.mk Mon Jul 6 21:29:50 2020 (r362977) +++ head/stand/defs.mk Mon Jul 6 21:39:14 2020 (r362978) @@ -151,7 +151,7 @@ CFLAGS+= -fPIC # Some RISC-V linkers have support for relaxations, while some (lld) do not # yet. If this is the case we inhibit the compiler from emitting relaxations. -.if ${LINKER_FEATURES:Mriscv-relaxations} == "" +.if ${MACHINE_CPUARCH} == "riscv" && ${LINKER_FEATURES:Mriscv-relaxations} == "" CFLAGS+= -mno-relax .endif From owner-svn-src-all@freebsd.org Mon Jul 6 22:39:43 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7B1E134A933; Mon, 6 Jul 2020 22:39:43 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B10qz1rhxz4fgV; Mon, 6 Jul 2020 22:39:43 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 22A6E257A3; Mon, 6 Jul 2020 22:39:43 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 066MdhIq011218; Mon, 6 Jul 2020 22:39:43 GMT (envelope-from brooks@FreeBSD.org) Received: (from brooks@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 066MdgeD011217; Mon, 6 Jul 2020 22:39:42 GMT (envelope-from brooks@FreeBSD.org) Message-Id: <202007062239.066MdgeD011217@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: brooks set sender to brooks@FreeBSD.org using -f From: Brooks Davis Date: Mon, 6 Jul 2020 22:39:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362979 - head/cddl/contrib/opensolaris/tools/ctf/cvt X-SVN-Group: head X-SVN-Commit-Author: brooks X-SVN-Commit-Paths: head/cddl/contrib/opensolaris/tools/ctf/cvt X-SVN-Commit-Revision: 362979 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jul 2020 22:39:43 -0000 Author: brooks Date: Mon Jul 6 22:39:42 2020 New Revision: 362979 URL: https://svnweb.freebsd.org/changeset/base/362979 Log: Fix a Wvoid-pointer-to-enum-cast warning missed in r359978. This pattern is used in callbacks with void * data arguments and seems both relatively uncommon and relatively harmless. Silence the warning by casting through uintptr_t. This warning is on by default in Clang 11. MFC after: 3 days Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D24425 Modified: head/cddl/contrib/opensolaris/tools/ctf/cvt/iidesc.c Modified: head/cddl/contrib/opensolaris/tools/ctf/cvt/iidesc.c ============================================================================== --- head/cddl/contrib/opensolaris/tools/ctf/cvt/iidesc.c Mon Jul 6 21:39:14 2020 (r362978) +++ head/cddl/contrib/opensolaris/tools/ctf/cvt/iidesc.c Mon Jul 6 22:39:42 2020 (r362979) @@ -179,7 +179,7 @@ int iidesc_count_type(void *data, void *private) { iidesc_t *ii = data; - iitype_t match = (iitype_t)private; + iitype_t match = (iitype_t)(uintptr_t)private; return (ii->ii_type == match); } From owner-svn-src-all@freebsd.org Tue Jul 7 00:42:24 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2CF4434DD03; Tue, 7 Jul 2020 00:42:24 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B13YX0RFhz3X1h; Tue, 7 Jul 2020 00:42:24 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E650026B5D; Tue, 7 Jul 2020 00:42:23 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0670gNYG090085; Tue, 7 Jul 2020 00:42:23 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0670gNpp090084; Tue, 7 Jul 2020 00:42:23 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202007070042.0670gNpp090084@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Tue, 7 Jul 2020 00:42:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362980 - head/sys/fs/nfs X-SVN-Group: head X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: head/sys/fs/nfs X-SVN-Commit-Revision: 362980 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 00:42:24 -0000 Author: rmacklem Date: Tue Jul 7 00:42:23 2020 New Revision: 362980 URL: https://svnweb.freebsd.org/changeset/base/362980 Log: Add support for ext_pgs mbufs to nfsrvd_rephead(). This is another in the series of commits that add support to the NFS client and server for building RPC messages in ext_pgs mbufs with anonymous pages. This is useful so that the entire mbuf list does not need to be copied before calling sosend() when NFS over TLS is enabled. Since ND_EXTPG is never set yet, there is no semantic change at this time. Modified: head/sys/fs/nfs/nfs_commonsubs.c Modified: head/sys/fs/nfs/nfs_commonsubs.c ============================================================================== --- head/sys/fs/nfs/nfs_commonsubs.c Mon Jul 6 22:39:42 2020 (r362979) +++ head/sys/fs/nfs/nfs_commonsubs.c Tue Jul 7 00:42:23 2020 (r362980) @@ -4443,21 +4443,30 @@ nfsrvd_rephead(struct nfsrv_descript *nd) { struct mbuf *mreq; - /* - * If this is a big reply, use a cluster. - */ - if ((nd->nd_flag & ND_GSSINITREPLY) == 0 && - nfs_bigreply[nd->nd_procnum]) { - NFSMCLGET(mreq, M_WAITOK); - nd->nd_mreq = mreq; - nd->nd_mb = mreq; + if ((nd->nd_flag & ND_EXTPG) != 0) { + mreq = mb_alloc_ext_plus_pages(PAGE_SIZE, M_WAITOK); + nd->nd_mreq = nd->nd_mb = mreq; + nd->nd_bpos = (char *)(void *) + PHYS_TO_DMAP(mreq->m_epg_pa[0]); + nd->nd_bextpg = 0; + nd->nd_bextpgsiz = PAGE_SIZE; } else { - NFSMGET(mreq); - nd->nd_mreq = mreq; - nd->nd_mb = mreq; + /* + * If this is a big reply, use a cluster. + */ + if ((nd->nd_flag & ND_GSSINITREPLY) == 0 && + nfs_bigreply[nd->nd_procnum]) { + NFSMCLGET(mreq, M_WAITOK); + nd->nd_mreq = mreq; + nd->nd_mb = mreq; + } else { + NFSMGET(mreq); + nd->nd_mreq = mreq; + nd->nd_mb = mreq; + } + nd->nd_bpos = mtod(mreq, char *); + mreq->m_len = 0; } - nd->nd_bpos = mtod(mreq, caddr_t); - mreq->m_len = 0; if ((nd->nd_flag & ND_GSSINITREPLY) == 0) NFSM_BUILD(nd->nd_errp, int *, NFSX_UNSIGNED); From owner-svn-src-all@freebsd.org Tue Jul 7 02:41:51 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DB602350CAB; Tue, 7 Jul 2020 02:41:51 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B16CM5WPKz3dNl; Tue, 7 Jul 2020 02:41:51 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A0A9C8784; Tue, 7 Jul 2020 02:41:51 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0672fpah063698; Tue, 7 Jul 2020 02:41:51 GMT (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0672fpNo063696; Tue, 7 Jul 2020 02:41:51 GMT (envelope-from glebius@FreeBSD.org) Message-Id: <202007070241.0672fpNo063696@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: glebius set sender to glebius@FreeBSD.org using -f From: Gleb Smirnoff Date: Tue, 7 Jul 2020 02:41:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362981 - in head: . share/man/man9 X-SVN-Group: head X-SVN-Commit-Author: glebius X-SVN-Commit-Paths: in head: . share/man/man9 X-SVN-Commit-Revision: 362981 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 02:41:51 -0000 Author: glebius Date: Tue Jul 7 02:41:51 2020 New Revision: 362981 URL: https://svnweb.freebsd.org/changeset/base/362981 Log: Fixup for r360574: install new mlinks for sglist(9) and remove old ones. Modified: head/ObsoleteFiles.inc head/share/man/man9/Makefile Modified: head/ObsoleteFiles.inc ============================================================================== --- head/ObsoleteFiles.inc Tue Jul 7 00:42:23 2020 (r362980) +++ head/ObsoleteFiles.inc Tue Jul 7 02:41:51 2020 (r362981) @@ -36,6 +36,12 @@ # xargs -n1 | sort | uniq -d; # done +# 20200706: update of sglist(9), r360574 +OLD_FILES+=usr/share/man/man9/sglist_append_ext_pgs.9 +OLD_FILES+=usr/share/man/man9/sglist_append_mb_ext_pgs.9 +OLD_FILES+=usr/share/man/man9/sglist_count_ext_pgs.9 +OLD_FILES+=usr/share/man/man9/sglist_count_mb_ext_pgs.9 + # 20200617: update opencsd to 0.14.2 OLD_FILES+=usr/include/opencsd/etmv4/trc_pkt_elem_etmv4d.h Modified: head/share/man/man9/Makefile ============================================================================== --- head/share/man/man9/Makefile Tue Jul 7 00:42:23 2020 (r362980) +++ head/share/man/man9/Makefile Tue Jul 7 02:41:51 2020 (r362981) @@ -1902,9 +1902,8 @@ MLINKS+=sf_buf.9 sf_buf_alloc.9 \ MLINKS+=sglist.9 sglist_alloc.9 \ sglist.9 sglist_append.9 \ sglist.9 sglist_append_bio.9 \ - sglist.9 sglist_append_ext_pgs.9 \ - sglist.9 sglist_append_mb_ext_pgs.9 \ sglist.9 sglist_append_mbuf.9 \ + sglist.9 sglist_append_mbuf_epg.9 \ sglist.9 sglist_append_phys.9 \ sglist.9 sglist_append_sglist.9 \ sglist.9 sglist_append_uio.9 \ @@ -1914,8 +1913,7 @@ MLINKS+=sglist.9 sglist_alloc.9 \ sglist.9 sglist_clone.9 \ sglist.9 sglist_consume_uio.9 \ sglist.9 sglist_count.9 \ - sglist.9 sglist_count_ext_pgs.9 \ - sglist.9 sglist_count_mb_ext_pgs.9 \ + sglist.9 sglist_count_mbuf_epg.9 \ sglist.9 sglist_count_vmpages.9 \ sglist.9 sglist_free.9 \ sglist.9 sglist_hold.9 \ From owner-svn-src-all@freebsd.org Tue Jul 7 02:43:54 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id A2B6E350EC9; Tue, 7 Jul 2020 02:43:54 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B16Fk3sx1z3f0V; Tue, 7 Jul 2020 02:43:54 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 695058374; Tue, 7 Jul 2020 02:43:54 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0672hsKq063827; Tue, 7 Jul 2020 02:43:54 GMT (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0672hsf8063826; Tue, 7 Jul 2020 02:43:54 GMT (envelope-from glebius@FreeBSD.org) Message-Id: <202007070243.0672hsf8063826@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: glebius set sender to glebius@FreeBSD.org using -f From: Gleb Smirnoff Date: Tue, 7 Jul 2020 02:43:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362982 - head X-SVN-Group: head X-SVN-Commit-Author: glebius X-SVN-Commit-Paths: head X-SVN-Commit-Revision: 362982 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 02:43:54 -0000 Author: glebius Date: Tue Jul 7 02:43:53 2020 New Revision: 362982 URL: https://svnweb.freebsd.org/changeset/base/362982 Log: Fixup r362981: remove gzipped manual pages. Pointy hat to: glebius Modified: head/ObsoleteFiles.inc Modified: head/ObsoleteFiles.inc ============================================================================== --- head/ObsoleteFiles.inc Tue Jul 7 02:41:51 2020 (r362981) +++ head/ObsoleteFiles.inc Tue Jul 7 02:43:53 2020 (r362982) @@ -37,10 +37,10 @@ # done # 20200706: update of sglist(9), r360574 -OLD_FILES+=usr/share/man/man9/sglist_append_ext_pgs.9 -OLD_FILES+=usr/share/man/man9/sglist_append_mb_ext_pgs.9 -OLD_FILES+=usr/share/man/man9/sglist_count_ext_pgs.9 -OLD_FILES+=usr/share/man/man9/sglist_count_mb_ext_pgs.9 +OLD_FILES+=usr/share/man/man9/sglist_append_ext_pgs.9.gz +OLD_FILES+=usr/share/man/man9/sglist_append_mb_ext_pgs.9.gz +OLD_FILES+=usr/share/man/man9/sglist_count_ext_pgs.9.gz +OLD_FILES+=usr/share/man/man9/sglist_count_mb_ext_pgs.9.gz # 20200617: update opencsd to 0.14.2 OLD_FILES+=usr/include/opencsd/etmv4/trc_pkt_elem_etmv4d.h From owner-svn-src-all@freebsd.org Tue Jul 7 06:04:21 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E7625356CED; Tue, 7 Jul 2020 06:04:21 +0000 (UTC) (envelope-from lwhsu@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1Bj15wLdz46gl; Tue, 7 Jul 2020 06:04:21 +0000 (UTC) (envelope-from lwhsu@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id AF84DAB45; Tue, 7 Jul 2020 06:04:21 +0000 (UTC) (envelope-from lwhsu@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06764LjS089732; Tue, 7 Jul 2020 06:04:21 GMT (envelope-from lwhsu@FreeBSD.org) Received: (from lwhsu@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06764Ls7089731; Tue, 7 Jul 2020 06:04:21 GMT (envelope-from lwhsu@FreeBSD.org) Message-Id: <202007070604.06764Ls7089731@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: lwhsu set sender to lwhsu@FreeBSD.org using -f From: Li-Wen Hsu Date: Tue, 7 Jul 2020 06:04:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r362983 - stable/12/share/man/man7 X-SVN-Group: stable-12 X-SVN-Commit-Author: lwhsu X-SVN-Commit-Paths: stable/12/share/man/man7 X-SVN-Commit-Revision: 362983 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 06:04:22 -0000 Author: lwhsu Date: Tue Jul 7 06:04:21 2020 New Revision: 362983 URL: https://svnweb.freebsd.org/changeset/base/362983 Log: MFC r362539: Mention CI system information in development(7) Approved by: 0mp, bcr Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D25340 Modified: stable/12/share/man/man7/development.7 Directory Properties: stable/12/ (props changed) Modified: stable/12/share/man/man7/development.7 ============================================================================== --- stable/12/share/man/man7/development.7 Tue Jul 7 02:43:53 2020 (r362982) +++ stable/12/share/man/man7/development.7 Tue Jul 7 06:04:21 2020 (r362983) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd August 22, 2018 +.Dd June 23, 2020 .Dt DEVELOPMENT 7 .Os .Sh NAME @@ -103,6 +103,14 @@ suggest improvements, and, eventually, allows them to commit it: .Pp .Lk https://reviews.FreeBSD.org/ +.Pp +To check the latest +.Fx +build and test status of CURRENT and STABLE branches, +the continuous integration system is at: +.Pp +.Lk https://ci.FreeBSD.org +.Pp .Sh EXAMPLES Check out the CURRENT branch, build it, and install, overwriting the current system: From owner-svn-src-all@freebsd.org Tue Jul 7 07:02:39 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id EE771357E2B; Tue, 7 Jul 2020 07:02:39 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1D0H6JFWz498Q; Tue, 7 Jul 2020 07:02:39 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BBC65BADF; Tue, 7 Jul 2020 07:02:39 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06772d3j025904; Tue, 7 Jul 2020 07:02:39 GMT (envelope-from se@FreeBSD.org) Received: (from se@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06772XFl025873; Tue, 7 Jul 2020 07:02:33 GMT (envelope-from se@FreeBSD.org) Message-Id: <202007070702.06772XFl025873@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: se set sender to se@FreeBSD.org using -f From: =?UTF-8?Q?Stefan_E=c3=9fer?= Date: Tue, 7 Jul 2020 07:02:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r362984 - in vendor/bc/dist: . gen include locales manuals manuals/bc manuals/dc src src/bc src/dc src/history src/rand tests tests/bc tests/bc/errors tests/dc tests/dc/errors X-SVN-Group: vendor X-SVN-Commit-Author: se X-SVN-Commit-Paths: in vendor/bc/dist: . gen include locales manuals manuals/bc manuals/dc src src/bc src/dc src/history src/rand tests tests/bc tests/bc/errors tests/dc tests/dc/errors X-SVN-Commit-Revision: 362984 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 07:02:40 -0000 Author: se Date: Tue Jul 7 07:02:33 2020 New Revision: 362984 URL: https://svnweb.freebsd.org/changeset/base/362984 Log: Update to release 3.1.1 This release fixes a regression from traditional bc behavior in FreeBSD with regard to "-e quit" being passed on the command line and add Spanish message catalogs. Added: vendor/bc/dist/locales/es_ES.ISO8859-1.msg vendor/bc/dist/locales/es_ES.ISO8859-15.msg (contents, props changed) vendor/bc/dist/manuals/bc/ vendor/bc/dist/manuals/bc.1.md.in (contents, props changed) vendor/bc/dist/manuals/bc/A.1 (contents, props changed) vendor/bc/dist/manuals/bc/A.1.md vendor/bc/dist/manuals/bc/E.1 (contents, props changed) vendor/bc/dist/manuals/bc/E.1.md vendor/bc/dist/manuals/bc/EH.1 (contents, props changed) vendor/bc/dist/manuals/bc/EH.1.md vendor/bc/dist/manuals/bc/EHN.1 (contents, props changed) vendor/bc/dist/manuals/bc/EHN.1.md vendor/bc/dist/manuals/bc/EHNP.1 (contents, props changed) vendor/bc/dist/manuals/bc/EHNP.1.md vendor/bc/dist/manuals/bc/EHP.1 (contents, props changed) vendor/bc/dist/manuals/bc/EHP.1.md vendor/bc/dist/manuals/bc/EN.1 (contents, props changed) vendor/bc/dist/manuals/bc/EN.1.md vendor/bc/dist/manuals/bc/ENP.1 (contents, props changed) vendor/bc/dist/manuals/bc/ENP.1.md vendor/bc/dist/manuals/bc/EP.1 (contents, props changed) vendor/bc/dist/manuals/bc/EP.1.md vendor/bc/dist/manuals/bc/H.1 (contents, props changed) vendor/bc/dist/manuals/bc/H.1.md vendor/bc/dist/manuals/bc/HN.1 (contents, props changed) vendor/bc/dist/manuals/bc/HN.1.md vendor/bc/dist/manuals/bc/HNP.1 (contents, props changed) vendor/bc/dist/manuals/bc/HNP.1.md vendor/bc/dist/manuals/bc/HP.1 (contents, props changed) vendor/bc/dist/manuals/bc/HP.1.md vendor/bc/dist/manuals/bc/N.1 (contents, props changed) vendor/bc/dist/manuals/bc/N.1.md vendor/bc/dist/manuals/bc/NP.1 (contents, props changed) vendor/bc/dist/manuals/bc/NP.1.md vendor/bc/dist/manuals/bc/P.1 (contents, props changed) vendor/bc/dist/manuals/bc/P.1.md vendor/bc/dist/manuals/dc/ vendor/bc/dist/manuals/dc.1.md.in (contents, props changed) vendor/bc/dist/manuals/dc/A.1 (contents, props changed) vendor/bc/dist/manuals/dc/A.1.md vendor/bc/dist/manuals/dc/E.1 (contents, props changed) vendor/bc/dist/manuals/dc/E.1.md vendor/bc/dist/manuals/dc/EH.1 (contents, props changed) vendor/bc/dist/manuals/dc/EH.1.md vendor/bc/dist/manuals/dc/EHN.1 (contents, props changed) vendor/bc/dist/manuals/dc/EHN.1.md vendor/bc/dist/manuals/dc/EHNP.1 (contents, props changed) vendor/bc/dist/manuals/dc/EHNP.1.md vendor/bc/dist/manuals/dc/EHP.1 (contents, props changed) vendor/bc/dist/manuals/dc/EHP.1.md vendor/bc/dist/manuals/dc/EN.1 (contents, props changed) vendor/bc/dist/manuals/dc/EN.1.md vendor/bc/dist/manuals/dc/ENP.1 (contents, props changed) vendor/bc/dist/manuals/dc/ENP.1.md vendor/bc/dist/manuals/dc/EP.1 (contents, props changed) vendor/bc/dist/manuals/dc/EP.1.md vendor/bc/dist/manuals/dc/H.1 (contents, props changed) vendor/bc/dist/manuals/dc/H.1.md vendor/bc/dist/manuals/dc/HN.1 (contents, props changed) vendor/bc/dist/manuals/dc/HN.1.md vendor/bc/dist/manuals/dc/HNP.1 (contents, props changed) vendor/bc/dist/manuals/dc/HNP.1.md vendor/bc/dist/manuals/dc/HP.1 (contents, props changed) vendor/bc/dist/manuals/dc/HP.1.md vendor/bc/dist/manuals/dc/N.1 (contents, props changed) vendor/bc/dist/manuals/dc/N.1.md vendor/bc/dist/manuals/dc/NP.1 (contents, props changed) vendor/bc/dist/manuals/dc/NP.1.md vendor/bc/dist/manuals/dc/P.1 (contents, props changed) vendor/bc/dist/manuals/dc/P.1.md vendor/bc/dist/tests/bc/errors/23.txt (contents, props changed) vendor/bc/dist/tests/bc/errors/24.txt (contents, props changed) vendor/bc/dist/tests/dc/errors/25.txt (contents, props changed) vendor/bc/dist/tests/dc/errors/26.txt (contents, props changed) vendor/bc/dist/tests/dc/errors/27.txt (contents, props changed) vendor/bc/dist/tests/dc/errors/28.txt (contents, props changed) vendor/bc/dist/tests/dc/errors/29.txt (contents, props changed) Deleted: vendor/bc/dist/TODO.md vendor/bc/dist/manuals/bc.1 vendor/bc/dist/manuals/bc.1.ronn vendor/bc/dist/manuals/bc.md vendor/bc/dist/manuals/dc.1 vendor/bc/dist/manuals/dc.1.ronn vendor/bc/dist/manuals/dc.md Modified: vendor/bc/dist/.gitignore vendor/bc/dist/LICENSE.md vendor/bc/dist/Makefile.in vendor/bc/dist/NEWS.md vendor/bc/dist/README.md vendor/bc/dist/configure.sh vendor/bc/dist/functions.sh vendor/bc/dist/gen/bc_help.txt vendor/bc/dist/gen/dc_help.txt vendor/bc/dist/gen/lib.bc vendor/bc/dist/gen/lib2.bc vendor/bc/dist/gen/strgen.c vendor/bc/dist/gen/strgen.sh vendor/bc/dist/include/args.h vendor/bc/dist/include/bc.h vendor/bc/dist/include/dc.h vendor/bc/dist/include/file.h vendor/bc/dist/include/history.h vendor/bc/dist/include/lang.h vendor/bc/dist/include/lex.h vendor/bc/dist/include/num.h vendor/bc/dist/include/opt.h vendor/bc/dist/include/parse.h vendor/bc/dist/include/program.h vendor/bc/dist/include/rand.h vendor/bc/dist/include/read.h vendor/bc/dist/include/status.h vendor/bc/dist/include/vector.h vendor/bc/dist/include/vm.h vendor/bc/dist/install.sh vendor/bc/dist/karatsuba.py vendor/bc/dist/link.sh vendor/bc/dist/locale_install.sh vendor/bc/dist/locale_uninstall.sh vendor/bc/dist/locales/de_DE.ISO8859-1.msg vendor/bc/dist/locales/de_DE.UTF-8.msg vendor/bc/dist/locales/en_US.msg vendor/bc/dist/locales/es_ES.UTF-8.msg vendor/bc/dist/locales/fr_FR.ISO8859-1.msg vendor/bc/dist/locales/fr_FR.UTF-8.msg vendor/bc/dist/locales/ja_JP.UTF-8.msg vendor/bc/dist/locales/ja_JP.eucJP.msg vendor/bc/dist/locales/nl_NL.ISO8859-1.msg vendor/bc/dist/locales/nl_NL.UTF-8.msg vendor/bc/dist/locales/pl_PL.ISO8859-2.msg vendor/bc/dist/locales/pl_PL.UTF-8.msg vendor/bc/dist/locales/pt_PT.ISO8859-1.msg vendor/bc/dist/locales/pt_PT.UTF-8.msg vendor/bc/dist/locales/ru_RU.CP1251.msg vendor/bc/dist/locales/ru_RU.CP866.msg vendor/bc/dist/locales/ru_RU.ISO8859-5.msg vendor/bc/dist/locales/ru_RU.KOI8-R.msg vendor/bc/dist/locales/ru_RU.UTF-8.msg vendor/bc/dist/locales/zh_CN.GB18030.msg vendor/bc/dist/locales/zh_CN.GB2312.msg vendor/bc/dist/locales/zh_CN.GBK.msg vendor/bc/dist/locales/zh_CN.UTF-8.msg vendor/bc/dist/locales/zh_CN.eucCN.msg vendor/bc/dist/manpage.sh vendor/bc/dist/manuals/build.md vendor/bc/dist/release.sh vendor/bc/dist/src/args.c vendor/bc/dist/src/bc/bc.c vendor/bc/dist/src/bc/lex.c vendor/bc/dist/src/bc/parse.c vendor/bc/dist/src/data.c vendor/bc/dist/src/dc/dc.c vendor/bc/dist/src/dc/lex.c vendor/bc/dist/src/dc/parse.c vendor/bc/dist/src/file.c vendor/bc/dist/src/history/history.c vendor/bc/dist/src/lang.c vendor/bc/dist/src/lex.c vendor/bc/dist/src/main.c vendor/bc/dist/src/num.c vendor/bc/dist/src/opt.c vendor/bc/dist/src/parse.c vendor/bc/dist/src/program.c vendor/bc/dist/src/rand/rand.c vendor/bc/dist/src/read.c vendor/bc/dist/src/vector.c vendor/bc/dist/src/vm.c vendor/bc/dist/tests/afl.py vendor/bc/dist/tests/all.sh vendor/bc/dist/tests/bc/misc2.txt vendor/bc/dist/tests/bc/misc2_results.txt vendor/bc/dist/tests/bc/timeconst.sh vendor/bc/dist/tests/dc/stdin.txt vendor/bc/dist/tests/dc/stdin_results.txt vendor/bc/dist/tests/errors.sh vendor/bc/dist/tests/radamsa.sh vendor/bc/dist/tests/randmath.py vendor/bc/dist/tests/read.sh vendor/bc/dist/tests/script.sh vendor/bc/dist/tests/scripts.sh vendor/bc/dist/tests/stdin.sh vendor/bc/dist/tests/test.sh Directory Properties: vendor/bc/dist/ (props changed) vendor/bc/dist/manuals/ (props changed) Modified: vendor/bc/dist/.gitignore ============================================================================== --- vendor/bc/dist/.gitignore Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/.gitignore Tue Jul 7 07:02:33 2020 (r362984) @@ -17,6 +17,12 @@ bc.old .math.txt .results.txt .ops.txt +manuals/bc.1 +manuals/bc.1.ronn +manuals/bc.1.md +manuals/dc.1 +manuals/dc.1.ronn +manuals/dc.1.md gen/strgen lib.c lib2.c Modified: vendor/bc/dist/LICENSE.md ============================================================================== --- vendor/bc/dist/LICENSE.md Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/LICENSE.md Tue Jul 7 07:02:33 2020 (r362984) @@ -2,8 +2,6 @@ Copyright (c) 2018-2020 Gavin D. Howard -All rights reserved. - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -34,8 +32,6 @@ Copyright (c) 2010-2014, Salvatore Sanfilippo
Copyright (c) 2018 rain-1
Copyright (c) 2018-2020, Gavin D. Howard - -All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Modified: vendor/bc/dist/Makefile.in ============================================================================== --- vendor/bc/dist/Makefile.in Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/Makefile.in Tue Jul 7 07:02:33 2020 (r362984) @@ -1,8 +1,8 @@ # +# SPDX-License-Identifier: BSD-2-Clause +# # Copyright (c) 2018-2020 Gavin D. Howard and contributors. # -# All rights reserved. -# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # @@ -29,7 +29,7 @@ # .POSIX: -VERSION = 3.0.2 +VERSION = 3.1.1 SRC = %%SRC%% OBJ = %%OBJ%% @@ -105,10 +105,10 @@ DC_EXEC = $(BIN)/$(EXEC_PREFIX)$(DC) MANUALS = manuals BC_MANPAGE_NAME = $(EXEC_PREFIX)$(BC)$(EXEC_SUFFIX).1 BC_MANPAGE = $(MANUALS)/$(BC).1 -BC_RONN = $(BC_MANPAGE).ronn +BC_MD = $(BC_MANPAGE).md DC_MANPAGE_NAME = $(EXEC_PREFIX)$(DC)$(EXEC_SUFFIX).1 DC_MANPAGE = $(MANUALS)/$(DC).1 -DC_RONN = $(DC_MANPAGE).ronn +DC_MD = $(DC_MANPAGE).md MANPAGE_INSTALL_ARGS = -Dm644 @@ -270,8 +270,8 @@ extra_math: @printf '%s' "$(BC_ENABLE_EXTRA_MATH)" manpages: - $(MANPAGE) $(BC_RONN) $(BC_MANPAGE) - $(MANPAGE) $(DC_RONN) $(DC_MANPAGE) + $(MANPAGE) bc + $(MANPAGE) dc clean_gen: @$(RM) -f $(GEN_EXEC) @@ -295,6 +295,8 @@ clean:%%CLEAN_PREREQS%% clean_config: clean @printf 'Cleaning config...\n' @$(RM) -f Makefile + @$(RM) -f $(BC_MD) $(DC_MD) + @$(RM) -f $(BC_MANPAGE) $(DC_MANPAGE) clean_coverage: @printf 'Cleaning coverage files...\n' Modified: vendor/bc/dist/NEWS.md ============================================================================== --- vendor/bc/dist/NEWS.md Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/NEWS.md Tue Jul 7 07:02:33 2020 (r362984) @@ -1,5 +1,54 @@ # News +## 3.1.1 + +This is a production release that adds two Spanish locales. Users do ***NOT*** +need to upgrade, unless they want those locales. + +## 3.1.0 + +This is a production release that adjusts one behavior, fixes eight bugs, and +improves manpages for FreeBSD. Because this release fixes bugs, **users and +package maintainers should update to this version as soon as possible**. + +The behavior that was adjusted was how code from the `-e` and `-f` arguments +(and equivalents) were executed. They used to be executed as one big chunk, but +in this release, they are now executed line-by-line. + +The first bug fix in how output to `stdout` was handled in `SIGINT`. If a +`SIGINT` came in, the `stdout` buffer was not correctly flushed. In fact, a +clean-up function was not getting called. This release fixes that bug. + +The second bug is in how `dc` handled input from `stdin`. This affected `bc` as +well since it was a mishandling of the `stdin` buffer. + +The third fixed bug was that `bc` and `dc` could `abort()` (in debug mode) when +receiving a `SIGTERM`. This one was a race condition with pushing and popping +items onto and out of vectors. + +The fourth bug fixed was that `bc` could leave extra items on the stack and +thus, not properly clean up some memory. (The memory would still get +`free()`'ed, but it would not be `free()`'ed when it could have been.) + +The next two bugs were bugs in `bc`'s parser that caused crashes when executing +the resulting code. + +The last two bugs were crashes in `dc` that resulted from mishandling of +strings. + +The manpage improvement was done by switching from [ronn][20] to [Pandoc][21] to +generate manpages. Pandoc generates much cleaner manpages and doesn't leave +blank lines where they shouldn't be. + +## 3.0.3 + +This is a production release that adds one new feature: specific manpages. + +Before this release, `bc` and `dc` only used one manpage each that referred to +various build options. This release changes it so there is one manpage set per +relevant build type. Each manual only has information about its particular +build, and `configure.sh` selects the correct set for install. + ## 3.0.2 This is a production release that adds `utf8` locale symlinks and removes an @@ -32,8 +81,9 @@ global ones that are already installed, so it will use running tests during install. **If `bc` segfaults while running arg tests when updating, it is because the global locale files have not been replaced. Make sure to either prevent the test suite from running on update or remove the old -locale files before updating.** Once this is done, `bc` should install without -problems.* +locale files before updating.** (Removing the locale files can be done with +`make uninstall` or by running the `locale_uninstall.sh` script.) Once this is +done, `bc` should install without problems.* *Second, **the option to build without signal support has been removed**. See below for the reasons why.* @@ -811,14 +861,16 @@ not thoroughly tested. [6]: ./configure.sh [7]: https://github.com/rain-1/linenoise-mob [8]: https://github.com/antirez/linenoise -[9]: ./manuals/bc.1.ronn -[10]: ./manuals/dc.1.ronn +[9]: ./manuals/bc/A.1.md +[10]: ./manuals/dc/A.1.md [11]: https://scan.coverity.com/projects/gavinhoward-bc [12]: ./locale_install.sh [13]: ./manuals/build.md [14]: https://github.com/stesser [15]: https://github.com/bugcrazy -[16]: ./manuals/bc.1.ronn#extended-library +[16]: ./manuals/bc/A.1.md#extended-library [17]: https://github.com/skeeto/optparse [18]: https://www.deepl.com/translator [19]: ./manuals/benchmarks.md +[20]: https://github.com/apjanke/ronn-ng +[21]: https://pandoc.org/ Modified: vendor/bc/dist/README.md ============================================================================== --- vendor/bc/dist/README.md Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/README.md Tue Jul 7 07:02:33 2020 (r362984) @@ -11,7 +11,7 @@ This is an implementation of the [POSIX `bc` calculato [GNU `bc`][1] extensions, as well as the period (`.`) extension for the BSD flavor of `bc`. -For more information, see this `bc`'s [full manual][2]. +For more information, see this `bc`'s full manual. This `bc` also includes an implementation of `dc` in the same binary, accessible via a symbolic link, which implements all FreeBSD and GNU extensions. (If a @@ -19,7 +19,7 @@ standalone `dc` binary is desired, `bc` can be copied `!` command is omitted; I believe this poses security concerns and that such functionality is unnecessary. -For more information, see the `dc`'s [full manual][3]. +For more information, see the `dc`'s full manual. This `bc` is Free and Open Source Software (FOSS). It is offered under the BSD 2-clause License. Full license text may be found in the [`LICENSE.md`][4] file. @@ -39,7 +39,7 @@ Systems that are known to work: * OpenBSD * NetBSD * Mac OSX -* Solaris +* Solaris* (as long as the Solaris version supports POSIX 2008) * AIX Please submit bug reports if this `bc` does not build out of the box on any @@ -261,6 +261,10 @@ Other projects based on this bc are: * [toybox `bc`][9]. The maintainer has also made his own changes, so bugs in the toybox `bc` should be reported there. +* [FreeBSD `bc`][23]. While the `bc` in FreeBSD is kept up-to-date, it is better + to report bugs there, and the maintainers of the package will contact me if + necessary. + ## Language This `bc` is written in pure ISO C99, using POSIX 2008 APIs. @@ -293,7 +297,7 @@ Files: locale_install.sh A script to install locales, if desired. locale_uninstall.sh A script to uninstall locales. Makefile.in The Makefile template. - manpage.sh Script to generate man pages from ronn files. + manpage.sh Script to generate man pages from markdown files. NOTICE.md List of contributors and copyright owners. RELEASE.md A checklist for making a release (maintainer use only). release.sh A script to test for release (maintainer use only). @@ -309,8 +313,6 @@ Folders: tests All tests. [1]: https://www.gnu.org/software/bc/ -[2]: ./manuals/bc.md -[3]: ./manuals/dc.md [4]: ./LICENSE.md [5]: ./manuals/build.md [6]: https://pkg.musl.cc/bc/ @@ -330,3 +332,4 @@ Folders: [20]: https://git.yzena.com/gavin/bc [21]: https://gavinhoward.com/2020/04/i-am-moving-away-from-github/ [22]: https://www.deepl.com/translator +[23]: https://github.com/freebsd/freebsd/tree/master/contrib/bc Modified: vendor/bc/dist/configure.sh ============================================================================== --- vendor/bc/dist/configure.sh Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/configure.sh Tue Jul 7 07:02:33 2020 (r362984) @@ -1,9 +1,9 @@ #! /bin/sh # +# SPDX-License-Identifier: BSD-2-Clause +# # Copyright (c) 2018-2020 Gavin D. Howard and contributors. # -# All rights reserved. -# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # @@ -808,6 +808,28 @@ else fi fi +manpage_args="" + +if [ "$extra_math" -eq 0 ]; then + manpage_args="E" +fi + +if [ "$hist" -eq 0 ]; then + manpage_args="${manpage_args}H" +fi + +if [ "$nls" -eq 0 ]; then + manpage_args="${manpage_args}N" +fi + +if [ "$prompt" -eq 0 ]; then + manpage_args="${manpage_args}P" +fi + +if [ "$manpage_args" = "" ]; then + manpage_args="A" +fi + # Print out the values; this is for debugging. if [ "$bc" -ne 0 ]; then printf 'Building bc\n' @@ -923,5 +945,10 @@ contents=$(replace "$contents" "GEN_EMU" "$GEN_EMU") printf '%s\n' "$contents" > "$scriptdir/Makefile" cd "$scriptdir" + +cp -f manuals/bc/$manpage_args.1.md manuals/bc.1.md +cp -f manuals/bc/$manpage_args.1 manuals/bc.1 +cp -f manuals/dc/$manpage_args.1.md manuals/dc.1.md +cp -f manuals/dc/$manpage_args.1 manuals/dc.1 make clean > /dev/null Modified: vendor/bc/dist/functions.sh ============================================================================== --- vendor/bc/dist/functions.sh Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/functions.sh Tue Jul 7 07:02:33 2020 (r362984) @@ -1,8 +1,8 @@ #! /bin/sh # -# Copyright (c) 2018-2020 Gavin D. Howard and contributors. +# SPDX-License-Identifier: BSD-2-Clause # -# All rights reserved. +# Copyright (c) 2018-2020 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: Modified: vendor/bc/dist/gen/bc_help.txt ============================================================================== --- vendor/bc/dist/gen/bc_help.txt Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/gen/bc_help.txt Tue Jul 7 07:02:33 2020 (r362984) @@ -1,10 +1,10 @@ /* * ***************************************************************************** * + * SPDX-License-Identifier: BSD-2-Clause + * * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * - * All rights reserved. - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * @@ -58,6 +58,8 @@ This bc has three differences to the GNU bc: 3) This bc has many more extensions than the GNU bc does. For details, see the man page. +This bc also implements the dot (.) extension of the BSD bc. + Options: -e expr --expression=expr @@ -93,6 +95,9 @@ Options: l(expr) = natural log of expr e(expr) = raises e to the power of expr j(n, x) = Bessel function of integer order n of x + + This bc may load more functions with these options. See the manpage for + details. -P --no-prompt Modified: vendor/bc/dist/gen/dc_help.txt ============================================================================== --- vendor/bc/dist/gen/dc_help.txt Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/gen/dc_help.txt Tue Jul 7 07:02:33 2020 (r362984) @@ -1,9 +1,9 @@ /* * ***************************************************************************** * - * Copyright (c) 2018-2020 Gavin D. Howard and contributors. + * SPDX-License-Identifier: BSD-2-Clause * - * All rights reserved. + * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: Modified: vendor/bc/dist/gen/lib.bc ============================================================================== --- vendor/bc/dist/gen/lib.bc Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/gen/lib.bc Tue Jul 7 07:02:33 2020 (r362984) @@ -1,9 +1,9 @@ /* * ***************************************************************************** * - * Copyright (c) 2018-2020 Gavin D. Howard and contributors. + * SPDX-License-Identifier: BSD-2-Clause * - * All rights reserved. + * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: Modified: vendor/bc/dist/gen/lib2.bc ============================================================================== --- vendor/bc/dist/gen/lib2.bc Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/gen/lib2.bc Tue Jul 7 07:02:33 2020 (r362984) @@ -1,9 +1,9 @@ /* * ***************************************************************************** * - * Copyright (c) 2018-2020 Gavin D. Howard and contributors. + * SPDX-License-Identifier: BSD-2-Clause * - * All rights reserved. + * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: Modified: vendor/bc/dist/gen/strgen.c ============================================================================== --- vendor/bc/dist/gen/strgen.c Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/gen/strgen.c Tue Jul 7 07:02:33 2020 (r362984) @@ -1,9 +1,9 @@ /* * ***************************************************************************** * - * Copyright (c) 2018-2020 Gavin D. Howard and contributors. + * SPDX-License-Identifier: BSD-2-Clause * - * All rights reserved. + * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: Modified: vendor/bc/dist/gen/strgen.sh ============================================================================== --- vendor/bc/dist/gen/strgen.sh Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/gen/strgen.sh Tue Jul 7 07:02:33 2020 (r362984) @@ -1,8 +1,8 @@ #! /bin/sh # -# Copyright (c) 2018-2020 Gavin D. Howard and contributors. +# SPDX-License-Identifier: BSD-2-Clause # -# All rights reserved. +# Copyright (c) 2018-2020 Gavin D. Howard and contributors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: Modified: vendor/bc/dist/include/args.h ============================================================================== --- vendor/bc/dist/include/args.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/args.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,9 +1,9 @@ /* * ***************************************************************************** * - * Copyright (c) 2018-2020 Gavin D. Howard and contributors. + * SPDX-License-Identifier: BSD-2-Clause * - * All rights reserved. + * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: Modified: vendor/bc/dist/include/bc.h ============================================================================== --- vendor/bc/dist/include/bc.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/bc.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,10 +1,10 @@ /* * ***************************************************************************** * + * SPDX-License-Identifier: BSD-2-Clause + * * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * - * All rights reserved. - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * @@ -130,13 +130,13 @@ void bc_lex_token(BcLex *l); #define BC_PARSE_LEAF(prev, bin_last, rparen) \ (!(bin_last) && ((rparen) || bc_parse_inst_isLeaf(prev))) -#if BC_ENABLE_EXTRA_MATH +#if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND #define BC_PARSE_INST_VAR(t) \ ((t) >= BC_INST_VAR && (t) <= BC_INST_SEED && (t) != BC_INST_ARRAY) -#else // BC_ENABLE_EXTRA_MATH +#else // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND #define BC_PARSE_INST_VAR(t) \ ((t) >= BC_INST_VAR && (t) <= BC_INST_SCALE && (t) != BC_INST_ARRAY) -#endif // BC_ENABLE_EXTRA_MATH +#endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND #define BC_PARSE_PREV_PREFIX(p) \ ((p) >= BC_INST_NEG && (p) <= BC_INST_BOOL_NOT) Modified: vendor/bc/dist/include/dc.h ============================================================================== --- vendor/bc/dist/include/dc.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/dc.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,10 +1,10 @@ /* * ***************************************************************************** * + * SPDX-License-Identifier: BSD-2-Clause + * * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * - * All rights reserved. - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * @@ -35,10 +35,6 @@ #ifndef BC_DC_H #define BC_DC_H - -#ifndef DC_ENABLE_RAND -#define DC_ENABLE_RAND (1) -#endif // DC_ENABLE_RAND #if DC_ENABLED Modified: vendor/bc/dist/include/file.h ============================================================================== --- vendor/bc/dist/include/file.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/file.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,9 +1,9 @@ /* * ***************************************************************************** * - * Copyright (c) 2018-2020 Gavin D. Howard and contributors. + * SPDX-License-Identifier: BSD-2-Clause * - * All rights reserved. + * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: Modified: vendor/bc/dist/include/history.h ============================================================================== --- vendor/bc/dist/include/history.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/history.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,10 +1,10 @@ /* * ***************************************************************************** * + * SPDX-License-Identifier: BSD-2-Clause + * * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * - * All rights reserved. - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * @@ -46,8 +46,6 @@ * * Copyright (c) 2010-2016, Salvatore Sanfilippo * Copyright (c) 2010-2013, Pieter Noordhuis - * - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are Modified: vendor/bc/dist/include/lang.h ============================================================================== --- vendor/bc/dist/include/lang.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/lang.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,10 +1,10 @@ /* * ***************************************************************************** * + * SPDX-License-Identifier: BSD-2-Clause + * * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * - * All rights reserved. - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * @@ -129,6 +129,7 @@ typedef enum BcInst { BC_INST_ARRAY, #endif // BC_ENABLED + BC_INST_ZERO, BC_INST_ONE, #if BC_ENABLED @@ -137,26 +138,26 @@ typedef enum BcInst { BC_INST_IBASE, BC_INST_OBASE, BC_INST_SCALE, -#if BC_ENABLE_EXTRA_MATH +#if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_INST_SEED, -#endif // BC_ENABLE_EXTRA_MATH +#endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_INST_LENGTH, BC_INST_SCALE_FUNC, BC_INST_SQRT, BC_INST_ABS, -#if BC_ENABLE_EXTRA_MATH +#if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_INST_IRAND, -#endif // BC_ENABLE_EXTRA_MATH +#endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_INST_READ, -#if BC_ENABLE_EXTRA_MATH +#if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_INST_RAND, -#endif // BC_ENABLE_EXTRA_MATH +#endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_INST_MAXIBASE, BC_INST_MAXOBASE, BC_INST_MAXSCALE, -#if BC_ENABLE_EXTRA_MATH +#if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_INST_MAXRAND, -#endif // BC_ENABLE_EXTRA_MATH +#endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_INST_PRINT, BC_INST_PRINT_POP, @@ -252,9 +253,9 @@ typedef enum BcResultType { BC_RESULT_STR, - BC_RESULT_CONSTANT, BC_RESULT_TEMP, + BC_RESULT_ZERO, BC_RESULT_ONE, #if BC_ENABLED Modified: vendor/bc/dist/include/lex.h ============================================================================== --- vendor/bc/dist/include/lex.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/lex.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,10 +1,10 @@ /* * ***************************************************************************** * + * SPDX-License-Identifier: BSD-2-Clause + * * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * - * All rights reserved. - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * @@ -46,8 +46,23 @@ #define bc_lex_err(l, e) (bc_vm_error((e), (l)->line)) #define bc_lex_verr(l, e, ...) (bc_vm_error((e), (l)->line, __VA_ARGS__)) +#if BC_ENABLED + +#if DC_ENABLED #define BC_LEX_NEG_CHAR (BC_IS_BC ? '-' : '_') #define BC_LEX_LAST_NUM_CHAR (BC_IS_BC ? 'Z' : 'F') +#else // DC_ENABLED +#define BC_LEX_NEG_CHAR ('-') +#define BC_LEX_LAST_NUM_CHAR ('Z') +#endif // DC_ENABLED + +#else // BC_ENABLED + +#define BC_LEX_NEG_CHAR ('_') +#define BC_LEX_LAST_NUM_CHAR ('F') + +#endif // BC_ENABLED + #define BC_LEX_NUM_CHAR(c, pt, int_only) \ (isdigit(c) || ((c) >= 'A' && (c) <= BC_LEX_LAST_NUM_CHAR) || \ ((c) == '.' && !(pt) && !(int_only))) @@ -142,27 +157,27 @@ typedef enum BcLexType { BC_LEX_KW_IBASE, BC_LEX_KW_OBASE, BC_LEX_KW_SCALE, -#if BC_ENABLE_EXTRA_MATH +#if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_LEX_KW_SEED, -#endif // BC_ENABLE_EXTRA_MATH +#endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_LEX_KW_LENGTH, BC_LEX_KW_PRINT, BC_LEX_KW_SQRT, BC_LEX_KW_ABS, -#if BC_ENABLE_EXTRA_MATH +#if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_LEX_KW_IRAND, -#endif // BC_ENABLE_EXTRA_MATH +#endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_LEX_KW_QUIT, BC_LEX_KW_READ, -#if BC_ENABLE_EXTRA_MATH +#if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_LEX_KW_RAND, -#endif // BC_ENABLE_EXTRA_MATH +#endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_LEX_KW_MAXIBASE, BC_LEX_KW_MAXOBASE, BC_LEX_KW_MAXSCALE, -#if BC_ENABLE_EXTRA_MATH +#if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_LEX_KW_MAXRAND, -#endif // BC_ENABLE_EXTRA_MATH +#endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BC_LEX_KW_ELSE, #if DC_ENABLED Modified: vendor/bc/dist/include/num.h ============================================================================== --- vendor/bc/dist/include/num.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/num.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,10 +1,10 @@ /* * ***************************************************************************** * + * SPDX-License-Identifier: BSD-2-Clause + * * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * - * All rights reserved. - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * @@ -110,8 +110,16 @@ typedef struct BcNum { } BcNum; #if BC_ENABLE_EXTRA_MATH + +#ifndef BC_ENABLE_RAND +#define BC_ENABLE_RAND (1) +#endif // BC_ENABLE_RAND + +#if BC_ENABLE_RAND // Forward declaration struct BcRNG; +#endif // BC_ENABLE_RAND + #endif // BC_ENABLE_EXTRA_MATH #define BC_NUM_MIN_BASE (BC_NUM_BIGDIG_C(2)) @@ -173,12 +181,12 @@ void bc_num_bigdig(const BcNum *restrict n, BcBigDig * void bc_num_bigdig2(const BcNum *restrict n, BcBigDig *result); void bc_num_bigdig2num(BcNum *restrict n, BcBigDig val); -#if BC_ENABLE_EXTRA_MATH +#if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND void bc_num_irand(const BcNum *restrict a, BcNum *restrict b, struct BcRNG *restrict rng); void bc_num_rng(const BcNum *restrict n, struct BcRNG *rng); void bc_num_createFromRNG(BcNum *restrict n, struct BcRNG *rng); -#endif // BC_ENABLE_EXTRA_MATH +#endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND void bc_num_add(BcNum *a, BcNum *b, BcNum *c, size_t scale); void bc_num_sub(BcNum *a, BcNum *b, BcNum *c, size_t scale); Modified: vendor/bc/dist/include/opt.h ============================================================================== --- vendor/bc/dist/include/opt.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/opt.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,9 +1,9 @@ /* * ***************************************************************************** * - * Copyright (c) 2018-2020 Gavin D. Howard and contributors. + * SPDX-License-Identifier: BSD-2-Clause * - * All rights reserved. + * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: Modified: vendor/bc/dist/include/parse.h ============================================================================== --- vendor/bc/dist/include/parse.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/parse.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,10 +1,10 @@ /* * ***************************************************************************** * + * SPDX-License-Identifier: BSD-2-Clause + * * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * - * All rights reserved. - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * @@ -110,6 +110,7 @@ void bc_parse_updateFunc(BcParse *p, size_t fidx); void bc_parse_pushName(const BcParse* p, char *name, bool var); void bc_parse_text(BcParse *p, const char *text); +extern const char bc_parse_zero[]; extern const char bc_parse_one[]; #endif // BC_PARSE_H Modified: vendor/bc/dist/include/program.h ============================================================================== --- vendor/bc/dist/include/program.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/program.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,10 +1,10 @@ /* * ***************************************************************************** * + * SPDX-License-Identifier: BSD-2-Clause + * * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * - * All rights reserved. - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * @@ -61,9 +61,9 @@ typedef struct BcProgram { BcBigDig globals[BC_PROG_GLOBALS_LEN]; BcVec globals_v[BC_PROG_GLOBALS_LEN]; -#if BC_ENABLE_EXTRA_MATH +#if BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BcRNG rng; -#endif // BC_ENABLE_EXTRA_MATH +#endif // BC_ENABLE_EXTRA_MATH && BC_ENABLE_RAND BcVec results; BcVec stack; @@ -81,12 +81,15 @@ typedef struct BcProgram { BcVec arr_map; #if DC_ENABLED + BcVec strs_v; + BcVec tail_calls; BcBigDig strm; BcNum strmb; #endif // DC_ENABLED + BcNum zero; BcNum one; #if BC_ENABLED @@ -99,6 +102,7 @@ typedef struct BcProgram { BcDig strmb_num[BC_NUM_BIGDIG_LOG10]; #endif // DC_ENABLED + BcDig zero_num[BC_PROG_ONE_CAP]; BcDig one_num[BC_PROG_ONE_CAP]; } BcProgram; Modified: vendor/bc/dist/include/rand.h ============================================================================== --- vendor/bc/dist/include/rand.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/rand.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,10 +1,10 @@ /* * ***************************************************************************** * + * SPDX-License-Identifier: BSD-2-Clause + * * Copyright (c) 2018-2019 Gavin D. Howard and contributors. * - * All rights reserved. - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * @@ -69,14 +69,16 @@ #ifndef BC_RAND_H #define BC_RAND_H -#if BC_ENABLE_EXTRA_MATH - #include #include #include #include +#if BC_ENABLE_EXTRA_MATH + +#if BC_ENABLE_RAND + typedef ulong (*BcRandUlong)(void*); #if BC_LONG_BIT >= 64 @@ -223,6 +225,8 @@ void bc_rand_pop(BcRNG *r, bool reset); void bc_rand_getRands(BcRNG *r, BcRand *s1, BcRand *s2, BcRand *i1, BcRand *i2); extern const BcRandState bc_rand_multiplier; + +#endif // BC_ENABLE_RAND #endif // BC_ENABLE_EXTRA_MATH Modified: vendor/bc/dist/include/read.h ============================================================================== --- vendor/bc/dist/include/read.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/read.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,10 +1,10 @@ /* * ***************************************************************************** * + * SPDX-License-Identifier: BSD-2-Clause + * * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * - * All rights reserved. - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * @@ -33,8 +33,8 @@ * */ -#ifndef BC_IO_H -#define BC_IO_H +#ifndef BC_READ_H +#define BC_READ_H #include @@ -55,5 +55,6 @@ BcStatus bc_read_line(BcVec *vec, const char *prompt); void bc_read_file(const char *path, char **buf); BcStatus bc_read_chars(BcVec *vec, const char *prompt); +bool bc_read_buf(BcVec *vec, char *buf, size_t *buf_len); -#endif // BC_IO_H +#endif // BC_READ_H Modified: vendor/bc/dist/include/status.h ============================================================================== --- vendor/bc/dist/include/status.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/status.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,9 +1,9 @@ /* * ***************************************************************************** * - * Copyright (c) 2018-2020 Gavin D. Howard and contributors. + * SPDX-License-Identifier: BSD-2-Clause * - * All rights reserved. + * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: Modified: vendor/bc/dist/include/vector.h ============================================================================== --- vendor/bc/dist/include/vector.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/vector.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,9 +1,9 @@ /* * ***************************************************************************** * - * Copyright (c) 2018-2020 Gavin D. Howard and contributors. + * SPDX-License-Identifier: BSD-2-Clause * - * All rights reserved. + * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: Modified: vendor/bc/dist/include/vm.h ============================================================================== --- vendor/bc/dist/include/vm.h Tue Jul 7 06:04:21 2020 (r362983) +++ vendor/bc/dist/include/vm.h Tue Jul 7 07:02:33 2020 (r362984) @@ -1,10 +1,10 @@ /* * ***************************************************************************** * + * SPDX-License-Identifier: BSD-2-Clause + * * Copyright (c) 2018-2020 Gavin D. Howard and contributors. * - * All rights reserved. - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * @@ -91,28 +91,64 @@ #define isatty _isatty #endif // _WIN32 +#if DC_ENABLED #define DC_FLAG_X (UINTMAX_C(1)<<0) +#endif // DC_ENABLED + +#if BC_ENABLED #define BC_FLAG_W (UINTMAX_C(1)<<1) #define BC_FLAG_S (UINTMAX_C(1)<<2) -#define BC_FLAG_Q (UINTMAX_C(1)<<3) -#define BC_FLAG_L (UINTMAX_C(1)<<4) -#define BC_FLAG_I (UINTMAX_C(1)<<5) -#define BC_FLAG_G (UINTMAX_C(1)<<6) +#define BC_FLAG_L (UINTMAX_C(1)<<3) +#define BC_FLAG_G (UINTMAX_C(1)<<4) +#endif // BC_ENABLED + +#define BC_FLAG_Q (UINTMAX_C(1)<<5) +#define BC_FLAG_I (UINTMAX_C(1)<<6) #define BC_FLAG_P (UINTMAX_C(1)<<7) #define BC_FLAG_TTYIN (UINTMAX_C(1)<<8) #define BC_FLAG_TTY (UINTMAX_C(1)<<9) #define BC_TTYIN (vm.flags & BC_FLAG_TTYIN) #define BC_TTY (vm.flags & BC_FLAG_TTY) +#if BC_ENABLED + #define BC_S (BC_ENABLED && (vm.flags & BC_FLAG_S)) #define BC_W (BC_ENABLED && (vm.flags & BC_FLAG_W)) #define BC_L (BC_ENABLED && (vm.flags & BC_FLAG_L)) -#define BC_I (vm.flags & BC_FLAG_I) #define BC_G (BC_ENABLED && (vm.flags & BC_FLAG_G)) -#define DC_X (DC_ENABLED && (vm.flags & DC_FLAG_X)) + +#endif // BC_ENABLED + +#if DC_ENABLED +#define DC_X (vm.flags & DC_FLAG_X) +#endif // DC_ENABLED + +#define BC_I (vm.flags & BC_FLAG_I) #define BC_P (vm.flags & BC_FLAG_P) +#if BC_ENABLED + +#define BC_IS_POSIX (BC_S || BC_W) + +#if DC_ENABLED +#define BC_IS_BC (vm.name[0] != 'd') +#define BC_IS_DC (vm.name[0] == 'd') +#else // DC_ENABLED +#define BC_IS_BC (1) +#define BC_IS_DC (0) +#endif // DC_ENABLED + +#else // BC_ENABLED +#define BC_IS_POSIX (0) +#define BC_IS_BC (0) +#define BC_IS_DC (1) +#endif // BC_ENABLED + +#if BC_ENABLED #define BC_USE_PROMPT (!BC_P && BC_TTY && !BC_IS_POSIX) +#else // BC_ENABLED +#define BC_USE_PROMPT (!BC_P && BC_TTY) +#endif // BC_ENABLED #define BC_MAX(a, b) ((a) > (b) ? (a) : (b)) #define BC_MIN(a, b) ((a) < (b) ? (a) : (b)) @@ -131,9 +167,6 @@ #define BC_MAX_EXP ((ulong) (BC_NUM_BIGDIG_MAX)) #define BC_MAX_VARS ((ulong) (SIZE_MAX - 1)) -#define BC_IS_BC (BC_ENABLED && (!DC_ENABLED || vm.name[0] != 'd')) -#define BC_IS_POSIX (BC_S || BC_W) - #if BC_DEBUG_CODE *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@freebsd.org Tue Jul 7 07:05:45 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 804EA358095; Tue, 7 Jul 2020 07:05:45 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1D3s2rt1z496Y; Tue, 7 Jul 2020 07:05:45 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 271FBB9B7; Tue, 7 Jul 2020 07:05:45 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06775i97026079; Tue, 7 Jul 2020 07:05:44 GMT (envelope-from se@FreeBSD.org) Received: (from se@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06775iIN026078; Tue, 7 Jul 2020 07:05:44 GMT (envelope-from se@FreeBSD.org) Message-Id: <202007070705.06775iIN026078@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: se set sender to se@FreeBSD.org using -f From: =?UTF-8?Q?Stefan_E=c3=9fer?= Date: Tue, 7 Jul 2020 07:05:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r362985 - vendor/bc/3.1.1 X-SVN-Group: vendor X-SVN-Commit-Author: se X-SVN-Commit-Paths: vendor/bc/3.1.1 X-SVN-Commit-Revision: 362985 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 07:05:45 -0000 Author: se Date: Tue Jul 7 07:05:44 2020 New Revision: 362985 URL: https://svnweb.freebsd.org/changeset/base/362985 Log: Tag release 3.1.1 Added: vendor/bc/3.1.1/ - copied from r362984, vendor/bc/dist/ From owner-svn-src-all@freebsd.org Tue Jul 7 07:32:16 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 6665E357EEF; Tue, 7 Jul 2020 07:32:16 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1DfS2RJRz4BRF; Tue, 7 Jul 2020 07:32:16 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 36B2DBF1F; Tue, 7 Jul 2020 07:32:16 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0677WGoo044293; Tue, 7 Jul 2020 07:32:16 GMT (envelope-from se@FreeBSD.org) Received: (from se@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0677WGxa044292; Tue, 7 Jul 2020 07:32:16 GMT (envelope-from se@FreeBSD.org) Message-Id: <202007070732.0677WGxa044292@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: se set sender to se@FreeBSD.org using -f From: =?UTF-8?Q?Stefan_E=c3=9fer?= Date: Tue, 7 Jul 2020 07:32:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r362986 - in vendor/bc: 3.0.2 3.0.2/gen 3.0.2/tests 3.0.2/tests/dc 3.0.2/tests/dc/errors 3.0.2/tests/dc/scripts 3.1.1 3.1.1/gen 3.1.1/manuals 3.1.1/manuals/bc 3.1.1/manuals/dc 3.1.1/tes... X-SVN-Group: vendor X-SVN-Commit-Author: se X-SVN-Commit-Paths: in vendor/bc: 3.0.2 3.0.2/gen 3.0.2/tests 3.0.2/tests/dc 3.0.2/tests/dc/errors 3.0.2/tests/dc/scripts 3.1.1 3.1.1/gen 3.1.1/manuals 3.1.1/manuals/bc 3.1.1/manuals/dc 3.1.1/tests 3.1.1/tests/bc/errors ... X-SVN-Commit-Revision: 362986 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 07:32:16 -0000 Author: se Date: Tue Jul 7 07:32:15 2020 New Revision: 362986 URL: https://svnweb.freebsd.org/changeset/base/362986 Log: Disable keyword expansion. No actual change since there are no keywords to expand in the sources. Modified: Directory Properties: vendor/bc/3.0.2/gen/bc_help.txt (props changed) vendor/bc/3.0.2/gen/dc_help.txt (props changed) vendor/bc/3.0.2/gen/strgen.c (props changed) vendor/bc/3.0.2/gen/strgen.sh (props changed) vendor/bc/3.0.2/install.sh (props changed) vendor/bc/3.0.2/karatsuba.py (props changed) vendor/bc/3.0.2/link.sh (props changed) vendor/bc/3.0.2/tests/afl.py (props changed) vendor/bc/3.0.2/tests/dc/abs_results.txt (props changed) vendor/bc/3.0.2/tests/dc/add_results.txt (props changed) vendor/bc/3.0.2/tests/dc/decimal_results.txt (props changed) vendor/bc/3.0.2/tests/dc/divmod.txt (props changed) vendor/bc/3.0.2/tests/dc/engineering.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/01.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/02.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/03.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/04.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/05.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/06.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/07.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/08.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/09.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/10.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/11.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/12.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/13.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/14.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/15.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/16.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/17.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/18.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/20.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/21.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/22.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/23.txt (props changed) vendor/bc/3.0.2/tests/dc/errors/24.txt (props changed) vendor/bc/3.0.2/tests/dc/misc.txt (props changed) vendor/bc/3.0.2/tests/dc/modexp.txt (props changed) vendor/bc/3.0.2/tests/dc/modulus_results.txt (props changed) vendor/bc/3.0.2/tests/dc/negate_results.txt (props changed) vendor/bc/3.0.2/tests/dc/power_results.txt (props changed) vendor/bc/3.0.2/tests/dc/rand.txt (props changed) vendor/bc/3.0.2/tests/dc/scientific.txt (props changed) vendor/bc/3.0.2/tests/dc/scientific_results.txt (props changed) vendor/bc/3.0.2/tests/dc/scripts/array.txt (props changed) vendor/bc/3.0.2/tests/dc/scripts/else.txt (props changed) vendor/bc/3.0.2/tests/dc/scripts/factorial.txt (props changed) vendor/bc/3.0.2/tests/dc/scripts/loop.txt (props changed) vendor/bc/3.0.2/tests/dc/scripts/weird.txt (props changed) vendor/bc/3.0.2/tests/dc/sqrt.txt (props changed) vendor/bc/3.0.2/tests/dc/stdin.txt (props changed) vendor/bc/3.0.2/tests/dc/strings.txt (props changed) vendor/bc/3.0.2/tests/dc/subtract.txt (props changed) vendor/bc/3.0.2/tests/dc/trunc_results.txt (props changed) vendor/bc/3.0.2/tests/test.sh (props changed) vendor/bc/3.1.1/gen/bc_help.txt (props changed) vendor/bc/3.1.1/gen/dc_help.txt (props changed) vendor/bc/3.1.1/gen/strgen.c (props changed) vendor/bc/3.1.1/gen/strgen.sh (props changed) vendor/bc/3.1.1/install.sh (props changed) vendor/bc/3.1.1/karatsuba.py (props changed) vendor/bc/3.1.1/link.sh (props changed) vendor/bc/3.1.1/manuals/bc.1.md.in (props changed) vendor/bc/3.1.1/manuals/bc/A.1 (props changed) vendor/bc/3.1.1/manuals/bc/E.1 (props changed) vendor/bc/3.1.1/manuals/bc/EH.1 (props changed) vendor/bc/3.1.1/manuals/bc/EHN.1 (props changed) vendor/bc/3.1.1/manuals/bc/EHNP.1 (props changed) vendor/bc/3.1.1/manuals/bc/EHP.1 (props changed) vendor/bc/3.1.1/manuals/bc/EN.1 (props changed) vendor/bc/3.1.1/manuals/bc/ENP.1 (props changed) vendor/bc/3.1.1/manuals/bc/EP.1 (props changed) vendor/bc/3.1.1/manuals/bc/H.1 (props changed) vendor/bc/3.1.1/manuals/bc/HN.1 (props changed) vendor/bc/3.1.1/manuals/bc/HNP.1 (props changed) vendor/bc/3.1.1/manuals/bc/HP.1 (props changed) vendor/bc/3.1.1/manuals/bc/N.1 (props changed) vendor/bc/3.1.1/manuals/bc/NP.1 (props changed) vendor/bc/3.1.1/manuals/bc/P.1 (props changed) vendor/bc/3.1.1/manuals/dc.1.md.in (props changed) vendor/bc/3.1.1/manuals/dc/A.1 (props changed) vendor/bc/3.1.1/manuals/dc/E.1 (props changed) vendor/bc/3.1.1/manuals/dc/EH.1 (props changed) vendor/bc/3.1.1/manuals/dc/EHN.1 (props changed) vendor/bc/3.1.1/manuals/dc/EHNP.1 (props changed) vendor/bc/3.1.1/manuals/dc/EHP.1 (props changed) vendor/bc/3.1.1/manuals/dc/EN.1 (props changed) vendor/bc/3.1.1/manuals/dc/ENP.1 (props changed) vendor/bc/3.1.1/manuals/dc/EP.1 (props changed) vendor/bc/3.1.1/manuals/dc/H.1 (props changed) vendor/bc/3.1.1/manuals/dc/HN.1 (props changed) vendor/bc/3.1.1/manuals/dc/HNP.1 (props changed) vendor/bc/3.1.1/manuals/dc/HP.1 (props changed) vendor/bc/3.1.1/manuals/dc/N.1 (props changed) vendor/bc/3.1.1/manuals/dc/NP.1 (props changed) vendor/bc/3.1.1/manuals/dc/P.1 (props changed) vendor/bc/3.1.1/tests/afl.py (props changed) vendor/bc/3.1.1/tests/bc/errors/23.txt (props changed) vendor/bc/3.1.1/tests/bc/errors/24.txt (props changed) vendor/bc/3.1.1/tests/dc/abs_results.txt (props changed) vendor/bc/3.1.1/tests/dc/add_results.txt (props changed) vendor/bc/3.1.1/tests/dc/decimal_results.txt (props changed) vendor/bc/3.1.1/tests/dc/divmod.txt (props changed) vendor/bc/3.1.1/tests/dc/engineering.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/01.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/02.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/03.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/04.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/05.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/06.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/07.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/08.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/09.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/10.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/11.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/12.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/13.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/14.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/15.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/16.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/17.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/18.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/20.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/21.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/22.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/23.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/24.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/25.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/26.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/27.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/28.txt (props changed) vendor/bc/3.1.1/tests/dc/errors/29.txt (props changed) vendor/bc/3.1.1/tests/dc/misc.txt (props changed) vendor/bc/3.1.1/tests/dc/modexp.txt (props changed) vendor/bc/3.1.1/tests/dc/modulus_results.txt (props changed) vendor/bc/3.1.1/tests/dc/negate_results.txt (props changed) vendor/bc/3.1.1/tests/dc/power_results.txt (props changed) vendor/bc/3.1.1/tests/dc/rand.txt (props changed) vendor/bc/3.1.1/tests/dc/scientific.txt (props changed) vendor/bc/3.1.1/tests/dc/scientific_results.txt (props changed) vendor/bc/3.1.1/tests/dc/scripts/array.txt (props changed) vendor/bc/3.1.1/tests/dc/scripts/else.txt (props changed) vendor/bc/3.1.1/tests/dc/scripts/factorial.txt (props changed) vendor/bc/3.1.1/tests/dc/scripts/loop.txt (props changed) vendor/bc/3.1.1/tests/dc/scripts/weird.txt (props changed) vendor/bc/3.1.1/tests/dc/sqrt.txt (props changed) vendor/bc/3.1.1/tests/dc/stdin.txt (props changed) vendor/bc/3.1.1/tests/dc/strings.txt (props changed) vendor/bc/3.1.1/tests/dc/subtract.txt (props changed) vendor/bc/3.1.1/tests/dc/trunc_results.txt (props changed) vendor/bc/3.1.1/tests/test.sh (props changed) vendor/bc/dist/gen/bc_help.txt (props changed) vendor/bc/dist/gen/dc_help.txt (props changed) vendor/bc/dist/gen/strgen.c (props changed) vendor/bc/dist/gen/strgen.sh (props changed) vendor/bc/dist/install.sh (props changed) vendor/bc/dist/karatsuba.py (props changed) vendor/bc/dist/link.sh (props changed) vendor/bc/dist/manuals/bc.1.md.in (props changed) vendor/bc/dist/manuals/bc/A.1 (props changed) vendor/bc/dist/manuals/bc/E.1 (props changed) vendor/bc/dist/manuals/bc/EH.1 (props changed) vendor/bc/dist/manuals/bc/EHN.1 (props changed) vendor/bc/dist/manuals/bc/EHNP.1 (props changed) vendor/bc/dist/manuals/bc/EHP.1 (props changed) vendor/bc/dist/manuals/bc/EN.1 (props changed) vendor/bc/dist/manuals/bc/ENP.1 (props changed) vendor/bc/dist/manuals/bc/EP.1 (props changed) vendor/bc/dist/manuals/bc/H.1 (props changed) vendor/bc/dist/manuals/bc/HN.1 (props changed) vendor/bc/dist/manuals/bc/HNP.1 (props changed) vendor/bc/dist/manuals/bc/HP.1 (props changed) vendor/bc/dist/manuals/bc/N.1 (props changed) vendor/bc/dist/manuals/bc/NP.1 (props changed) vendor/bc/dist/manuals/bc/P.1 (props changed) vendor/bc/dist/manuals/dc.1.md.in (props changed) vendor/bc/dist/manuals/dc/A.1 (props changed) vendor/bc/dist/manuals/dc/E.1 (props changed) vendor/bc/dist/manuals/dc/EH.1 (props changed) vendor/bc/dist/manuals/dc/EHN.1 (props changed) vendor/bc/dist/manuals/dc/EHNP.1 (props changed) vendor/bc/dist/manuals/dc/EHP.1 (props changed) vendor/bc/dist/manuals/dc/EN.1 (props changed) vendor/bc/dist/manuals/dc/ENP.1 (props changed) vendor/bc/dist/manuals/dc/EP.1 (props changed) vendor/bc/dist/manuals/dc/H.1 (props changed) vendor/bc/dist/manuals/dc/HN.1 (props changed) vendor/bc/dist/manuals/dc/HNP.1 (props changed) vendor/bc/dist/manuals/dc/HP.1 (props changed) vendor/bc/dist/manuals/dc/N.1 (props changed) vendor/bc/dist/manuals/dc/NP.1 (props changed) vendor/bc/dist/manuals/dc/P.1 (props changed) vendor/bc/dist/tests/afl.py (props changed) vendor/bc/dist/tests/bc/errors/23.txt (props changed) vendor/bc/dist/tests/bc/errors/24.txt (props changed) vendor/bc/dist/tests/dc/abs_results.txt (props changed) vendor/bc/dist/tests/dc/add_results.txt (props changed) vendor/bc/dist/tests/dc/decimal_results.txt (props changed) vendor/bc/dist/tests/dc/divmod.txt (props changed) vendor/bc/dist/tests/dc/engineering.txt (props changed) vendor/bc/dist/tests/dc/errors/01.txt (props changed) vendor/bc/dist/tests/dc/errors/02.txt (props changed) vendor/bc/dist/tests/dc/errors/03.txt (props changed) vendor/bc/dist/tests/dc/errors/04.txt (props changed) vendor/bc/dist/tests/dc/errors/05.txt (props changed) vendor/bc/dist/tests/dc/errors/06.txt (props changed) vendor/bc/dist/tests/dc/errors/07.txt (props changed) vendor/bc/dist/tests/dc/errors/08.txt (props changed) vendor/bc/dist/tests/dc/errors/09.txt (props changed) vendor/bc/dist/tests/dc/errors/10.txt (props changed) vendor/bc/dist/tests/dc/errors/11.txt (props changed) vendor/bc/dist/tests/dc/errors/12.txt (props changed) vendor/bc/dist/tests/dc/errors/13.txt (props changed) vendor/bc/dist/tests/dc/errors/14.txt (props changed) vendor/bc/dist/tests/dc/errors/15.txt (props changed) vendor/bc/dist/tests/dc/errors/16.txt (props changed) vendor/bc/dist/tests/dc/errors/17.txt (props changed) vendor/bc/dist/tests/dc/errors/18.txt (props changed) vendor/bc/dist/tests/dc/errors/20.txt (props changed) vendor/bc/dist/tests/dc/errors/21.txt (props changed) vendor/bc/dist/tests/dc/errors/22.txt (props changed) vendor/bc/dist/tests/dc/errors/23.txt (props changed) vendor/bc/dist/tests/dc/errors/24.txt (props changed) vendor/bc/dist/tests/dc/errors/25.txt (props changed) vendor/bc/dist/tests/dc/errors/26.txt (props changed) vendor/bc/dist/tests/dc/errors/27.txt (props changed) vendor/bc/dist/tests/dc/errors/28.txt (props changed) vendor/bc/dist/tests/dc/errors/29.txt (props changed) vendor/bc/dist/tests/dc/misc.txt (props changed) vendor/bc/dist/tests/dc/modexp.txt (props changed) vendor/bc/dist/tests/dc/modulus_results.txt (props changed) vendor/bc/dist/tests/dc/negate_results.txt (props changed) vendor/bc/dist/tests/dc/power_results.txt (props changed) vendor/bc/dist/tests/dc/rand.txt (props changed) vendor/bc/dist/tests/dc/scientific.txt (props changed) vendor/bc/dist/tests/dc/scientific_results.txt (props changed) vendor/bc/dist/tests/dc/scripts/array.txt (props changed) vendor/bc/dist/tests/dc/scripts/else.txt (props changed) vendor/bc/dist/tests/dc/scripts/factorial.txt (props changed) vendor/bc/dist/tests/dc/scripts/loop.txt (props changed) vendor/bc/dist/tests/dc/scripts/weird.txt (props changed) vendor/bc/dist/tests/dc/sqrt.txt (props changed) vendor/bc/dist/tests/dc/stdin.txt (props changed) vendor/bc/dist/tests/dc/strings.txt (props changed) vendor/bc/dist/tests/dc/subtract.txt (props changed) vendor/bc/dist/tests/dc/trunc_results.txt (props changed) vendor/bc/dist/tests/test.sh (props changed) From owner-svn-src-all@freebsd.org Tue Jul 7 07:51:10 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DFE8C358B66; Tue, 7 Jul 2020 07:51:10 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1F4G5CPTz4CS4; Tue, 7 Jul 2020 07:51:10 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7C25AC0AE; Tue, 7 Jul 2020 07:51:10 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0677pA7v051631; Tue, 7 Jul 2020 07:51:10 GMT (envelope-from se@FreeBSD.org) Received: (from se@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0677pATb051630; Tue, 7 Jul 2020 07:51:10 GMT (envelope-from se@FreeBSD.org) Message-Id: <202007070751.0677pATb051630@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: se set sender to se@FreeBSD.org using -f From: =?UTF-8?Q?Stefan_E=c3=9fer?= Date: Tue, 7 Jul 2020 07:51:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362987 - in head: contrib/bc usr.bin/gh-bc X-SVN-Group: head X-SVN-Commit-Author: se X-SVN-Commit-Paths: in head: contrib/bc usr.bin/gh-bc X-SVN-Commit-Revision: 362987 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 07:51:10 -0000 Author: se Date: Tue Jul 7 07:51:09 2020 New Revision: 362987 URL: https://svnweb.freebsd.org/changeset/base/362987 Log: Update to version 3.1.1 This version fixes a regression with regard to tradtional behavior of the non-standard FreeBSD option "-e". In the previous version "-e quit" caused bc to exit before any computations had been performed, since all -e option parameters were concatenated and parsed as a whole, with quit causing the program to exit as soon as it was parsed. This version parses and executes commands passed with -e one by one and only exits after all prior commands have been executed. This commit is not a SVN merge, since the vendor import had been performed after the import to contrib. Instead the contents of contrib/bc has been removed and the new version is copied over unchanged from vendor/bc/dist. Replaced: head/contrib/bc/ - copied from r362986, vendor/bc/dist/ Modified: head/usr.bin/gh-bc/Makefile Modified: head/usr.bin/gh-bc/Makefile ============================================================================== --- head/usr.bin/gh-bc/Makefile Tue Jul 7 07:32:15 2020 (r362986) +++ head/usr.bin/gh-bc/Makefile Tue Jul 7 07:51:09 2020 (r362987) @@ -19,6 +19,7 @@ LINKS= ${BINDIR}/bc ${BINDIR}/dc CATALOGS= en_US.UTF-8 CATALOGS+= de_DE.UTF-8 de_DE.ISO8859-1 +CATALOGS+= es_ES.UTF-8 es_ES.ISO8859-1 CATALOGS+= fr_FR.UTF-8 fr_FR.ISO8859-1 CATALOGS+= ja_JP.UTF-8 ja_JP.eucJP CATALOGS+= nl_NL.UTF-8 nl_NL.ISO8859-1 @@ -37,8 +38,7 @@ CFLAGS+= -DBC_ENABLE_PROMPT CFLAGS+= -DBC_ENABLE_LONG_OPTIONS CFLAGS+= -DBC_ENABLE_EXTRA_MATH CFLAGS+= -DBC_ENABLE_HISTORY -CFLAGS+= -DBC_ENABLE_SIGNALS=0 -CFLAGS+= -DBC_NUM_KARATSUBA_LEN=64 +CFLAGS+= -DBC_ENABLE_RAND CFLAGS+= -DDC_ENABLED CFLAGS+= -DNDEBUG CFLAGS+= -DVERSION=${BCVERSION} @@ -46,8 +46,12 @@ CFLAGS+= -I${BCDIR}/include .if ${MK_NLS_CATALOGS} == "no" CFLAGS+= -DBC_ENABLE_NLS=0 +MAN_SRC_BC= bc/N.1 +MAN_SRC_DC= dc/N.1 .else CFLAGS+= -DBC_ENABLE_NLS=1 +MAN_SRC_BC= bc/A.1 +MAN_SRC_DC= dc/A.1 # prevent floating point incompatibilities caused by -flto on some architectures .if ${MACHINE_ARCH} != mips && ${MACHINE_ARCH} != mips64 && \ @@ -73,6 +77,8 @@ NLSLINKS_de_DE.UTF-8+= de_AT.UTF-8 de_CH.UTF-8 NLSLINKS_de_DE.ISO8859-1+= de_AT.ISO8859-1 de_CH.ISO8859-1 NLSLINKS_de_DE.ISO8859-1+= de_AT.ISO8859-15 de_CH.ISO8859-15 de_DE.ISO8859-15 +NLSLINKS_es_ES.ISO8859-1+= es_ES.ISO8859-15 + NLSLINKS_fr_FR.UTF-8+= fr_BE.UTF-8 fr_CA.UTF-8 fr_CH.UTF-8 NLSLINKS_fr_FR.ISO8859-1+= fr_BE.ISO8859-1 fr_CA.ISO8859-1 fr_CH.ISO8859-1 NLSLINKS_fr_FR.ISO8859-1+= fr_BE.ISO8859-15 fr_CA.ISO8859-15 fr_CH.ISO8859-15 \ @@ -97,5 +103,11 @@ bc_help.c: bc_help.txt dc_help.c: dc_help.txt cd ${BCDIR} && sh gen/strgen.sh gen/dc_help.txt ${.OBJDIR}/dc_help.c dc_help dc.h + +bc.1: + ${CP} ${BCDIR}/manuals/${MAN_SRC_BC} ${.OBJDIR}/bc.1 + +dc.1: + ${CP} ${BCDIR}/manuals/${MAN_SRC_DC} ${.OBJDIR}/dc.1 .include From owner-svn-src-all@freebsd.org Tue Jul 7 10:09:11 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 933DD35CAEE; Tue, 7 Jul 2020 10:09:11 +0000 (UTC) (envelope-from ohartmann@walstatt.org) Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "mout.gmx.net", Issuer "TeleSec ServerPass Class 2 CA" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1J7W0kbxz4M4j; Tue, 7 Jul 2020 10:09:10 +0000 (UTC) (envelope-from ohartmann@walstatt.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1594116549; bh=6dIVqDzrH2FBr+ikfIrtwfkTdRcmnTTtaOC74SSUVfY=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=DxajF4Kyp3GOwSbiO8iddDpKjnOcy9bBoh1to2AvDuAnMZq6QaJZDlfK2NvzlwD0s xN8eaanbcydCBTxGhrtER3qd+BAIJB/nyJadamERrO4gOLqzCbxS/jrgX2tXReKDnz 4ZjJFMoc2qf9xdAJ2tyZBdtoR8pVcxwJ1Gn1CUNA= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from hermann.fritz.box ([89.14.123.212]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MUGe1-1kJwIw0PjP-00REXu; Tue, 07 Jul 2020 12:09:09 +0200 Date: Tue, 7 Jul 2020 12:08:59 +0200 From: "Hartmann, O." To: Stefan =?ISO-8859-1?Q?E=DFer?= Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r362987 - in head: contrib/bc usr.bin/gh-bc Message-ID: <20200707120859.383081bb@hermann.fritz.box> In-Reply-To: <202007070751.0677pATb051630@repo.freebsd.org> References: <202007070751.0677pATb051630@repo.freebsd.org> Organization: walstatt.org MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; boundary="Sig_/jxlKD76reWCl/kDFAAYMWNn"; protocol="application/pgp-signature" X-Provags-ID: V03:K1:3ppUlU82L21Te39UgjY85DGfqw8P9lWJQkhkflwz+IwpHJUbzEZ BACF3MYEiZoPIp4axghWooNYcnZKFJ66FVFckrkgY+jw1PMY+EegkkASayrjS6rtW01Mo3u 3kfuNfYud4j3cQVyieqwh1oMe2t2FET7n/K/zT2jecCyQWQ8KjyJvMafqXn+jXT0svpN4Y7 fhmiR+AP1emZ8rQKlswxA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:Q6D94D0mq+U=:CgamM6O85TCWzDyJbG2I0r w7SEkLlGfxCayNE4vKKZCcoWsQD/OrAVif7fplLoBMOnbUKEoItjmkF9qehlIokegxP8z+3BN +8XH+WSDCBHu3VjQ1av7IF9lWK7BRjPEliu2gLo9bZwgNLtjb4PGFyPCZMqDx4YY7P2oGKUkp eBObWOVIVVyR37L7HFAxm4HOmJZzDtftT7V3acdaxng6cyG29I2vTgBQP9LiC8MF4kT+85kb6 hKY+8+AdRQoWwDfZWNjlCUiGZBYqFfLn6LCe/2+ex0WZ637eJBKBnBFdppCP73cHiOyGmewVW 9p2Cwrwb/tilgh7jArU1dgUZSWCz9OpzbcaX9kkbMaQ0VNRKY74qHPnLwaL9I/ppUVn8N6u+d v07YeDAJI0lAoS2/64Hbh4zRyBRxuw2w/5utI723k0v453FQTHcMxsbTNuzSQyIiyJprH9j+u m17izTkMzDzWZx8MmsQbaekV9L+zns6cew9fEFGpDxTXZZDx9vmQeS8BQlLf5I2S0FkOTsRQq ucuXkJAn/KLCQVZYdEETeIIEQgEhzX6s7WNP58KpCii8lZ0rwJZLY1Fs7mC4lFTYVLaGtYxb0 shFj3xdMNVXg5kP/4MsfCO4U+6XjFZl/wR24jCaPzCoHTil1yuR/EU4EwcYVSx1PI/t5jUq69 xHdmDXxOZWaOSLor6CN1rVTym+axdtlCSveJtIM4RuZxMKY9p7Go6x3LkWa61JniLK2k2ex4x bzn9AGN7KnHXQ3lyXOvMnkEUWLwaQyJDyX98aVOMDEavvP2Zq2VkoteMVl3gr/KZDg++Zctxq uuSSZ5dVxIABsCa90SUfcqhuPyTq2VPTSvdtt2oQ62iAo3wNf6cb9Ss94zxAn608zoynGewcp LmJ4+9JyzurPn7UFeOVcHFEGtVNa6mRYjdrZWrrhNs4BPHDWQbFSWJvL0Cc9F20YsOVuLdtI1 p0y0qNC6B64w3veuNd/ZNQIZ4pDiunU2TVZigC9Dtlt0AOzNQr5KpEgkk2uP33Ii4LT7AnYeq g+sI9wIJ0mEw4spPnBSNpTeb6QCfCdXvyq2/xQtpzyKEaWp3fPkf5ijh9wJUFW6mvX4UNqbDb KIsu1L0mZbitHQwx8ULaPyI1WbM5wi04AH0YguWVdXLdriU5dspeJ8emgf11dUhR8trdFle7P q0qysiruEwWGhj4GwCAqJIc+w9JBxUjnLoOcT+GhX/IGHPiNE0o2f/iOuodmK7xXjyDaGTQwr Pv6beO9AywkFgSLwoyTemyRsE02t997DeeqFVnw== X-Rspamd-Queue-Id: 4B1J7W0kbxz4M4j X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:8560, ipnet:212.227.0.0/16, country:DE] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 10:09:11 -0000 --Sig_/jxlKD76reWCl/kDFAAYMWNn Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Tue, 7 Jul 2020 07:51:10 +0000 (UTC) Stefan E=C3=9Fer wrote: > Author: se > Date: Tue Jul 7 07:51:09 2020 > New Revision: 362987 > URL: https://svnweb.freebsd.org/changeset/base/362987 >=20 > Log: > Update to version 3.1.1 > =20 > This version fixes a regression with regard to tradtional behavior > of the non-standard FreeBSD option "-e". In the previous version "-e > quit" caused bc to exit before any computations had been performed, > since all -e option parameters were concatenated and parsed as a > whole, with quit causing the program to exit as soon as it was > parsed. This version parses and executes commands passed with -e one > by one and only exits after all prior commands have been executed. > =20 > This commit is not a SVN merge, since the vendor import had been > performed after the import to contrib. Instead the contents of > contrib/bc has been removed and the new version is copied over > unchanged from vendor/bc/dist. >=20 > Replaced: > head/contrib/bc/ > - copied from r362986, vendor/bc/dist/ > Modified: > head/usr.bin/gh-bc/Makefile >=20 > Modified: head/usr.bin/gh-bc/Makefile > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/usr.bin/gh-bc/Makefile Tue Jul 7 07:32:15 > 2020 (r362986) +++ head/usr.bin/gh-bc/Makefile Tue Jul > 7 07:51:09 2020 (r362987) @@ -19,6 +19,7 @@ LINKS=3D > ${BINDIR}/bc ${BINDIR}/dc=20 > CATALOGS=3D en_US.UTF-8 > CATALOGS+=3D de_DE.UTF-8 de_DE.ISO8859-1 > +CATALOGS+=3D es_ES.UTF-8 es_ES.ISO8859-1 > CATALOGS+=3D fr_FR.UTF-8 fr_FR.ISO8859-1 > CATALOGS+=3D ja_JP.UTF-8 ja_JP.eucJP > CATALOGS+=3D nl_NL.UTF-8 nl_NL.ISO8859-1 > @@ -37,8 +38,7 @@ CFLAGS+=3D -DBC_ENABLE_PROMPT > CFLAGS+=3D -DBC_ENABLE_LONG_OPTIONS > CFLAGS+=3D -DBC_ENABLE_EXTRA_MATH > CFLAGS+=3D -DBC_ENABLE_HISTORY > -CFLAGS+=3D -DBC_ENABLE_SIGNALS=3D0 > -CFLAGS+=3D -DBC_NUM_KARATSUBA_LEN=3D64 > +CFLAGS+=3D -DBC_ENABLE_RAND > CFLAGS+=3D -DDC_ENABLED > CFLAGS+=3D -DNDEBUG > CFLAGS+=3D -DVERSION=3D${BCVERSION} > @@ -46,8 +46,12 @@ CFLAGS+=3D -I${BCDIR}/include > =20 > .if ${MK_NLS_CATALOGS} =3D=3D "no" > CFLAGS+=3D -DBC_ENABLE_NLS=3D0 > +MAN_SRC_BC=3D bc/N.1 > +MAN_SRC_DC=3D dc/N.1 > .else > CFLAGS+=3D -DBC_ENABLE_NLS=3D1 > +MAN_SRC_BC=3D bc/A.1 > +MAN_SRC_DC=3D dc/A.1 > =20 > # prevent floating point incompatibilities caused by -flto on some > architectures .if ${MACHINE_ARCH} !=3D mips && ${MACHINE_ARCH} !=3D > mips64 && \ @@ -73,6 +77,8 @@ NLSLINKS_de_DE.UTF-8+=3D > de_AT.UTF-8 de_CH.UTF-8 NLSLINKS_de_DE.ISO8859-1+=3D de_AT.ISO8859-1 > de_CH.ISO8859-1 NLSLINKS_de_DE.ISO8859-1+=3D de_AT.ISO8859-15 > de_CH.ISO8859-15 de_DE.ISO8859-15=20 > +NLSLINKS_es_ES.ISO8859-1+=3D es_ES.ISO8859-15 > + > NLSLINKS_fr_FR.UTF-8+=3D fr_BE.UTF-8 fr_CA.UTF-8 fr_CH.UTF-8 > NLSLINKS_fr_FR.ISO8859-1+=3D fr_BE.ISO8859-1 fr_CA.ISO8859-1 > fr_CH.ISO8859-1 NLSLINKS_fr_FR.ISO8859-1+=3D fr_BE.ISO8859-15 > fr_CA.ISO8859-15 fr_CH.ISO8859-15 \ @@ -97,5 +103,11 @@ > bc_help.c: bc_help.txt=20 > dc_help.c: dc_help.txt > cd ${BCDIR} && sh gen/strgen.sh gen/dc_help.txt > ${.OBJDIR}/dc_help.c dc_help dc.h + > +bc.1: > + ${CP} ${BCDIR}/manuals/${MAN_SRC_BC} ${.OBJDIR}/bc.1 > + > +dc.1: > + ${CP} ${BCDIR}/manuals/${MAN_SRC_DC} ${.OBJDIR}/dc.1 > =20 > .include > _______________________________________________ > svn-src-head@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/svn-src-head > To unsubscribe, send any mail to > "svn-src-head-unsubscribe@freebsd.org" Thank you very much for this effort. Kind regards, O. Hartmann --Sig_/jxlKD76reWCl/kDFAAYMWNn Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iHUEARYIAB0WIQSy8IBxAPDkqVBaTJ44N1ZZPba5RwUCXwRJvAAKCRA4N1ZZPba5 R2V8AQDZoor+cYzkmF/FkND+ybc0xYb+A7ovu+bmHtoKPXeG1wD/WfPagQgDDvBt 2cOOnBdzBQg162HYALYQoo3BZkBSFQM= =+ScF -----END PGP SIGNATURE----- --Sig_/jxlKD76reWCl/kDFAAYMWNn-- From owner-svn-src-all@freebsd.org Tue Jul 7 12:11:00 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1A0813609DF; Tue, 7 Jul 2020 12:11:00 +0000 (UTC) (envelope-from rscheff@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1Lr370QGz4W5s; Tue, 7 Jul 2020 12:10:59 +0000 (UTC) (envelope-from rscheff@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D4B33F419; Tue, 7 Jul 2020 12:10:59 +0000 (UTC) (envelope-from rscheff@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 067CAx3u016289; Tue, 7 Jul 2020 12:10:59 GMT (envelope-from rscheff@FreeBSD.org) Received: (from rscheff@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 067CAxAY016288; Tue, 7 Jul 2020 12:10:59 GMT (envelope-from rscheff@FreeBSD.org) Message-Id: <202007071210.067CAxAY016288@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rscheff set sender to rscheff@FreeBSD.org using -f From: Richard Scheffenegger Date: Tue, 7 Jul 2020 12:10:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362988 - head/sys/netinet X-SVN-Group: head X-SVN-Commit-Author: rscheff X-SVN-Commit-Paths: head/sys/netinet X-SVN-Commit-Revision: 362988 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 12:11:00 -0000 Author: rscheff Date: Tue Jul 7 12:10:59 2020 New Revision: 362988 URL: https://svnweb.freebsd.org/changeset/base/362988 Log: Fix KASSERT during tcp_newtcpcb when low on memory While testing with system default cc set to cubic, and running a memory exhaustion validation, FreeBSD panics for a missing inpcb reference / lock. Reviewed by: rgrimes (mentor), tuexen (mentor) Approved by: rgrimes (mentor), tuexen (mentor) MFC after: 3 weeks Sponsored by: NetApp, Inc. Differential Revision: https://reviews.freebsd.org/D25583 Modified: head/sys/netinet/tcp_subr.c Modified: head/sys/netinet/tcp_subr.c ============================================================================== --- head/sys/netinet/tcp_subr.c Tue Jul 7 07:51:09 2020 (r362987) +++ head/sys/netinet/tcp_subr.c Tue Jul 7 12:10:59 2020 (r362988) @@ -1702,6 +1702,12 @@ tcp_newtcpcb(struct inpcb *inp) KASSERT(!STAILQ_EMPTY(&cc_list), ("cc_list is empty!")); CC_ALGO(tp) = CC_DEFAULT(); CC_LIST_RUNLOCK(); + /* + * The tcpcb will hold a reference on its inpcb until tcp_discardcb() + * is called. + */ + in_pcbref(inp); /* Reference for tcpcb */ + tp->t_inpcb = inp; if (CC_ALGO(tp)->cb_init != NULL) if (CC_ALGO(tp)->cb_init(tp->ccv) > 0) { @@ -1746,12 +1752,6 @@ tcp_newtcpcb(struct inpcb *inp) if (V_tcp_do_sack) tp->t_flags |= TF_SACK_PERMIT; TAILQ_INIT(&tp->snd_holes); - /* - * The tcpcb will hold a reference on its inpcb until tcp_discardcb() - * is called. - */ - in_pcbref(inp); /* Reference for tcpcb */ - tp->t_inpcb = inp; /* * Init srtt to TCPTV_SRTTBASE (0), so we can tell that we have no From owner-svn-src-all@freebsd.org Tue Jul 7 12:24:40 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DEA793614C5; Tue, 7 Jul 2020 12:24:40 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1M7r5cQZz4X2h; Tue, 7 Jul 2020 12:24:40 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A074EF35A; Tue, 7 Jul 2020 12:24:40 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 067COerU025030; Tue, 7 Jul 2020 12:24:40 GMT (envelope-from tsoome@FreeBSD.org) Received: (from tsoome@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 067COe7F025029; Tue, 7 Jul 2020 12:24:40 GMT (envelope-from tsoome@FreeBSD.org) Message-Id: <202007071224.067COe7F025029@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tsoome set sender to tsoome@FreeBSD.org using -f From: Toomas Soome Date: Tue, 7 Jul 2020 12:24:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362989 - head/stand/libsa/geli X-SVN-Group: head X-SVN-Commit-Author: tsoome X-SVN-Commit-Paths: head/stand/libsa/geli X-SVN-Commit-Revision: 362989 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 12:24:40 -0000 Author: tsoome Date: Tue Jul 7 12:24:40 2020 New Revision: 362989 URL: https://svnweb.freebsd.org/changeset/base/362989 Log: loader: geli_dev_ioctl does return huge mediasize The DIOCGMEDIASIZE is calculated md->md_sectorsize * md->md_provsize, and for boot disk, the md_sectorsize is 4k. However, the md_provsize is already in units of bytes. Sponsored by: Netflix, Klara Inc. Modified: head/stand/libsa/geli/gelidev.c Modified: head/stand/libsa/geli/gelidev.c ============================================================================== --- head/stand/libsa/geli/gelidev.c Tue Jul 7 12:10:59 2020 (r362988) +++ head/stand/libsa/geli/gelidev.c Tue Jul 7 12:24:40 2020 (r362989) @@ -219,7 +219,7 @@ geli_dev_ioctl(struct open_file *f, u_long cmd, void * *(u_int *)data = md->md_sectorsize; break; case DIOCGMEDIASIZE: - *(uint64_t *)data = md->md_sectorsize * md->md_provsize; + *(uint64_t *)data = md->md_provsize; break; default: return (ENOTTY); From owner-svn-src-all@freebsd.org Tue Jul 7 13:48:43 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7828936363D; Tue, 7 Jul 2020 13:48:43 +0000 (UTC) (envelope-from cy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1P0q2w9kz4cdC; Tue, 7 Jul 2020 13:48:43 +0000 (UTC) (envelope-from cy@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 45A0C104E9; Tue, 7 Jul 2020 13:48:43 +0000 (UTC) (envelope-from cy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 067Dmh6g075189; Tue, 7 Jul 2020 13:48:43 GMT (envelope-from cy@FreeBSD.org) Received: (from cy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 067DmQ5Z075175; Tue, 7 Jul 2020 13:48:26 GMT (envelope-from cy@FreeBSD.org) Message-Id: <202007071348.067DmQ5Z075175@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: cy set sender to cy@FreeBSD.org using -f From: Cy Schubert Date: Tue, 7 Jul 2020 13:48:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r362990 - in vendor/sqlite3/dist: . tea X-SVN-Group: vendor X-SVN-Commit-Author: cy X-SVN-Commit-Paths: in vendor/sqlite3/dist: . tea X-SVN-Commit-Revision: 362990 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 13:48:43 -0000 Author: cy Date: Tue Jul 7 13:48:26 2020 New Revision: 362990 URL: https://svnweb.freebsd.org/changeset/base/362990 Log: Import sqlite 3.32.3 (3320300). Modified: vendor/sqlite3/dist/configure vendor/sqlite3/dist/configure.ac vendor/sqlite3/dist/sqlite3.c vendor/sqlite3/dist/sqlite3.h vendor/sqlite3/dist/tea/configure vendor/sqlite3/dist/tea/configure.ac Modified: vendor/sqlite3/dist/configure ============================================================================== --- vendor/sqlite3/dist/configure Tue Jul 7 12:24:40 2020 (r362989) +++ vendor/sqlite3/dist/configure Tue Jul 7 13:48:26 2020 (r362990) @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for sqlite 3.32.2. +# Generated by GNU Autoconf 2.69 for sqlite 3.32.3. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sqlite' PACKAGE_TARNAME='sqlite' -PACKAGE_VERSION='3.32.2' -PACKAGE_STRING='sqlite 3.32.2' +PACKAGE_VERSION='3.32.3' +PACKAGE_STRING='sqlite 3.32.3' PACKAGE_BUGREPORT='http://www.sqlite.org' PACKAGE_URL='' @@ -1341,7 +1341,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sqlite 3.32.2 to adapt to many kinds of systems. +\`configure' configures sqlite 3.32.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1412,7 +1412,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sqlite 3.32.2:";; + short | recursive ) echo "Configuration of sqlite 3.32.3:";; esac cat <<\_ACEOF @@ -1537,7 +1537,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sqlite configure 3.32.2 +sqlite configure 3.32.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1952,7 +1952,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sqlite $as_me 3.32.2, which was +It was created by sqlite $as_me 3.32.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2818,7 +2818,7 @@ fi # Define the identity of the package. PACKAGE='sqlite' - VERSION='3.32.2' + VERSION='3.32.3' cat >>confdefs.h <<_ACEOF @@ -14438,7 +14438,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sqlite $as_me 3.32.2, which was +This file was extended by sqlite $as_me 3.32.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -14495,7 +14495,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -sqlite config.status 3.32.2 +sqlite config.status 3.32.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Modified: vendor/sqlite3/dist/configure.ac ============================================================================== --- vendor/sqlite3/dist/configure.ac Tue Jul 7 12:24:40 2020 (r362989) +++ vendor/sqlite3/dist/configure.ac Tue Jul 7 13:48:26 2020 (r362990) @@ -10,7 +10,7 @@ # AC_PREREQ(2.61) -AC_INIT(sqlite, 3.32.2, http://www.sqlite.org) +AC_INIT(sqlite, 3.32.3, http://www.sqlite.org) AC_CONFIG_SRCDIR([sqlite3.c]) AC_CONFIG_AUX_DIR([.]) Modified: vendor/sqlite3/dist/sqlite3.c ============================================================================== --- vendor/sqlite3/dist/sqlite3.c Tue Jul 7 12:24:40 2020 (r362989) +++ vendor/sqlite3/dist/sqlite3.c Tue Jul 7 13:48:26 2020 (r362990) @@ -1,6 +1,6 @@ /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite -** version 3.32.2. By combining all the individual C code files into this +** version 3.32.3. By combining all the individual C code files into this ** single large file, the entire code can be compiled as a single translation ** unit. This allows many compilers to do optimizations that would not be ** possible if the files were compiled separately. Performance improvements @@ -1162,9 +1162,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.32.2" -#define SQLITE_VERSION_NUMBER 3032002 -#define SQLITE_SOURCE_ID "2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c" +#define SQLITE_VERSION "3.32.3" +#define SQLITE_VERSION_NUMBER 3032003 +#define SQLITE_SOURCE_ID "2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933cc8fd" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -17863,11 +17863,11 @@ struct AggInfo { ExprList *pGroupBy; /* The group by clause */ struct AggInfo_col { /* For each column used in source tables */ Table *pTab; /* Source table */ + Expr *pExpr; /* The original expression */ int iTable; /* Cursor number of the source table */ - int iColumn; /* Column number within the source table */ - int iSorterColumn; /* Column number in the sorting index */ int iMem; /* Memory location that acts as accumulator */ - Expr *pExpr; /* The original expression */ + i16 iColumn; /* Column number within the source table */ + i16 iSorterColumn; /* Column number in the sorting index */ } *aCol; int nColumn; /* Number of used entries in aCol[] */ int nAccumulator; /* Number of columns that show through to the output. @@ -17880,9 +17880,18 @@ struct AggInfo { int iDistinct; /* Ephemeral table used to enforce DISTINCT */ } *aFunc; int nFunc; /* Number of entries in aFunc[] */ +#ifdef SQLITE_DEBUG + int iAggMagic; /* Magic number when valid */ +#endif + AggInfo *pNext; /* Next in list of them all */ }; /* +** Value for AggInfo.iAggMagic when the structure is valid +*/ +#define AggInfoMagic 0x2059e99e + +/* ** The datatype ynVar is a signed integer, either 16-bit or 32-bit. ** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater ** than 32767 we have to make it 32-bit. 16-bit is preferred because @@ -18462,6 +18471,7 @@ struct Select { #define SF_WhereBegin 0x0080000 /* Really a WhereBegin() call. Debug Only */ #define SF_WinRewrite 0x0100000 /* Window function rewrite accomplished */ #define SF_View 0x0200000 /* SELECT statement is a view */ +#define SF_NoopOrderBy 0x0400000 /* ORDER BY is ignored for this query */ /* ** The results of a SELECT can be distributed in several ways, as defined @@ -18678,6 +18688,7 @@ struct Parse { Parse *pToplevel; /* Parse structure for main program (or NULL) */ Table *pTriggerTab; /* Table triggers are being coded for */ Parse *pParentParse; /* Parent parser if this parser is nested */ + AggInfo *pAggList; /* List of all AggInfo objects */ int addrCrTab; /* Address of OP_CreateBtree opcode on CREATE TABLE */ u32 nQueryLoop; /* Est number of iterations of a query (10*log2(N)) */ u32 oldmask; /* Mask of old.* columns referenced */ @@ -19644,6 +19655,7 @@ SQLITE_PRIVATE int sqlite3ExprCompareSkip(Expr*, Expr* SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList*, ExprList*, int); SQLITE_PRIVATE int sqlite3ExprImpliesExpr(Parse*,Expr*, Expr*, int); SQLITE_PRIVATE int sqlite3ExprImpliesNonNullRow(Expr*,int); +SQLITE_PRIVATE void sqlite3AggInfoPersistWalkerInit(Walker*,Parse*); SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext*, Expr*); SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext*,ExprList*); SQLITE_PRIVATE int sqlite3ExprCoveredByIndex(Expr*, int iCur, Index *pIdx); @@ -64526,16 +64538,18 @@ static int hasSharedCacheTableLock( ** table. */ if( isIndex ){ HashElem *p; + int bSeen = 0; for(p=sqliteHashFirst(&pSchema->idxHash); p; p=sqliteHashNext(p)){ Index *pIdx = (Index *)sqliteHashData(p); if( pIdx->tnum==(int)iRoot ){ - if( iTab ){ + if( bSeen ){ /* Two or more indexes share the same root page. There must ** be imposter tables. So just return true. The assert is not ** useful in that case. */ return 1; } iTab = pIdx->pTable->tnum; + bSeen = 1; } } }else{ @@ -66077,7 +66091,7 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 i nFrag = iFreeBlk - iEnd; if( iEnd>iFreeBlk ) return SQLITE_CORRUPT_PAGE(pPage); iEnd = iFreeBlk + get2byte(&data[iFreeBlk+2]); - if( NEVER(iEnd > pPage->pBt->usableSize) ){ + if( iEnd > pPage->pBt->usableSize ){ return SQLITE_CORRUPT_PAGE(pPage); } iSize = iEnd - iStart; @@ -87194,7 +87208,7 @@ case OP_Ge: { /* same as TK_GE, jump, in1, if( (flags1 | flags3)&MEM_Str ){ if( (flags1 & (MEM_Int|MEM_IntReal|MEM_Real|MEM_Str))==MEM_Str ){ applyNumericAffinity(pIn1,0); - assert( flags3==pIn3->flags ); + testcase( flags3==pIn3->flags ); flags3 = pIn3->flags; } if( (flags3 & (MEM_Int|MEM_IntReal|MEM_Real|MEM_Str))==MEM_Str ){ @@ -99536,7 +99550,12 @@ SQLITE_PRIVATE char sqlite3ExprAffinity(const Expr *pE op = pExpr->op; if( op==TK_SELECT ){ assert( pExpr->flags&EP_xIsSelect ); - return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr); + if( ALWAYS(pExpr->x.pSelect) + && pExpr->x.pSelect->pEList + && ALWAYS(pExpr->x.pSelect->pEList->a[0].pExpr) + ){ + return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr); + } } if( op==TK_REGISTER ) op = pExpr->op2; #ifndef SQLITE_OMIT_CAST @@ -101527,8 +101546,10 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *p /* Fall through */ case TK_IF_NULL_ROW: case TK_REGISTER: + case TK_DOT: testcase( pExpr->op==TK_REGISTER ); testcase( pExpr->op==TK_IF_NULL_ROW ); + testcase( pExpr->op==TK_DOT ); pWalker->eCode = 0; return WRC_Abort; case TK_VARIABLE: @@ -105134,11 +105155,26 @@ SQLITE_PRIVATE int sqlite3ExprCoveredByIndex( */ struct SrcCount { SrcList *pSrc; /* One particular FROM clause in a nested query */ + int iSrcInner; /* Smallest cursor number in this context */ int nThis; /* Number of references to columns in pSrcList */ int nOther; /* Number of references to columns in other FROM clauses */ }; /* +** xSelect callback for sqlite3FunctionUsesThisSrc(). If this is the first +** SELECT with a FROM clause encountered during this iteration, set +** SrcCount.iSrcInner to the cursor number of the leftmost object in +** the FROM cause. +*/ +static int selectSrcCount(Walker *pWalker, Select *pSel){ + struct SrcCount *p = pWalker->u.pSrcCount; + if( p->iSrcInner==0x7FFFFFFF && ALWAYS(pSel->pSrc) && pSel->pSrc->nSrc ){ + pWalker->u.pSrcCount->iSrcInner = pSel->pSrc->a[0].iCursor; + } + return WRC_Continue; +} + +/* ** Count the number of references to columns. */ static int exprSrcCount(Walker *pWalker, Expr *pExpr){ @@ -105158,7 +105194,7 @@ static int exprSrcCount(Walker *pWalker, Expr *pExpr){ } if( inThis++; - }else if( nSrc==0 || pExpr->iTablea[0].iCursor ){ + }else if( pExpr->iTableiSrcInner ){ /* In a well-formed parse tree (no name resolution errors), ** TK_COLUMN nodes with smaller Expr.iTable values are in an ** outer context. Those are the only ones to count as "other" */ @@ -105180,9 +105216,10 @@ SQLITE_PRIVATE int sqlite3FunctionUsesThisSrc(Expr *pE assert( pExpr->op==TK_AGG_FUNCTION ); memset(&w, 0, sizeof(w)); w.xExprCallback = exprSrcCount; - w.xSelectCallback = sqlite3SelectWalkNoop; + w.xSelectCallback = selectSrcCount; w.u.pSrcCount = &cnt; cnt.pSrc = pSrcList; + cnt.iSrcInner = (pSrcList&&pSrcList->nSrc)?pSrcList->a[0].iCursor:0x7FFFFFFF; cnt.nThis = 0; cnt.nOther = 0; sqlite3WalkExprList(&w, pExpr->x.pList); @@ -105195,6 +105232,64 @@ SQLITE_PRIVATE int sqlite3FunctionUsesThisSrc(Expr *pE } /* +** This is a Walker expression node callback. +** +** For Expr nodes that contain pAggInfo pointers, make sure the AggInfo +** object that is referenced does not refer directly to the Expr. If +** it does, make a copy. This is done because the pExpr argument is +** subject to change. +** +** The copy is stored on pParse->pConstExpr with a register number of 0. +** This will cause the expression to be deleted automatically when the +** Parse object is destroyed, but the zero register number means that it +** will not generate any code in the preamble. +*/ +static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){ + if( ALWAYS(!ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced)) + && pExpr->pAggInfo!=0 + ){ + AggInfo *pAggInfo = pExpr->pAggInfo; + int iAgg = pExpr->iAgg; + Parse *pParse = pWalker->pParse; + sqlite3 *db = pParse->db; + assert( pExpr->op==TK_AGG_COLUMN || pExpr->op==TK_AGG_FUNCTION ); + if( pExpr->op==TK_AGG_COLUMN ){ + assert( iAgg>=0 && iAggnColumn ); + if( pAggInfo->aCol[iAgg].pExpr==pExpr ){ + pExpr = sqlite3ExprDup(db, pExpr, 0); + if( pExpr ){ + pAggInfo->aCol[iAgg].pExpr = pExpr; + pParse->pConstExpr = + sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); + } + } + }else{ + assert( iAgg>=0 && iAggnFunc ); + if( pAggInfo->aFunc[iAgg].pExpr==pExpr ){ + pExpr = sqlite3ExprDup(db, pExpr, 0); + if( pExpr ){ + pAggInfo->aFunc[iAgg].pExpr = pExpr; + pParse->pConstExpr = + sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); + } + } + } + } + return WRC_Continue; +} + +/* +** Initialize a Walker object so that will persist AggInfo entries referenced +** by the tree that is walked. +*/ +SQLITE_PRIVATE void sqlite3AggInfoPersistWalkerInit(Walker *pWalker, Parse *pParse){ + memset(pWalker, 0, sizeof(*pWalker)); + pWalker->pParse = pParse; + pWalker->xExprCallback = agginfoPersistExprCb; + pWalker->xSelectCallback = sqlite3SelectWalkNoop; +} + +/* ** Add a new element to the pAggInfo->aCol[] array. Return the index of ** the new element. Return a negative number if malloc fails. */ @@ -105224,7 +105319,7 @@ static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo) &i ); return i; -} +} /* ** This is the xExprCallback for a tree walker. It is used to @@ -110255,12 +110350,21 @@ SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse) */ sqlite3AutoincrementBegin(pParse); - /* Code constant expressions that where factored out of inner loops */ + /* Code constant expressions that where factored out of inner loops. + ** + ** The pConstExpr list might also contain expressions that we simply + ** want to keep around until the Parse object is deleted. Such + ** expressions have iConstExprReg==0. Do not generate code for + ** those expressions, of course. + */ if( pParse->pConstExpr ){ ExprList *pEL = pParse->pConstExpr; pParse->okConstFactor = 0; for(i=0; inExpr; i++){ - sqlite3ExprCode(pParse, pEL->a[i].pExpr, pEL->a[i].u.iConstExprReg); + int iReg = pEL->a[i].u.iConstExprReg; + if( iReg>0 ){ + sqlite3ExprCode(pParse, pEL->a[i].pExpr, iReg); + } } } @@ -128435,10 +128539,25 @@ SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, S } /* +** Deallocate a single AggInfo object +*/ +static void agginfoFree(sqlite3 *db, AggInfo *p){ + sqlite3DbFree(db, p->aCol); + sqlite3DbFree(db, p->aFunc); + sqlite3DbFree(db, p); +} + +/* ** Free all memory allocations in the pParse object */ SQLITE_PRIVATE void sqlite3ParserReset(Parse *pParse){ sqlite3 *db = pParse->db; + AggInfo *pThis = pParse->pAggList; + while( pThis ){ + AggInfo *pNext = pThis->pNext; + agginfoFree(db, pThis); + pThis = pNext; + } sqlite3DbFree(db, pParse->aLabel); sqlite3ExprListDelete(db, pParse->pConstExpr); if( db ){ @@ -131553,9 +131672,7 @@ static int multiSelect( selectOpName(p->op))); rc = sqlite3Select(pParse, p, &uniondest); testcase( rc!=SQLITE_OK ); - /* Query flattening in sqlite3Select() might refill p->pOrderBy. - ** Be sure to delete p->pOrderBy, therefore, to avoid a memory leak. */ - sqlite3ExprListDelete(db, p->pOrderBy); + assert( p->pOrderBy==0 ); pDelete = p->pPrior; p->pPrior = pPrior; p->pOrderBy = 0; @@ -132628,6 +132745,7 @@ static int flattenSubquery( Expr *pWhere; /* The WHERE clause */ struct SrcList_item *pSubitem; /* The subquery */ sqlite3 *db = pParse->db; + Walker w; /* Walker to persist agginfo data */ /* Check to see if flattening is permitted. Return 0 if not. */ @@ -132941,7 +133059,7 @@ static int flattenSubquery( ** We look at every expression in the outer query and every place we see ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10". */ - if( pSub->pOrderBy ){ + if( pSub->pOrderBy && (pParent->selFlags & SF_NoopOrderBy)==0 ){ /* At this point, any non-zero iOrderByCol values indicate that the ** ORDER BY column expression is identical to the iOrderByCol'th ** expression returned by SELECT statement pSub. Since these values @@ -132965,7 +133083,13 @@ static int flattenSubquery( if( isLeftJoin>0 ){ sqlite3SetJoinExpr(pWhere, iNewParent); } - pParent->pWhere = sqlite3ExprAnd(pParse, pWhere, pParent->pWhere); + if( pWhere ){ + if( pParent->pWhere ){ + pParent->pWhere = sqlite3PExpr(pParse, TK_AND, pWhere, pParent->pWhere); + }else{ + pParent->pWhere = pWhere; + } + } if( db->mallocFailed==0 ){ SubstContext x; x.pParse = pParse; @@ -133002,6 +133126,8 @@ static int flattenSubquery( /* Finially, delete what is left of the subquery and return ** success. */ + sqlite3AggInfoPersistWalkerInit(&w, pParse); + sqlite3WalkSelect(&w,pSub1); sqlite3SelectDelete(db, pSub1); #if SELECTTRACE_ENABLED @@ -133262,11 +133388,14 @@ static int pushDownWhereTerms( ){ Expr *pNew; int nChng = 0; + Select *pSel; if( pWhere==0 ) return 0; if( pSubq->selFlags & SF_Recursive ) return 0; /* restriction (2) */ #ifndef SQLITE_OMIT_WINDOWFUNC - if( pSubq->pWin ) return 0; /* restriction (6) */ + for(pSel=pSubq; pSel; pSel=pSel->pPrior){ + if( pSel->pWin ) return 0; /* restriction (6) */ + } #endif #ifdef SQLITE_DEBUG @@ -133466,6 +133595,14 @@ static int convertCompoundSelectToSubquery(Walker *pWa for(pX=p; pX && (pX->op==TK_ALL || pX->op==TK_SELECT); pX=pX->pPrior){} if( pX==0 ) return WRC_Continue; a = p->pOrderBy->a; +#ifndef SQLITE_OMIT_WINDOWFUNC + /* If iOrderByCol is already non-zero, then it has already been matched + ** to a result column of the SELECT statement. This occurs when the + ** SELECT is rewritten for window-functions processing and then passed + ** to sqlite3SelectPrep() and similar a second time. The rewriting done + ** by this function is not required in this case. */ + if( a[0].u.x.iOrderByCol ) return WRC_Continue; +#endif for(i=p->pOrderBy->nExpr-1; i>=0; i--){ if( a[i].pExpr->flags & EP_Collate ) break; } @@ -134586,10 +134723,10 @@ SQLITE_PRIVATE int sqlite3Select( Expr *pWhere; /* The WHERE clause. May be NULL */ ExprList *pGroupBy; /* The GROUP BY clause. May be NULL */ Expr *pHaving; /* The HAVING clause. May be NULL */ + AggInfo *pAggInfo = 0; /* Aggregate information */ int rc = 1; /* Value to return from this function */ DistinctCtx sDistinct; /* Info on how to code the DISTINCT keyword */ SortCtx sSort; /* Info on how to code the ORDER BY clause */ - AggInfo sAggInfo; /* Information used by aggregate queries */ int iEnd; /* Address of the end of the query */ sqlite3 *db; /* The database connection */ ExprList *pMinMaxOrderBy = 0; /* Added ORDER BY for min/max queries */ @@ -134601,7 +134738,6 @@ SQLITE_PRIVATE int sqlite3Select( return 1; } if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1; - memset(&sAggInfo, 0, sizeof(sAggInfo)); #if SELECTTRACE_ENABLED SELECTTRACE(1,pParse,p, ("begin processing:\n", pParse->addrExplain)); if( sqlite3SelectTrace & 0x100 ){ @@ -134623,6 +134759,7 @@ SQLITE_PRIVATE int sqlite3Select( sqlite3ExprListDelete(db, p->pOrderBy); p->pOrderBy = 0; p->selFlags &= ~SF_Distinct; + p->selFlags |= SF_NoopOrderBy; } sqlite3SelectPrep(pParse, p, 0); if( pParse->nErr || db->mallocFailed ){ @@ -135191,14 +135328,20 @@ SQLITE_PRIVATE int sqlite3Select( ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the ** SELECT statement. */ + pAggInfo = sqlite3DbMallocZero(db, sizeof(*pAggInfo) ); + if( pAggInfo==0 ){ + goto select_end; + } + pAggInfo->pNext = pParse->pAggList; + pParse->pAggList = pAggInfo; memset(&sNC, 0, sizeof(sNC)); sNC.pParse = pParse; sNC.pSrcList = pTabList; - sNC.uNC.pAggInfo = &sAggInfo; + sNC.uNC.pAggInfo = pAggInfo; VVA_ONLY( sNC.ncFlags = NC_UAggInfo; ) - sAggInfo.mnReg = pParse->nMem+1; - sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr : 0; - sAggInfo.pGroupBy = pGroupBy; + pAggInfo->mnReg = pParse->nMem+1; + pAggInfo->nSortingColumn = pGroupBy ? pGroupBy->nExpr : 0; + pAggInfo->pGroupBy = pGroupBy; sqlite3ExprAnalyzeAggList(&sNC, pEList); sqlite3ExprAnalyzeAggList(&sNC, sSort.pOrderBy); if( pHaving ){ @@ -135211,14 +135354,14 @@ SQLITE_PRIVATE int sqlite3Select( } sqlite3ExprAnalyzeAggregates(&sNC, pHaving); } - sAggInfo.nAccumulator = sAggInfo.nColumn; - if( p->pGroupBy==0 && p->pHaving==0 && sAggInfo.nFunc==1 ){ - minMaxFlag = minMaxQuery(db, sAggInfo.aFunc[0].pExpr, &pMinMaxOrderBy); + pAggInfo->nAccumulator = pAggInfo->nColumn; + if( p->pGroupBy==0 && p->pHaving==0 && pAggInfo->nFunc==1 ){ + minMaxFlag = minMaxQuery(db, pAggInfo->aFunc[0].pExpr, &pMinMaxOrderBy); }else{ minMaxFlag = WHERE_ORDERBY_NORMAL; } - for(i=0; inFunc; i++){ + Expr *pExpr = pAggInfo->aFunc[i].pExpr; assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); sNC.ncFlags |= NC_InAggFunc; sqlite3ExprAnalyzeAggList(&sNC, pExpr->x.pList); @@ -135230,22 +135373,22 @@ SQLITE_PRIVATE int sqlite3Select( #endif sNC.ncFlags &= ~NC_InAggFunc; } - sAggInfo.mxReg = pParse->nMem; + pAggInfo->mxReg = pParse->nMem; if( db->mallocFailed ) goto select_end; #if SELECTTRACE_ENABLED if( sqlite3SelectTrace & 0x400 ){ int ii; - SELECTTRACE(0x400,pParse,p,("After aggregate analysis %p:\n", &sAggInfo)); + SELECTTRACE(0x400,pParse,p,("After aggregate analysis %p:\n", pAggInfo)); sqlite3TreeViewSelect(0, p, 0); - for(ii=0; iinColumn; ii++){ sqlite3DebugPrintf("agg-column[%d] iMem=%d\n", - ii, sAggInfo.aCol[ii].iMem); - sqlite3TreeViewExpr(0, sAggInfo.aCol[ii].pExpr, 0); + ii, pAggInfo->aCol[ii].iMem); + sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pExpr, 0); } - for(ii=0; iinFunc; ii++){ sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n", - ii, sAggInfo.aFunc[ii].iMem); - sqlite3TreeViewExpr(0, sAggInfo.aFunc[ii].pExpr, 0); + ii, pAggInfo->aFunc[ii].iMem); + sqlite3TreeViewExpr(0, pAggInfo->aFunc[ii].pExpr, 0); } } #endif @@ -135270,10 +135413,11 @@ SQLITE_PRIVATE int sqlite3Select( ** that we do not need it after all, the OP_SorterOpen instruction ** will be converted into a Noop. */ - sAggInfo.sortingIdx = pParse->nTab++; - pKeyInfo = sqlite3KeyInfoFromExprList(pParse,pGroupBy,0,sAggInfo.nColumn); + pAggInfo->sortingIdx = pParse->nTab++; + pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pGroupBy, + 0, pAggInfo->nColumn); addrSortingIdx = sqlite3VdbeAddOp4(v, OP_SorterOpen, - sAggInfo.sortingIdx, sAggInfo.nSortingColumn, + pAggInfo->sortingIdx, pAggInfo->nSortingColumn, 0, (char*)pKeyInfo, P4_KEYINFO); /* Initialize memory locations used by GROUP BY aggregate processing @@ -135328,8 +135472,8 @@ SQLITE_PRIVATE int sqlite3Select( nGroupBy = pGroupBy->nExpr; nCol = nGroupBy; j = nGroupBy; - for(i=0; i=j ){ + for(i=0; inColumn; i++){ + if( pAggInfo->aCol[i].iSorterColumn>=j ){ nCol++; j++; } @@ -135337,8 +135481,8 @@ SQLITE_PRIVATE int sqlite3Select( regBase = sqlite3GetTempRange(pParse, nCol); sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0, 0); j = nGroupBy; - for(i=0; inColumn; i++){ + struct AggInfo_col *pCol = &pAggInfo->aCol[i]; if( pCol->iSorterColumn>=j ){ int r1 = j + regBase; sqlite3ExprCodeGetColumnOfTable(v, @@ -135348,16 +135492,16 @@ SQLITE_PRIVATE int sqlite3Select( } regRecord = sqlite3GetTempReg(pParse); sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord); - sqlite3VdbeAddOp2(v, OP_SorterInsert, sAggInfo.sortingIdx, regRecord); + sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord); sqlite3ReleaseTempReg(pParse, regRecord); sqlite3ReleaseTempRange(pParse, regBase, nCol); sqlite3WhereEnd(pWInfo); - sAggInfo.sortingIdxPTab = sortPTab = pParse->nTab++; + pAggInfo->sortingIdxPTab = sortPTab = pParse->nTab++; sortOut = sqlite3GetTempReg(pParse); sqlite3VdbeAddOp3(v, OP_OpenPseudo, sortPTab, sortOut, nCol); - sqlite3VdbeAddOp2(v, OP_SorterSort, sAggInfo.sortingIdx, addrEnd); + sqlite3VdbeAddOp2(v, OP_SorterSort, pAggInfo->sortingIdx, addrEnd); VdbeComment((v, "GROUP BY sort")); VdbeCoverage(v); - sAggInfo.useSortingIdx = 1; + pAggInfo->useSortingIdx = 1; } /* If the index or temporary table used by the GROUP BY sort @@ -135381,14 +135525,14 @@ SQLITE_PRIVATE int sqlite3Select( */ addrTopOfLoop = sqlite3VdbeCurrentAddr(v); if( groupBySort ){ - sqlite3VdbeAddOp3(v, OP_SorterData, sAggInfo.sortingIdx, + sqlite3VdbeAddOp3(v, OP_SorterData, pAggInfo->sortingIdx, sortOut, sortPTab); } for(j=0; jnExpr; j++){ if( groupBySort ){ sqlite3VdbeAddOp3(v, OP_Column, sortPTab, j, iBMem+j); }else{ - sAggInfo.directMode = 1; + pAggInfo->directMode = 1; sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j); } } @@ -135418,14 +135562,14 @@ SQLITE_PRIVATE int sqlite3Select( ** the current row */ sqlite3VdbeJumpHere(v, addr1); - updateAccumulator(pParse, iUseFlag, &sAggInfo); + updateAccumulator(pParse, iUseFlag, pAggInfo); sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag); VdbeComment((v, "indicate data in accumulator")); /* End of the loop */ if( groupBySort ){ - sqlite3VdbeAddOp2(v, OP_SorterNext, sAggInfo.sortingIdx, addrTopOfLoop); + sqlite3VdbeAddOp2(v, OP_SorterNext, pAggInfo->sortingIdx, addrTopOfLoop); VdbeCoverage(v); }else{ sqlite3WhereEnd(pWInfo); @@ -135458,7 +135602,7 @@ SQLITE_PRIVATE int sqlite3Select( VdbeCoverage(v); VdbeComment((v, "Groupby result generator entry point")); sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); - finalizeAggFunctions(pParse, &sAggInfo); + finalizeAggFunctions(pParse, pAggInfo); sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL); selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest, @@ -135469,7 +135613,7 @@ SQLITE_PRIVATE int sqlite3Select( /* Generate a subroutine that will reset the group-by accumulator */ sqlite3VdbeResolveLabel(v, addrReset); - resetAccumulator(pParse, &sAggInfo); + resetAccumulator(pParse, pAggInfo); sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag); VdbeComment((v, "indicate accumulator empty")); sqlite3VdbeAddOp1(v, OP_Return, regReset); @@ -135477,7 +135621,7 @@ SQLITE_PRIVATE int sqlite3Select( } /* endif pGroupBy. Begin aggregate queries without GROUP BY: */ else { Table *pTab; - if( (pTab = isSimpleCount(p, &sAggInfo))!=0 ){ + if( (pTab = isSimpleCount(p, pAggInfo))!=0 ){ /* If isSimpleCount() returns a pointer to a Table structure, then ** the SQL statement is of the form: ** @@ -135532,7 +135676,7 @@ SQLITE_PRIVATE int sqlite3Select( if( pKeyInfo ){ sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO); } - sqlite3VdbeAddOp2(v, OP_Count, iCsr, sAggInfo.aFunc[0].iMem); + sqlite3VdbeAddOp2(v, OP_Count, iCsr, pAggInfo->aFunc[0].iMem); sqlite3VdbeAddOp1(v, OP_Close, iCsr); explainSimpleCount(pParse, pTab, pBest); }else{ @@ -135547,12 +135691,16 @@ SQLITE_PRIVATE int sqlite3Select( ** first row visited by the aggregate, so that they are updated at ** least once even if the FILTER clause means the min() or max() ** function visits zero rows. */ - if( sAggInfo.nAccumulator ){ - for(i=0; ifuncFlags&SQLITE_FUNC_NEEDCOLL ) break; + if( pAggInfo->nAccumulator ){ + for(i=0; inFunc; i++){ + if( ExprHasProperty(pAggInfo->aFunc[i].pExpr, EP_WinFunc) ){ + continue; + } + if( pAggInfo->aFunc[i].pFunc->funcFlags&SQLITE_FUNC_NEEDCOLL ){ + break; + } } - if( i==sAggInfo.nFunc ){ + if( i==pAggInfo->nFunc ){ regAcc = ++pParse->nMem; sqlite3VdbeAddOp2(v, OP_Integer, 0, regAcc); } @@ -135563,7 +135711,7 @@ SQLITE_PRIVATE int sqlite3Select( ** of output. */ assert( p->pGroupBy==0 ); - resetAccumulator(pParse, &sAggInfo); + resetAccumulator(pParse, pAggInfo); /* If this query is a candidate for the min/max optimization, then ** minMaxFlag will have been previously set to either @@ -135579,7 +135727,7 @@ SQLITE_PRIVATE int sqlite3Select( if( pWInfo==0 ){ goto select_end; } - updateAccumulator(pParse, regAcc, &sAggInfo); + updateAccumulator(pParse, regAcc, pAggInfo); if( regAcc ) sqlite3VdbeAddOp2(v, OP_Integer, 1, regAcc); if( sqlite3WhereIsOrdered(pWInfo)>0 ){ sqlite3VdbeGoto(v, sqlite3WhereBreakLabel(pWInfo)); @@ -135587,7 +135735,7 @@ SQLITE_PRIVATE int sqlite3Select( (minMaxFlag==WHERE_ORDERBY_MIN?"min":"max"))); } sqlite3WhereEnd(pWInfo); - finalizeAggFunctions(pParse, &sAggInfo); + finalizeAggFunctions(pParse, pAggInfo); } sSort.pOrderBy = 0; @@ -135626,8 +135774,25 @@ SQLITE_PRIVATE int sqlite3Select( */ select_end: sqlite3ExprListDelete(db, pMinMaxOrderBy); - sqlite3DbFree(db, sAggInfo.aCol); - sqlite3DbFree(db, sAggInfo.aFunc); +#ifdef SQLITE_DEBUG + if( pAggInfo && !db->mallocFailed ){ + for(i=0; inColumn; i++){ + Expr *pExpr = pAggInfo->aCol[i].pExpr; + assert( pExpr!=0 || db->mallocFailed ); + if( pExpr==0 ) continue; + assert( pExpr->pAggInfo==pAggInfo ); + assert( pExpr->iAgg==i ); + } + for(i=0; inFunc; i++){ + Expr *pExpr = pAggInfo->aFunc[i].pExpr; + assert( pExpr!=0 || db->mallocFailed ); + if( pExpr==0 ) continue; + assert( pExpr->pAggInfo==pAggInfo ); + assert( pExpr->iAgg==i ); + } + } +#endif + #if SELECTTRACE_ENABLED SELECTTRACE(0x1,pParse,p,("end processing\n")); if( (sqlite3SelectTrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){ @@ -151319,12 +151484,16 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Window *pMWin = p->pWin; /* Master window object */ Window *pWin; /* Window object iterator */ Table *pTab; + Walker w; + u32 selFlags = p->selFlags; pTab = sqlite3DbMallocZero(db, sizeof(Table)); if( pTab==0 ){ return sqlite3ErrorToParser(db, SQLITE_NOMEM); } + sqlite3AggInfoPersistWalkerInit(&w, pParse); + sqlite3WalkSelect(&w, p); p->pSrc = 0; p->pWhere = 0; @@ -151405,7 +151574,6 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, p->pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0); if( p->pSrc ){ Table *pTab2; - Walker w; p->pSrc->a[0].pSelect = pSub; sqlite3SrcListAssignCursors(pParse, p->pSrc); pSub->selFlags |= SF_Expanded; @@ -168302,6 +168470,9 @@ static int fts3PoslistMerge( */ fts3GetDeltaVarint(&p1, &i1); fts3GetDeltaVarint(&p2, &i2); + if( i1<2 || i2<2 ){ + break; + } do { fts3PutDeltaVarint(&p, &iPrev, (i10 ); assert( *pbEof==0 ); - assert( p || *piDocid==0 ); + assert_fts3_nc( p || *piDocid==0 ); assert( !p || (p>=aDoclist && p<=&aDoclist[nDoclist]) ); if( p==0 ){ @@ -171205,7 +171376,7 @@ static void fts3EvalInvalidatePoslist(Fts3Phrase *pPhr ** ** Parameter nNear is passed the NEAR distance of the expression (5 in ** the example above). When this function is called, *paPoslist points to -** the position list, and *pnToken is the number of phrase tokens in, the +** the position list, and *pnToken is the number of phrase tokens in the ** phrase on the other side of the NEAR operator to pPhrase. For example, ** if pPhrase refers to the "def ghi" phrase, then *paPoslist points to ** the position list associated with phrase "abc". @@ -224824,7 +224995,7 @@ static void fts5SourceIdFunc( ){ assert( nArg==0 ); UNUSED_PARAM2(nArg, apUnused); - sqlite3_result_text(pCtx, "fts5: 2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c", -1, SQLITE_TRANSIENT); + sqlite3_result_text(pCtx, "fts5: 2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933cc8fd", -1, SQLITE_TRANSIENT); } /* @@ -229607,9 +229778,9 @@ SQLITE_API int sqlite3_stmt_init( #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ /************** End of stmt.c ************************************************/ -#if __LINE__!=229610 +#if __LINE__!=229781 #undef SQLITE_SOURCE_ID -#define SQLITE_SOURCE_ID "2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e8686alt2" +#define SQLITE_SOURCE_ID "2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933calt2" #endif /* Return the source-id for this library */ SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } Modified: vendor/sqlite3/dist/sqlite3.h ============================================================================== --- vendor/sqlite3/dist/sqlite3.h Tue Jul 7 12:24:40 2020 (r362989) +++ vendor/sqlite3/dist/sqlite3.h Tue Jul 7 13:48:26 2020 (r362990) @@ -123,9 +123,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.32.2" -#define SQLITE_VERSION_NUMBER 3032002 -#define SQLITE_SOURCE_ID "2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c" +#define SQLITE_VERSION "3.32.3" +#define SQLITE_VERSION_NUMBER 3032003 +#define SQLITE_SOURCE_ID "2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933cc8fd" /* ** CAPI3REF: Run-Time Library Version Numbers Modified: vendor/sqlite3/dist/tea/configure ============================================================================== --- vendor/sqlite3/dist/tea/configure Tue Jul 7 12:24:40 2020 (r362989) +++ vendor/sqlite3/dist/tea/configure Tue Jul 7 13:48:26 2020 (r362990) @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for sqlite 3.32.2. +# Generated by GNU Autoconf 2.69 for sqlite 3.32.3. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -577,8 +577,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sqlite' PACKAGE_TARNAME='sqlite' -PACKAGE_VERSION='3.32.2' -PACKAGE_STRING='sqlite 3.32.2' +PACKAGE_VERSION='3.32.3' +PACKAGE_STRING='sqlite 3.32.3' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1303,7 +1303,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sqlite 3.32.2 to adapt to many kinds of systems. +\`configure' configures sqlite 3.32.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1365,7 +1365,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sqlite 3.32.2:";; + short | recursive ) echo "Configuration of sqlite 3.32.3:";; esac cat <<\_ACEOF @@ -1467,7 +1467,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sqlite configure 3.32.2 +sqlite configure 3.32.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1878,7 +1878,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sqlite $as_me 3.32.2, which was +It was created by sqlite $as_me 3.32.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -9373,7 +9373,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sqlite $as_me 3.32.2, which was +This file was extended by sqlite $as_me 3.32.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -9426,7 +9426,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -sqlite config.status 3.32.2 +sqlite config.status 3.32.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Modified: vendor/sqlite3/dist/tea/configure.ac ============================================================================== --- vendor/sqlite3/dist/tea/configure.ac Tue Jul 7 12:24:40 2020 (r362989) +++ vendor/sqlite3/dist/tea/configure.ac Tue Jul 7 13:48:26 2020 (r362990) @@ -19,7 +19,7 @@ dnl to configure the system for the local environment. # so you can encode the package version directly into the source files. #----------------------------------------------------------------------- -AC_INIT([sqlite], [3.32.2]) +AC_INIT([sqlite], [3.32.3]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. From owner-svn-src-all@freebsd.org Tue Jul 7 13:51:17 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 99CD336373A; Tue, 7 Jul 2020 13:51:17 +0000 (UTC) (envelope-from cy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1P3n3bMZz4d0y; Tue, 7 Jul 2020 13:51:17 +0000 (UTC) (envelope-from cy@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4740C10341; Tue, 7 Jul 2020 13:51:17 +0000 (UTC) (envelope-from cy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 067DpH7t080178; Tue, 7 Jul 2020 13:51:17 GMT (envelope-from cy@FreeBSD.org) Received: (from cy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 067DpHDp080161; Tue, 7 Jul 2020 13:51:17 GMT (envelope-from cy@FreeBSD.org) Message-Id: <202007071351.067DpHDp080161@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: cy set sender to cy@FreeBSD.org using -f From: Cy Schubert Date: Tue, 7 Jul 2020 13:51:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r362991 - vendor/sqlite3/sqlite-3320300 X-SVN-Group: vendor X-SVN-Commit-Author: cy X-SVN-Commit-Paths: vendor/sqlite3/sqlite-3320300 X-SVN-Commit-Revision: 362991 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 13:51:17 -0000 Author: cy Date: Tue Jul 7 13:51:16 2020 New Revision: 362991 URL: https://svnweb.freebsd.org/changeset/base/362991 Log: Tag sqlite 3.32.3 (3320300). Added: vendor/sqlite3/sqlite-3320300/ - copied from r362990, vendor/sqlite3/dist/ From owner-svn-src-all@freebsd.org Tue Jul 7 16:07:40 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3A61B366130; Tue, 7 Jul 2020 16:07:40 +0000 (UTC) (envelope-from fernape@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1S580nsRz3XD9; Tue, 7 Jul 2020 16:07:40 +0000 (UTC) (envelope-from fernape@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EE1D611E74; Tue, 7 Jul 2020 16:07:39 +0000 (UTC) (envelope-from fernape@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 067G7dwD061566; Tue, 7 Jul 2020 16:07:39 GMT (envelope-from fernape@FreeBSD.org) Received: (from fernape@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 067G7dWM061565; Tue, 7 Jul 2020 16:07:39 GMT (envelope-from fernape@FreeBSD.org) Message-Id: <202007071607.067G7dWM061565@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: fernape set sender to fernape@FreeBSD.org using -f From: =?UTF-8?Q?Fernando_Apestegu=c3=ada?= Date: Tue, 7 Jul 2020 16:07:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362992 - head/usr.bin/time X-SVN-Group: head X-SVN-Commit-Author: fernape X-SVN-Commit-Paths: head/usr.bin/time X-SVN-Commit-Revision: 362992 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 16:07:40 -0000 Author: fernape (ports committer) Date: Tue Jul 7 16:07:39 2020 New Revision: 362992 URL: https://svnweb.freebsd.org/changeset/base/362992 Log: time(1): Add EXAMPLES section Add EXAMPLES showing all five flags: -a, -h, -l, -o, -p Approved by: manpages (bcr) Modified: head/usr.bin/time/time.1 Modified: head/usr.bin/time/time.1 ============================================================================== --- head/usr.bin/time/time.1 Tue Jul 7 13:51:16 2020 (r362991) +++ head/usr.bin/time/time.1 Tue Jul 7 16:07:39 2020 (r362992) @@ -28,7 +28,7 @@ .\" @(#)time.1 8.1 (Berkeley) 6/6/93 .\" $FreeBSD$ .\" -.Dd May 14, 2006 +.Dd July 7, 2020 .Dt TIME 1 .Os .Sh NAME @@ -129,6 +129,62 @@ If .Nm encounters any other error, the exit status is between 1 and 125 included. +.Sh EXAMPLES +Time the execution of +.Xr ls 1 +on an empty directory: +.Bd -literal -offset indent +$ /usr/bin/time ls + 0.00 real 0.00 user 0.00 sys +.Ed +.Pp +Time the execution of the +.Xr cp 1 +command and store the result in the +.Pa times.txt +file. +Then execute the command again to make a new copy and add the result to the same +file: +.Bd -literal -offset indent +$ /usr/bin/time -o times.txt cp FreeBSD-12.1-RELEASE-amd64-bootonly.iso copy1.iso +$ /usr/bin/time -a -o times.txt cp FreeBSD-12.1-RELEASE-amd64-bootonly.iso copy2.iso +.Ed +.Pp +The +.Pa times.txt +file will contain the times of both commands: +.Bd -literal -offset indent +$ cat times.txt + 0.68 real 0.00 user 0.22 sys + 0.67 real 0.00 user 0.21 sys +.Ed +.Pp +Time the +.Xr sleep 1 +command and show the results in a human friendly format. +Show the contents of the +.Em rusage +structure too: +.Bd -literal -offset indent +$ /usr/bin/time -l -h -p sleep 5 +real 5.01 +user 0.00 +sys 0.00 + 0 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 80 page reclaims + 0 page faults + 0 swaps + 1 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 0 signals received + 3 voluntary context switches + 0 involuntary context switches +.Ed .Sh SEE ALSO .Xr builtin 1 , .Xr csh 1 , From owner-svn-src-all@freebsd.org Tue Jul 7 16:22:49 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id A48E836656E for ; Tue, 7 Jul 2020 16:22:49 +0000 (UTC) (envelope-from fernando.apesteguia@gmail.com) Received: from mail-vs1-f41.google.com (mail-vs1-f41.google.com [209.85.217.41]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1SQc0dRlz3Yy0 for ; Tue, 7 Jul 2020 16:22:47 +0000 (UTC) (envelope-from fernando.apesteguia@gmail.com) Received: by mail-vs1-f41.google.com with SMTP id j186so868407vsd.10 for ; Tue, 07 Jul 2020 09:22:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=Zi1zeiYxOP52035S+A7RkoKzvfIK5NW5C3BgwrdWfvI=; b=Afm9aq+/j7//Fnj05giAujEe40Jqt5BPviPA255dgCpUYl0+RS4rCTnlXl9WFt6l4E L4Xo4tOkPljBz7g2O/eyv2swoeaTPnfNxc0VeQIo4iM2AmJ53BUfzj8M+qSg2T7KO8c8 XArh0cmIM5oYgAq4VP1nKRWCWGrLCnbRWbMqiDzEnEDVdwZyVlEHcYAXuXz0CCzayjdC J/AdIEmWn10VDkSIMgEJH4uPSbxqNZfiuT1aMjzsikgI5OAyabvQpdPgaBumEhJ/eyhQ OMh2fmQ4/4rfMrOqMH9qgOtC6H7U9ox/yCoGRgLnxQPiT8Lhr69IMXL93p6jIES4Df9P HyVA== X-Gm-Message-State: AOAM531GwE/AezQJSLIXyPWYGxioIADnFZ98Kai9+BdZAc2b0pn2uryi /AHSRO5Cfu3Zm99WlAncCi4wT1yCkcw= X-Google-Smtp-Source: ABdhPJz/xBXlsUfIjyDYIYxGe6x/dfvW9aQG09+FWEQ9ZdNDldFwsQkSvxKxE47/p+bIGkV9mPdXAg== X-Received: by 2002:a67:f8da:: with SMTP id c26mr29162366vsp.204.1594138967039; Tue, 07 Jul 2020 09:22:47 -0700 (PDT) Received: from mail-ua1-f44.google.com (mail-ua1-f44.google.com. [209.85.222.44]) by smtp.gmail.com with ESMTPSA id q7sm121322vsp.14.2020.07.07.09.22.46 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 07 Jul 2020 09:22:46 -0700 (PDT) Received: by mail-ua1-f44.google.com with SMTP id g4so708120uaq.10 for ; Tue, 07 Jul 2020 09:22:46 -0700 (PDT) X-Received: by 2002:a9f:2b8d:: with SMTP id y13mr8138733uai.73.1594138966454; Tue, 07 Jul 2020 09:22:46 -0700 (PDT) MIME-Version: 1.0 From: =?UTF-8?Q?Fernando_Apestegu=C3=ADa?= Date: Tue, 7 Jul 2020 19:22:01 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: DR for r362992 To: svn-src-all@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4B1SQc0dRlz3Yy0 X-Spamd-Bar: / Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=pass (mx1.freebsd.org: domain of fernandoapesteguia@gmail.com designates 209.85.217.41 as permitted sender) smtp.mailfrom=fernandoapesteguia@gmail.com X-Spamd-Result: default: False [-0.64 / 15.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; R_SPF_ALLOW(-0.20)[+ip4:209.85.128.0/17]; TO_DN_NONE(0.00)[]; RCVD_COUNT_THREE(0.00)[4]; NEURAL_HAM_SHORT(-0.05)[-0.052]; FORGED_SENDER(0.30)[fernape@freebsd.org,fernandoapesteguia@gmail.com]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[gmail.com]; R_MIXED_CHARSET(1.00)[subject]; R_DKIM_NA(0.00)[]; TAGGED_FROM(0.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US]; FROM_NEQ_ENVFROM(0.00)[fernape@freebsd.org,fernandoapesteguia@gmail.com]; ARC_NA(0.00)[]; TO_DOM_EQ_FROM_DOM(0.00)[]; NEURAL_HAM_MEDIUM(-0.68)[-0.678]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; NEURAL_HAM_LONG(-0.91)[-0.909]; MIME_GOOD(-0.10)[text/plain]; PREVIOUSLY_DELIVERED(0.00)[svn-src-all@freebsd.org]; DMARC_NA(0.00)[freebsd.org]; RCPT_COUNT_ONE(0.00)[1]; RCVD_IN_DNSWL_NONE(0.00)[209.85.217.41:from]; RWL_MAILSPIKE_POSSIBLE(0.00)[209.85.217.41:from]; RCVD_TLS_ALL(0.00)[] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 16:22:49 -0000 DR for r362992 is https://reviews.freebsd.org/D25548 approved by (gbe@) From owner-svn-src-all@freebsd.org Tue Jul 7 16:35:53 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9E06B36667E; Tue, 7 Jul 2020 16:35:53 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1Sjj3XNtz3Z7j; Tue, 7 Jul 2020 16:35:53 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5CBFE123D4; Tue, 7 Jul 2020 16:35:53 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 067GZr0L080474; Tue, 7 Jul 2020 16:35:53 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 067GZrpa080473; Tue, 7 Jul 2020 16:35:53 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007071635.067GZrpa080473@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Tue, 7 Jul 2020 16:35:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362993 - head/sys/conf X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: head/sys/conf X-SVN-Commit-Revision: 362993 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 16:35:53 -0000 Author: markj Date: Tue Jul 7 16:35:52 2020 New Revision: 362993 URL: https://svnweb.freebsd.org/changeset/base/362993 Log: Rebuild sysent when capabilities.conf is updated. Reviewed by: brooks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D25571 Modified: head/sys/conf/sysent.mk Modified: head/sys/conf/sysent.mk ============================================================================== --- head/sys/conf/sysent.mk Tue Jul 7 16:07:39 2020 (r362992) +++ head/sys/conf/sysent.mk Tue Jul 7 16:35:52 2020 (r362993) @@ -22,6 +22,13 @@ SYSENT_CONF?= syscalls.conf SRCS+= ${SYSENT_FILE} SRCS+= ${SYSENT_CONF} +# Ensure that the target gets updated if the capabilities file is modified, +# even though it is not an explicit input to makesyscalls.lua. For some +# targets, like Linux system calls, this is unnecessary, but a spurious rebuild +# is both rare and harmless. +CAPABILITIES_CONF?= ${SYSDIR}/kern/capabilities.conf +SRCS+= ${CAPABILITIES_CONF} + MAKESYSCALLS_INTERP?= ${LUA} MAKESYSCALLS_SCRIPT?= ${SYSDIR}/tools/makesyscalls.lua MAKESYSCALLS= ${MAKESYSCALLS_INTERP} ${MAKESYSCALLS_SCRIPT} From owner-svn-src-all@freebsd.org Tue Jul 7 17:02:24 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C9C89367747; Tue, 7 Jul 2020 17:02:24 +0000 (UTC) (envelope-from fernape@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1TJJ4bSbz3c2t; Tue, 7 Jul 2020 17:02:24 +0000 (UTC) (envelope-from fernape@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 67F08128F2; Tue, 7 Jul 2020 17:02:24 +0000 (UTC) (envelope-from fernape@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 067H2OFS098553; Tue, 7 Jul 2020 17:02:24 GMT (envelope-from fernape@FreeBSD.org) Received: (from fernape@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 067H2OeA098513; Tue, 7 Jul 2020 17:02:24 GMT (envelope-from fernape@FreeBSD.org) Message-Id: <202007071702.067H2OeA098513@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: fernape set sender to fernape@FreeBSD.org using -f From: =?UTF-8?Q?Fernando_Apestegu=c3=ada?= Date: Tue, 7 Jul 2020 17:02:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362994 - head/usr.bin/timeout X-SVN-Group: head X-SVN-Commit-Author: fernape X-SVN-Commit-Paths: head/usr.bin/timeout X-SVN-Commit-Revision: 362994 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 17:02:24 -0000 Author: fernape (ports committer) Date: Tue Jul 7 17:02:23 2020 New Revision: 362994 URL: https://svnweb.freebsd.org/changeset/base/362994 Log: timeout(1): Add EXAMPLES section Small EXAMPLES section showing the use of -s, -k and the different exit values Approved by: manpages (gbe) Differential Revision: https://reviews.freebsd.org/D25575 Modified: head/usr.bin/timeout/timeout.1 Modified: head/usr.bin/timeout/timeout.1 ============================================================================== --- head/usr.bin/timeout/timeout.1 Tue Jul 7 16:35:52 2020 (r362993) +++ head/usr.bin/timeout/timeout.1 Tue Jul 7 17:02:23 2020 (r362994) @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd March 28, 2018 +.Dd July 7, 2020 .Dt TIMEOUT 1 .Os .Sh NAME @@ -136,6 +136,62 @@ If an invalid parameter is passed to or .Fl k , the exit status returned is 125. +.Sh EXAMPLES +Run +.Xr sleep 1 +with a time limit of 4 seconds. +Since the command completes in 2 seconds, the exit status is 0: +.Bd -literal -offset indent +$ timeout 4 sleep 2 +$ echo $? +0 +.Ed +.Pp +Run +.Xr sleep 1 +for 4 seconds and terminate process after 2 seconds. +124 is returned since no +.Fl -preserve-status +is used: +.Bd -literal -offset indent +$ timeout 2 sleep 4 +$ echo $? +124 +.Ed +.Pp +Same as above but preserving status. +Exit status is 128 + signal number (15 for +.Va SIGTERM ) +.Bd -literal -offset indent +$ timeout --preserve-status 2 sleep 4 +$ echo $? +143 +.Ed +.Pp +Same as above but sending +.Va SIGALRM +(signal number 14) instead of +.Va SIGTERM +.Bd -literal -offset indent +$ timeout --preserve-status -s SIGALRM 2 sleep 4 +$ echo $? +142 +.Ed +.Pp +Try to +.Xr fetch 1 +the single page version of the +.Fx +Handbook. +Send a +.Va SIGTERM +signal after 1 minute and send a +.Va SIGKILL +signal 5 seconds later if the process refuses to stop: +.Bd -literal -offset indent +timeout -k 5s 1m fetch \\ +https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html +.Ed .Sh SEE ALSO .Xr kill 1 , .Xr signal 3 From owner-svn-src-all@freebsd.org Tue Jul 7 17:17:55 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 6DCFA367BA2; Tue, 7 Jul 2020 17:17:55 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1TfC2LDRz3cw8; Tue, 7 Jul 2020 17:17:55 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from John-Baldwins-MacBook-Pro-274.local (unknown [IPv6:2601:648:8203:2990:98ed:1435:28a2:b475]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: jhb) by smtp.freebsd.org (Postfix) with ESMTPSA id B63AC2E9A1; Tue, 7 Jul 2020 17:17:54 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Subject: Re: svn commit: r362902 - in head/lib/csu: . aarch64 amd64 arm i386 mips powerpc powerpc64 riscv To: Kjell Tore Ullavik , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org References: <202007030009.06309gcC099579@repo.freebsd.org> <7b140e64-ba4d-d76e-29a4-d0587f7351a0@gmail.com> From: John Baldwin Autocrypt: addr=jhb@FreeBSD.org; keydata= mQGiBETQ+XcRBADMFybiq69u+fJRy/0wzqTNS8jFfWaBTs5/OfcV7wWezVmf9sgwn8TW0Dk0 c9MBl0pz+H01dA2ZSGZ5fXlmFIsee1WEzqeJzpiwd/pejPgSzXB9ijbLHZ2/E0jhGBcVy5Yo /Tw5+U/+laeYKu2xb0XPvM0zMNls1ah5OnP9a6Ql6wCgupaoMySb7DXm2LHD1Z9jTsHcAQMD /1jzh2BoHriy/Q2s4KzzjVp/mQO5DSm2z14BvbQRcXU48oAosHA1u3Wrov6LfPY+0U1tG47X 1BGfnQH+rNAaH0livoSBQ0IPI/8WfIW7ub4qV6HYwWKVqkDkqwcpmGNDbz3gfaDht6nsie5Z pcuCcul4M9CW7Md6zzyvktjnbz61BADGDCopfZC4of0Z3Ka0u8Wik6UJOuqShBt1WcFS8ya1 oB4rc4tXfSHyMF63aPUBMxHR5DXeH+EO2edoSwViDMqWk1jTnYza51rbGY+pebLQOVOxAY7k do5Ordl3wklBPMVEPWoZ61SdbcjhHVwaC5zfiskcxj5wwXd2E9qYlBqRg7QeSm9obiBCYWxk d2luIDxqaGJARnJlZUJTRC5vcmc+iGAEExECACAFAkTQ+awCGwMGCwkIBwMCBBUCCAMEFgID AQIeAQIXgAAKCRBy3lIGd+N/BI6RAJ9S97fvbME+3hxzE3JUyUZ6vTewDACdE1stFuSfqMvM jomvZdYxIYyTUpC5Ag0ERND5ghAIAPwsO0B7BL+bz8sLlLoQktGxXwXQfS5cInvL17Dsgnr3 1AKa94j9EnXQyPEj7u0d+LmEe6CGEGDh1OcGFTMVrof2ZzkSy4+FkZwMKJpTiqeaShMh+Goj XlwIMDxyADYvBIg3eN5YdFKaPQpfgSqhT+7El7w+wSZZD8pPQuLAnie5iz9C8iKy4/cMSOrH YUK/tO+Nhw8Jjlw94Ik0T80iEhI2t+XBVjwdfjbq3HrJ0ehqdBwukyeJRYKmbn298KOFQVHO EVbHA4rF/37jzaMadK43FgJ0SAhPPF5l4l89z5oPu0b/+5e2inA3b8J3iGZxywjM+Csq1tqz hltEc7Q+E08AAwUIAL+15XH8bPbjNJdVyg2CMl10JNW2wWg2Q6qdljeaRqeR6zFus7EZTwtX sNzs5bP8y51PSUDJbeiy2RNCNKWFMndM22TZnk3GNG45nQd4OwYK0RZVrikalmJY5Q6m7Z16 4yrZgIXFdKj2t8F+x613/SJW1lIr9/bDp4U9tw0V1g3l2dFtD3p3ZrQ3hpoDtoK70ioIAjjH aIXIAcm3FGZFXy503DOA0KaTWwvOVdYCFLm3zWuSOmrX/GsEc7ovasOWwjPn878qVjbUKWwx Q4QkF4OhUV9zPtf9tDSAZ3x7QSwoKbCoRCZ/xbyTUPyQ1VvNy/mYrBcYlzHodsaqUDjHuW+I SQQYEQIACQUCRND5ggIbDAAKCRBy3lIGd+N/BCO8AJ9j1dWVQWxw/YdTbEyrRKOY8YZNwwCf afMAg8QvmOWnHx3wl8WslCaXaE8= Message-ID: <6a4ff241-c77d-c68c-f0f0-9a562fa66d3f@FreeBSD.org> Date: Tue, 7 Jul 2020 10:16:57 -0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <7b140e64-ba4d-d76e-29a4-d0587f7351a0@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 17:17:55 -0000 On 7/3/20 2:46 PM, Kjell Tore Ullavik wrote: > > Got a buildworld error for CURRENT, amd64 today. I have not rebuilt in > while, but maybe r362902 is related? Yes, it is a bug in that commit. I'll commit a fix once it's been reviewed. Thanks! -- John Baldwin From owner-svn-src-all@freebsd.org Tue Jul 7 18:19:06 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7AAB1348AC3; Tue, 7 Jul 2020 18:19:06 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1W0p2fsYz3gMH; Tue, 7 Jul 2020 18:19:06 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3A66D139A7; Tue, 7 Jul 2020 18:19:06 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 067IJ6IG042580; Tue, 7 Jul 2020 18:19:06 GMT (envelope-from jhb@FreeBSD.org) Received: (from jhb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 067IJ6Qe042579; Tue, 7 Jul 2020 18:19:06 GMT (envelope-from jhb@FreeBSD.org) Message-Id: <202007071819.067IJ6Qe042579@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhb set sender to jhb@FreeBSD.org using -f From: John Baldwin Date: Tue, 7 Jul 2020 18:19:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362995 - head/lib/csu X-SVN-Group: head X-SVN-Commit-Author: jhb X-SVN-Commit-Paths: head/lib/csu X-SVN-Commit-Revision: 362995 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 18:19:06 -0000 Author: jhb Date: Tue Jul 7 18:19:05 2020 New Revision: 362995 URL: https://svnweb.freebsd.org/changeset/base/362995 Log: Invoke objcopy on the right object when building Scrt1.o on i386. This was a copy-paste bug in r362902. While here, switch to using ${.TARGET}. Reported by: Kjell Tore Ullavik Reviewed by: kib Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D25585 Modified: head/lib/csu/Makefile.inc Modified: head/lib/csu/Makefile.inc ============================================================================== --- head/lib/csu/Makefile.inc Tue Jul 7 17:02:23 2020 (r362994) +++ head/lib/csu/Makefile.inc Tue Jul 7 18:19:05 2020 (r362995) @@ -37,7 +37,7 @@ CLEANFILES+= ${OBJS} ${CRT1OBJS} crt1_c.o gcrt1_c.o Sc crt1.o: crt1_c.o ${CRT1OBJS} ${LD} ${_LDFLAGS} -o ${.TARGET} -r ${.ALLSRC:M*.o} .if ${MACHINE_ARCH} == "i386" - ${OBJCOPY} --localize-symbol _start1 crt1.o + ${OBJCOPY} --localize-symbol _start1 ${.TARGET} .endif gcrt1_c.o: crt1_c.c @@ -52,7 +52,7 @@ Scrt1_c.o: crt1_c.c Scrt1.o: Scrt1_c.o ${CRT1OBJS} ${LD} ${_LDFLAGS} -o ${.TARGET} -r ${.ALLSRC:M*.o} .if ${MACHINE_ARCH} == "i386" - ${OBJCOPY} --localize-symbol _start1 crt1.o + ${OBJCOPY} --localize-symbol _start1 ${.TARGET} .endif crtbegin.o: crtbegin.c From owner-svn-src-all@freebsd.org Tue Jul 7 18:37:07 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 6734F34944B; Tue, 7 Jul 2020 18:37:07 +0000 (UTC) (envelope-from gbe@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1WPb2BVzz3yRJ; Tue, 7 Jul 2020 18:37:07 +0000 (UTC) (envelope-from gbe@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2E66813AE5; Tue, 7 Jul 2020 18:37:07 +0000 (UTC) (envelope-from gbe@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 067Ib7ph054935; Tue, 7 Jul 2020 18:37:07 GMT (envelope-from gbe@FreeBSD.org) Received: (from gbe@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 067Ib7k5054934; Tue, 7 Jul 2020 18:37:07 GMT (envelope-from gbe@FreeBSD.org) Message-Id: <202007071837.067Ib7k5054934@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gbe set sender to gbe@FreeBSD.org using -f From: Gordon Bergling Date: Tue, 7 Jul 2020 18:37:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r362996 - stable/12/share/man/man4 X-SVN-Group: stable-12 X-SVN-Commit-Author: gbe X-SVN-Commit-Paths: stable/12/share/man/man4 X-SVN-Commit-Revision: 362996 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 18:37:07 -0000 Author: gbe (doc committer) Date: Tue Jul 7 18:37:06 2020 New Revision: 362996 URL: https://svnweb.freebsd.org/changeset/base/362996 Log: MFC r362779: gre(4): Add a STANDARDS section Expand the mentioned RFC in the SEE ALSO section and reference RFC1701 and RFC1702. PR: 240250 Reviewed by: bcr (mentor) Approved by: bcr (mentor) Obtained from: OpenBSD Differential Revision: https://reviews.freebsd.org/D25504 Modified: stable/12/share/man/man4/gre.4 Directory Properties: stable/12/ (props changed) Modified: stable/12/share/man/man4/gre.4 ============================================================================== --- stable/12/share/man/man4/gre.4 Tue Jul 7 18:19:05 2020 (r362995) +++ stable/12/share/man/man4/gre.4 Tue Jul 7 18:37:06 2020 (r362996) @@ -29,7 +29,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 24, 2019 +.Dd June 29, 2020 .Dt GRE 4 .Os .Sh NAME @@ -219,8 +219,44 @@ variable to non-zero. .Xr protocols 5 , .Xr ifconfig 8 , .Xr sysctl 8 +.Sh STANDARDS +.Rs +.%A S. Hanks +.%A "T. Li" +.%A D. Farinacci +.%A P. Traina +.%D October 1994 +.%R RFC 1701 +.%T Generic Routing Encapsulation (GRE) +.Re .Pp -A description of GRE encapsulation can be found in RFC 2784 and RFC 2890. +.Rs +.%A S. Hanks +.%A "T. Li" +.%A D. Farinacci +.%A P. Traina +.%D October 1994 +.%R RFC 1702 +.%T Generic Routing Encapsulation over IPv4 networks +.Re +.Pp +.Rs +.%A D. Farinacci +.%A "T. Li" +.%A S. Hanks +.%A D. Meyer +.%A P. Traina +.%D March 2000 +.%R RFC 2784 +.%T Generic Routing Encapsulation (GRE) +.Re +.Pp +.Rs +.%A G. Dommety +.%D September 2000 +.%R RFC 2890 +.%T Key and Sequence Number Extensions to GRE +.Re .Sh AUTHORS .An Andrey V. Elsukov Aq Mt ae@FreeBSD.org .An Heiko W.Rupp Aq Mt hwr@pilhuhn.de From owner-svn-src-all@freebsd.org Tue Jul 7 19:09:55 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9D05B34A065; Tue, 7 Jul 2020 19:09:55 +0000 (UTC) (envelope-from cy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1X7R40WWz41D6; Tue, 7 Jul 2020 19:09:55 +0000 (UTC) (envelope-from cy@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6DA3614314; Tue, 7 Jul 2020 19:09:55 +0000 (UTC) (envelope-from cy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 067J9t9n073514; Tue, 7 Jul 2020 19:09:55 GMT (envelope-from cy@FreeBSD.org) Received: (from cy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 067J9dDC073497; Tue, 7 Jul 2020 19:09:39 GMT (envelope-from cy@FreeBSD.org) Message-Id: <202007071909.067J9dDC073497@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: cy set sender to cy@FreeBSD.org using -f From: Cy Schubert Date: Tue, 7 Jul 2020 19:09:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362997 - in head/contrib/sqlite3: . tea X-SVN-Group: head X-SVN-Commit-Author: cy X-SVN-Commit-Paths: in head/contrib/sqlite3: . tea X-SVN-Commit-Revision: 362997 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 19:09:55 -0000 Author: cy Date: Tue Jul 7 19:09:38 2020 New Revision: 362997 URL: https://svnweb.freebsd.org/changeset/base/362997 Log: MFV r362990: Update sqlite to 3.32.3 (3320300). Release Announcement: https://www.sqlite.org/releaselog/3_32_3.html See also: ports r541414 PR: 247819 Reported by: Pavel Volkov MFC after: 1 week Modified: head/contrib/sqlite3/configure head/contrib/sqlite3/configure.ac head/contrib/sqlite3/sqlite3.c head/contrib/sqlite3/sqlite3.h head/contrib/sqlite3/tea/configure head/contrib/sqlite3/tea/configure.ac Directory Properties: head/contrib/sqlite3/ (props changed) Modified: head/contrib/sqlite3/configure ============================================================================== --- head/contrib/sqlite3/configure Tue Jul 7 18:37:06 2020 (r362996) +++ head/contrib/sqlite3/configure Tue Jul 7 19:09:38 2020 (r362997) @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for sqlite 3.32.2. +# Generated by GNU Autoconf 2.69 for sqlite 3.32.3. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sqlite' PACKAGE_TARNAME='sqlite' -PACKAGE_VERSION='3.32.2' -PACKAGE_STRING='sqlite 3.32.2' +PACKAGE_VERSION='3.32.3' +PACKAGE_STRING='sqlite 3.32.3' PACKAGE_BUGREPORT='http://www.sqlite.org' PACKAGE_URL='' @@ -1341,7 +1341,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sqlite 3.32.2 to adapt to many kinds of systems. +\`configure' configures sqlite 3.32.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1412,7 +1412,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sqlite 3.32.2:";; + short | recursive ) echo "Configuration of sqlite 3.32.3:";; esac cat <<\_ACEOF @@ -1537,7 +1537,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sqlite configure 3.32.2 +sqlite configure 3.32.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1952,7 +1952,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sqlite $as_me 3.32.2, which was +It was created by sqlite $as_me 3.32.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2818,7 +2818,7 @@ fi # Define the identity of the package. PACKAGE='sqlite' - VERSION='3.32.2' + VERSION='3.32.3' cat >>confdefs.h <<_ACEOF @@ -14438,7 +14438,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sqlite $as_me 3.32.2, which was +This file was extended by sqlite $as_me 3.32.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -14495,7 +14495,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -sqlite config.status 3.32.2 +sqlite config.status 3.32.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Modified: head/contrib/sqlite3/configure.ac ============================================================================== --- head/contrib/sqlite3/configure.ac Tue Jul 7 18:37:06 2020 (r362996) +++ head/contrib/sqlite3/configure.ac Tue Jul 7 19:09:38 2020 (r362997) @@ -10,7 +10,7 @@ # AC_PREREQ(2.61) -AC_INIT(sqlite, 3.32.2, http://www.sqlite.org) +AC_INIT(sqlite, 3.32.3, http://www.sqlite.org) AC_CONFIG_SRCDIR([sqlite3.c]) AC_CONFIG_AUX_DIR([.]) Modified: head/contrib/sqlite3/sqlite3.c ============================================================================== --- head/contrib/sqlite3/sqlite3.c Tue Jul 7 18:37:06 2020 (r362996) +++ head/contrib/sqlite3/sqlite3.c Tue Jul 7 19:09:38 2020 (r362997) @@ -1,6 +1,6 @@ /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite -** version 3.32.2. By combining all the individual C code files into this +** version 3.32.3. By combining all the individual C code files into this ** single large file, the entire code can be compiled as a single translation ** unit. This allows many compilers to do optimizations that would not be ** possible if the files were compiled separately. Performance improvements @@ -1162,9 +1162,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.32.2" -#define SQLITE_VERSION_NUMBER 3032002 -#define SQLITE_SOURCE_ID "2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c" +#define SQLITE_VERSION "3.32.3" +#define SQLITE_VERSION_NUMBER 3032003 +#define SQLITE_SOURCE_ID "2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933cc8fd" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -17863,11 +17863,11 @@ struct AggInfo { ExprList *pGroupBy; /* The group by clause */ struct AggInfo_col { /* For each column used in source tables */ Table *pTab; /* Source table */ + Expr *pExpr; /* The original expression */ int iTable; /* Cursor number of the source table */ - int iColumn; /* Column number within the source table */ - int iSorterColumn; /* Column number in the sorting index */ int iMem; /* Memory location that acts as accumulator */ - Expr *pExpr; /* The original expression */ + i16 iColumn; /* Column number within the source table */ + i16 iSorterColumn; /* Column number in the sorting index */ } *aCol; int nColumn; /* Number of used entries in aCol[] */ int nAccumulator; /* Number of columns that show through to the output. @@ -17880,9 +17880,18 @@ struct AggInfo { int iDistinct; /* Ephemeral table used to enforce DISTINCT */ } *aFunc; int nFunc; /* Number of entries in aFunc[] */ +#ifdef SQLITE_DEBUG + int iAggMagic; /* Magic number when valid */ +#endif + AggInfo *pNext; /* Next in list of them all */ }; /* +** Value for AggInfo.iAggMagic when the structure is valid +*/ +#define AggInfoMagic 0x2059e99e + +/* ** The datatype ynVar is a signed integer, either 16-bit or 32-bit. ** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater ** than 32767 we have to make it 32-bit. 16-bit is preferred because @@ -18462,6 +18471,7 @@ struct Select { #define SF_WhereBegin 0x0080000 /* Really a WhereBegin() call. Debug Only */ #define SF_WinRewrite 0x0100000 /* Window function rewrite accomplished */ #define SF_View 0x0200000 /* SELECT statement is a view */ +#define SF_NoopOrderBy 0x0400000 /* ORDER BY is ignored for this query */ /* ** The results of a SELECT can be distributed in several ways, as defined @@ -18678,6 +18688,7 @@ struct Parse { Parse *pToplevel; /* Parse structure for main program (or NULL) */ Table *pTriggerTab; /* Table triggers are being coded for */ Parse *pParentParse; /* Parent parser if this parser is nested */ + AggInfo *pAggList; /* List of all AggInfo objects */ int addrCrTab; /* Address of OP_CreateBtree opcode on CREATE TABLE */ u32 nQueryLoop; /* Est number of iterations of a query (10*log2(N)) */ u32 oldmask; /* Mask of old.* columns referenced */ @@ -19644,6 +19655,7 @@ SQLITE_PRIVATE int sqlite3ExprCompareSkip(Expr*, Expr* SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList*, ExprList*, int); SQLITE_PRIVATE int sqlite3ExprImpliesExpr(Parse*,Expr*, Expr*, int); SQLITE_PRIVATE int sqlite3ExprImpliesNonNullRow(Expr*,int); +SQLITE_PRIVATE void sqlite3AggInfoPersistWalkerInit(Walker*,Parse*); SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext*, Expr*); SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext*,ExprList*); SQLITE_PRIVATE int sqlite3ExprCoveredByIndex(Expr*, int iCur, Index *pIdx); @@ -64526,16 +64538,18 @@ static int hasSharedCacheTableLock( ** table. */ if( isIndex ){ HashElem *p; + int bSeen = 0; for(p=sqliteHashFirst(&pSchema->idxHash); p; p=sqliteHashNext(p)){ Index *pIdx = (Index *)sqliteHashData(p); if( pIdx->tnum==(int)iRoot ){ - if( iTab ){ + if( bSeen ){ /* Two or more indexes share the same root page. There must ** be imposter tables. So just return true. The assert is not ** useful in that case. */ return 1; } iTab = pIdx->pTable->tnum; + bSeen = 1; } } }else{ @@ -66077,7 +66091,7 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 i nFrag = iFreeBlk - iEnd; if( iEnd>iFreeBlk ) return SQLITE_CORRUPT_PAGE(pPage); iEnd = iFreeBlk + get2byte(&data[iFreeBlk+2]); - if( NEVER(iEnd > pPage->pBt->usableSize) ){ + if( iEnd > pPage->pBt->usableSize ){ return SQLITE_CORRUPT_PAGE(pPage); } iSize = iEnd - iStart; @@ -87194,7 +87208,7 @@ case OP_Ge: { /* same as TK_GE, jump, in1, if( (flags1 | flags3)&MEM_Str ){ if( (flags1 & (MEM_Int|MEM_IntReal|MEM_Real|MEM_Str))==MEM_Str ){ applyNumericAffinity(pIn1,0); - assert( flags3==pIn3->flags ); + testcase( flags3==pIn3->flags ); flags3 = pIn3->flags; } if( (flags3 & (MEM_Int|MEM_IntReal|MEM_Real|MEM_Str))==MEM_Str ){ @@ -99536,7 +99550,12 @@ SQLITE_PRIVATE char sqlite3ExprAffinity(const Expr *pE op = pExpr->op; if( op==TK_SELECT ){ assert( pExpr->flags&EP_xIsSelect ); - return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr); + if( ALWAYS(pExpr->x.pSelect) + && pExpr->x.pSelect->pEList + && ALWAYS(pExpr->x.pSelect->pEList->a[0].pExpr) + ){ + return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr); + } } if( op==TK_REGISTER ) op = pExpr->op2; #ifndef SQLITE_OMIT_CAST @@ -101527,8 +101546,10 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *p /* Fall through */ case TK_IF_NULL_ROW: case TK_REGISTER: + case TK_DOT: testcase( pExpr->op==TK_REGISTER ); testcase( pExpr->op==TK_IF_NULL_ROW ); + testcase( pExpr->op==TK_DOT ); pWalker->eCode = 0; return WRC_Abort; case TK_VARIABLE: @@ -105134,11 +105155,26 @@ SQLITE_PRIVATE int sqlite3ExprCoveredByIndex( */ struct SrcCount { SrcList *pSrc; /* One particular FROM clause in a nested query */ + int iSrcInner; /* Smallest cursor number in this context */ int nThis; /* Number of references to columns in pSrcList */ int nOther; /* Number of references to columns in other FROM clauses */ }; /* +** xSelect callback for sqlite3FunctionUsesThisSrc(). If this is the first +** SELECT with a FROM clause encountered during this iteration, set +** SrcCount.iSrcInner to the cursor number of the leftmost object in +** the FROM cause. +*/ +static int selectSrcCount(Walker *pWalker, Select *pSel){ + struct SrcCount *p = pWalker->u.pSrcCount; + if( p->iSrcInner==0x7FFFFFFF && ALWAYS(pSel->pSrc) && pSel->pSrc->nSrc ){ + pWalker->u.pSrcCount->iSrcInner = pSel->pSrc->a[0].iCursor; + } + return WRC_Continue; +} + +/* ** Count the number of references to columns. */ static int exprSrcCount(Walker *pWalker, Expr *pExpr){ @@ -105158,7 +105194,7 @@ static int exprSrcCount(Walker *pWalker, Expr *pExpr){ } if( inThis++; - }else if( nSrc==0 || pExpr->iTablea[0].iCursor ){ + }else if( pExpr->iTableiSrcInner ){ /* In a well-formed parse tree (no name resolution errors), ** TK_COLUMN nodes with smaller Expr.iTable values are in an ** outer context. Those are the only ones to count as "other" */ @@ -105180,9 +105216,10 @@ SQLITE_PRIVATE int sqlite3FunctionUsesThisSrc(Expr *pE assert( pExpr->op==TK_AGG_FUNCTION ); memset(&w, 0, sizeof(w)); w.xExprCallback = exprSrcCount; - w.xSelectCallback = sqlite3SelectWalkNoop; + w.xSelectCallback = selectSrcCount; w.u.pSrcCount = &cnt; cnt.pSrc = pSrcList; + cnt.iSrcInner = (pSrcList&&pSrcList->nSrc)?pSrcList->a[0].iCursor:0x7FFFFFFF; cnt.nThis = 0; cnt.nOther = 0; sqlite3WalkExprList(&w, pExpr->x.pList); @@ -105195,6 +105232,64 @@ SQLITE_PRIVATE int sqlite3FunctionUsesThisSrc(Expr *pE } /* +** This is a Walker expression node callback. +** +** For Expr nodes that contain pAggInfo pointers, make sure the AggInfo +** object that is referenced does not refer directly to the Expr. If +** it does, make a copy. This is done because the pExpr argument is +** subject to change. +** +** The copy is stored on pParse->pConstExpr with a register number of 0. +** This will cause the expression to be deleted automatically when the +** Parse object is destroyed, but the zero register number means that it +** will not generate any code in the preamble. +*/ +static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){ + if( ALWAYS(!ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced)) + && pExpr->pAggInfo!=0 + ){ + AggInfo *pAggInfo = pExpr->pAggInfo; + int iAgg = pExpr->iAgg; + Parse *pParse = pWalker->pParse; + sqlite3 *db = pParse->db; + assert( pExpr->op==TK_AGG_COLUMN || pExpr->op==TK_AGG_FUNCTION ); + if( pExpr->op==TK_AGG_COLUMN ){ + assert( iAgg>=0 && iAggnColumn ); + if( pAggInfo->aCol[iAgg].pExpr==pExpr ){ + pExpr = sqlite3ExprDup(db, pExpr, 0); + if( pExpr ){ + pAggInfo->aCol[iAgg].pExpr = pExpr; + pParse->pConstExpr = + sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); + } + } + }else{ + assert( iAgg>=0 && iAggnFunc ); + if( pAggInfo->aFunc[iAgg].pExpr==pExpr ){ + pExpr = sqlite3ExprDup(db, pExpr, 0); + if( pExpr ){ + pAggInfo->aFunc[iAgg].pExpr = pExpr; + pParse->pConstExpr = + sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); + } + } + } + } + return WRC_Continue; +} + +/* +** Initialize a Walker object so that will persist AggInfo entries referenced +** by the tree that is walked. +*/ +SQLITE_PRIVATE void sqlite3AggInfoPersistWalkerInit(Walker *pWalker, Parse *pParse){ + memset(pWalker, 0, sizeof(*pWalker)); + pWalker->pParse = pParse; + pWalker->xExprCallback = agginfoPersistExprCb; + pWalker->xSelectCallback = sqlite3SelectWalkNoop; +} + +/* ** Add a new element to the pAggInfo->aCol[] array. Return the index of ** the new element. Return a negative number if malloc fails. */ @@ -105224,7 +105319,7 @@ static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo) &i ); return i; -} +} /* ** This is the xExprCallback for a tree walker. It is used to @@ -110255,12 +110350,21 @@ SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse) */ sqlite3AutoincrementBegin(pParse); - /* Code constant expressions that where factored out of inner loops */ + /* Code constant expressions that where factored out of inner loops. + ** + ** The pConstExpr list might also contain expressions that we simply + ** want to keep around until the Parse object is deleted. Such + ** expressions have iConstExprReg==0. Do not generate code for + ** those expressions, of course. + */ if( pParse->pConstExpr ){ ExprList *pEL = pParse->pConstExpr; pParse->okConstFactor = 0; for(i=0; inExpr; i++){ - sqlite3ExprCode(pParse, pEL->a[i].pExpr, pEL->a[i].u.iConstExprReg); + int iReg = pEL->a[i].u.iConstExprReg; + if( iReg>0 ){ + sqlite3ExprCode(pParse, pEL->a[i].pExpr, iReg); + } } } @@ -128435,10 +128539,25 @@ SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, S } /* +** Deallocate a single AggInfo object +*/ +static void agginfoFree(sqlite3 *db, AggInfo *p){ + sqlite3DbFree(db, p->aCol); + sqlite3DbFree(db, p->aFunc); + sqlite3DbFree(db, p); +} + +/* ** Free all memory allocations in the pParse object */ SQLITE_PRIVATE void sqlite3ParserReset(Parse *pParse){ sqlite3 *db = pParse->db; + AggInfo *pThis = pParse->pAggList; + while( pThis ){ + AggInfo *pNext = pThis->pNext; + agginfoFree(db, pThis); + pThis = pNext; + } sqlite3DbFree(db, pParse->aLabel); sqlite3ExprListDelete(db, pParse->pConstExpr); if( db ){ @@ -131553,9 +131672,7 @@ static int multiSelect( selectOpName(p->op))); rc = sqlite3Select(pParse, p, &uniondest); testcase( rc!=SQLITE_OK ); - /* Query flattening in sqlite3Select() might refill p->pOrderBy. - ** Be sure to delete p->pOrderBy, therefore, to avoid a memory leak. */ - sqlite3ExprListDelete(db, p->pOrderBy); + assert( p->pOrderBy==0 ); pDelete = p->pPrior; p->pPrior = pPrior; p->pOrderBy = 0; @@ -132628,6 +132745,7 @@ static int flattenSubquery( Expr *pWhere; /* The WHERE clause */ struct SrcList_item *pSubitem; /* The subquery */ sqlite3 *db = pParse->db; + Walker w; /* Walker to persist agginfo data */ /* Check to see if flattening is permitted. Return 0 if not. */ @@ -132941,7 +133059,7 @@ static int flattenSubquery( ** We look at every expression in the outer query and every place we see ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10". */ - if( pSub->pOrderBy ){ + if( pSub->pOrderBy && (pParent->selFlags & SF_NoopOrderBy)==0 ){ /* At this point, any non-zero iOrderByCol values indicate that the ** ORDER BY column expression is identical to the iOrderByCol'th ** expression returned by SELECT statement pSub. Since these values @@ -132965,7 +133083,13 @@ static int flattenSubquery( if( isLeftJoin>0 ){ sqlite3SetJoinExpr(pWhere, iNewParent); } - pParent->pWhere = sqlite3ExprAnd(pParse, pWhere, pParent->pWhere); + if( pWhere ){ + if( pParent->pWhere ){ + pParent->pWhere = sqlite3PExpr(pParse, TK_AND, pWhere, pParent->pWhere); + }else{ + pParent->pWhere = pWhere; + } + } if( db->mallocFailed==0 ){ SubstContext x; x.pParse = pParse; @@ -133002,6 +133126,8 @@ static int flattenSubquery( /* Finially, delete what is left of the subquery and return ** success. */ + sqlite3AggInfoPersistWalkerInit(&w, pParse); + sqlite3WalkSelect(&w,pSub1); sqlite3SelectDelete(db, pSub1); #if SELECTTRACE_ENABLED @@ -133262,11 +133388,14 @@ static int pushDownWhereTerms( ){ Expr *pNew; int nChng = 0; + Select *pSel; if( pWhere==0 ) return 0; if( pSubq->selFlags & SF_Recursive ) return 0; /* restriction (2) */ #ifndef SQLITE_OMIT_WINDOWFUNC - if( pSubq->pWin ) return 0; /* restriction (6) */ + for(pSel=pSubq; pSel; pSel=pSel->pPrior){ + if( pSel->pWin ) return 0; /* restriction (6) */ + } #endif #ifdef SQLITE_DEBUG @@ -133466,6 +133595,14 @@ static int convertCompoundSelectToSubquery(Walker *pWa for(pX=p; pX && (pX->op==TK_ALL || pX->op==TK_SELECT); pX=pX->pPrior){} if( pX==0 ) return WRC_Continue; a = p->pOrderBy->a; +#ifndef SQLITE_OMIT_WINDOWFUNC + /* If iOrderByCol is already non-zero, then it has already been matched + ** to a result column of the SELECT statement. This occurs when the + ** SELECT is rewritten for window-functions processing and then passed + ** to sqlite3SelectPrep() and similar a second time. The rewriting done + ** by this function is not required in this case. */ + if( a[0].u.x.iOrderByCol ) return WRC_Continue; +#endif for(i=p->pOrderBy->nExpr-1; i>=0; i--){ if( a[i].pExpr->flags & EP_Collate ) break; } @@ -134586,10 +134723,10 @@ SQLITE_PRIVATE int sqlite3Select( Expr *pWhere; /* The WHERE clause. May be NULL */ ExprList *pGroupBy; /* The GROUP BY clause. May be NULL */ Expr *pHaving; /* The HAVING clause. May be NULL */ + AggInfo *pAggInfo = 0; /* Aggregate information */ int rc = 1; /* Value to return from this function */ DistinctCtx sDistinct; /* Info on how to code the DISTINCT keyword */ SortCtx sSort; /* Info on how to code the ORDER BY clause */ - AggInfo sAggInfo; /* Information used by aggregate queries */ int iEnd; /* Address of the end of the query */ sqlite3 *db; /* The database connection */ ExprList *pMinMaxOrderBy = 0; /* Added ORDER BY for min/max queries */ @@ -134601,7 +134738,6 @@ SQLITE_PRIVATE int sqlite3Select( return 1; } if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1; - memset(&sAggInfo, 0, sizeof(sAggInfo)); #if SELECTTRACE_ENABLED SELECTTRACE(1,pParse,p, ("begin processing:\n", pParse->addrExplain)); if( sqlite3SelectTrace & 0x100 ){ @@ -134623,6 +134759,7 @@ SQLITE_PRIVATE int sqlite3Select( sqlite3ExprListDelete(db, p->pOrderBy); p->pOrderBy = 0; p->selFlags &= ~SF_Distinct; + p->selFlags |= SF_NoopOrderBy; } sqlite3SelectPrep(pParse, p, 0); if( pParse->nErr || db->mallocFailed ){ @@ -135191,14 +135328,20 @@ SQLITE_PRIVATE int sqlite3Select( ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the ** SELECT statement. */ + pAggInfo = sqlite3DbMallocZero(db, sizeof(*pAggInfo) ); + if( pAggInfo==0 ){ + goto select_end; + } + pAggInfo->pNext = pParse->pAggList; + pParse->pAggList = pAggInfo; memset(&sNC, 0, sizeof(sNC)); sNC.pParse = pParse; sNC.pSrcList = pTabList; - sNC.uNC.pAggInfo = &sAggInfo; + sNC.uNC.pAggInfo = pAggInfo; VVA_ONLY( sNC.ncFlags = NC_UAggInfo; ) - sAggInfo.mnReg = pParse->nMem+1; - sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr : 0; - sAggInfo.pGroupBy = pGroupBy; + pAggInfo->mnReg = pParse->nMem+1; + pAggInfo->nSortingColumn = pGroupBy ? pGroupBy->nExpr : 0; + pAggInfo->pGroupBy = pGroupBy; sqlite3ExprAnalyzeAggList(&sNC, pEList); sqlite3ExprAnalyzeAggList(&sNC, sSort.pOrderBy); if( pHaving ){ @@ -135211,14 +135354,14 @@ SQLITE_PRIVATE int sqlite3Select( } sqlite3ExprAnalyzeAggregates(&sNC, pHaving); } - sAggInfo.nAccumulator = sAggInfo.nColumn; - if( p->pGroupBy==0 && p->pHaving==0 && sAggInfo.nFunc==1 ){ - minMaxFlag = minMaxQuery(db, sAggInfo.aFunc[0].pExpr, &pMinMaxOrderBy); + pAggInfo->nAccumulator = pAggInfo->nColumn; + if( p->pGroupBy==0 && p->pHaving==0 && pAggInfo->nFunc==1 ){ + minMaxFlag = minMaxQuery(db, pAggInfo->aFunc[0].pExpr, &pMinMaxOrderBy); }else{ minMaxFlag = WHERE_ORDERBY_NORMAL; } - for(i=0; inFunc; i++){ + Expr *pExpr = pAggInfo->aFunc[i].pExpr; assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); sNC.ncFlags |= NC_InAggFunc; sqlite3ExprAnalyzeAggList(&sNC, pExpr->x.pList); @@ -135230,22 +135373,22 @@ SQLITE_PRIVATE int sqlite3Select( #endif sNC.ncFlags &= ~NC_InAggFunc; } - sAggInfo.mxReg = pParse->nMem; + pAggInfo->mxReg = pParse->nMem; if( db->mallocFailed ) goto select_end; #if SELECTTRACE_ENABLED if( sqlite3SelectTrace & 0x400 ){ int ii; - SELECTTRACE(0x400,pParse,p,("After aggregate analysis %p:\n", &sAggInfo)); + SELECTTRACE(0x400,pParse,p,("After aggregate analysis %p:\n", pAggInfo)); sqlite3TreeViewSelect(0, p, 0); - for(ii=0; iinColumn; ii++){ sqlite3DebugPrintf("agg-column[%d] iMem=%d\n", - ii, sAggInfo.aCol[ii].iMem); - sqlite3TreeViewExpr(0, sAggInfo.aCol[ii].pExpr, 0); + ii, pAggInfo->aCol[ii].iMem); + sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pExpr, 0); } - for(ii=0; iinFunc; ii++){ sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n", - ii, sAggInfo.aFunc[ii].iMem); - sqlite3TreeViewExpr(0, sAggInfo.aFunc[ii].pExpr, 0); + ii, pAggInfo->aFunc[ii].iMem); + sqlite3TreeViewExpr(0, pAggInfo->aFunc[ii].pExpr, 0); } } #endif @@ -135270,10 +135413,11 @@ SQLITE_PRIVATE int sqlite3Select( ** that we do not need it after all, the OP_SorterOpen instruction ** will be converted into a Noop. */ - sAggInfo.sortingIdx = pParse->nTab++; - pKeyInfo = sqlite3KeyInfoFromExprList(pParse,pGroupBy,0,sAggInfo.nColumn); + pAggInfo->sortingIdx = pParse->nTab++; + pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pGroupBy, + 0, pAggInfo->nColumn); addrSortingIdx = sqlite3VdbeAddOp4(v, OP_SorterOpen, - sAggInfo.sortingIdx, sAggInfo.nSortingColumn, + pAggInfo->sortingIdx, pAggInfo->nSortingColumn, 0, (char*)pKeyInfo, P4_KEYINFO); /* Initialize memory locations used by GROUP BY aggregate processing @@ -135328,8 +135472,8 @@ SQLITE_PRIVATE int sqlite3Select( nGroupBy = pGroupBy->nExpr; nCol = nGroupBy; j = nGroupBy; - for(i=0; i=j ){ + for(i=0; inColumn; i++){ + if( pAggInfo->aCol[i].iSorterColumn>=j ){ nCol++; j++; } @@ -135337,8 +135481,8 @@ SQLITE_PRIVATE int sqlite3Select( regBase = sqlite3GetTempRange(pParse, nCol); sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0, 0); j = nGroupBy; - for(i=0; inColumn; i++){ + struct AggInfo_col *pCol = &pAggInfo->aCol[i]; if( pCol->iSorterColumn>=j ){ int r1 = j + regBase; sqlite3ExprCodeGetColumnOfTable(v, @@ -135348,16 +135492,16 @@ SQLITE_PRIVATE int sqlite3Select( } regRecord = sqlite3GetTempReg(pParse); sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord); - sqlite3VdbeAddOp2(v, OP_SorterInsert, sAggInfo.sortingIdx, regRecord); + sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord); sqlite3ReleaseTempReg(pParse, regRecord); sqlite3ReleaseTempRange(pParse, regBase, nCol); sqlite3WhereEnd(pWInfo); - sAggInfo.sortingIdxPTab = sortPTab = pParse->nTab++; + pAggInfo->sortingIdxPTab = sortPTab = pParse->nTab++; sortOut = sqlite3GetTempReg(pParse); sqlite3VdbeAddOp3(v, OP_OpenPseudo, sortPTab, sortOut, nCol); - sqlite3VdbeAddOp2(v, OP_SorterSort, sAggInfo.sortingIdx, addrEnd); + sqlite3VdbeAddOp2(v, OP_SorterSort, pAggInfo->sortingIdx, addrEnd); VdbeComment((v, "GROUP BY sort")); VdbeCoverage(v); - sAggInfo.useSortingIdx = 1; + pAggInfo->useSortingIdx = 1; } /* If the index or temporary table used by the GROUP BY sort @@ -135381,14 +135525,14 @@ SQLITE_PRIVATE int sqlite3Select( */ addrTopOfLoop = sqlite3VdbeCurrentAddr(v); if( groupBySort ){ - sqlite3VdbeAddOp3(v, OP_SorterData, sAggInfo.sortingIdx, + sqlite3VdbeAddOp3(v, OP_SorterData, pAggInfo->sortingIdx, sortOut, sortPTab); } for(j=0; jnExpr; j++){ if( groupBySort ){ sqlite3VdbeAddOp3(v, OP_Column, sortPTab, j, iBMem+j); }else{ - sAggInfo.directMode = 1; + pAggInfo->directMode = 1; sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j); } } @@ -135418,14 +135562,14 @@ SQLITE_PRIVATE int sqlite3Select( ** the current row */ sqlite3VdbeJumpHere(v, addr1); - updateAccumulator(pParse, iUseFlag, &sAggInfo); + updateAccumulator(pParse, iUseFlag, pAggInfo); sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag); VdbeComment((v, "indicate data in accumulator")); /* End of the loop */ if( groupBySort ){ - sqlite3VdbeAddOp2(v, OP_SorterNext, sAggInfo.sortingIdx, addrTopOfLoop); + sqlite3VdbeAddOp2(v, OP_SorterNext, pAggInfo->sortingIdx, addrTopOfLoop); VdbeCoverage(v); }else{ sqlite3WhereEnd(pWInfo); @@ -135458,7 +135602,7 @@ SQLITE_PRIVATE int sqlite3Select( VdbeCoverage(v); VdbeComment((v, "Groupby result generator entry point")); sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); - finalizeAggFunctions(pParse, &sAggInfo); + finalizeAggFunctions(pParse, pAggInfo); sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL); selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest, @@ -135469,7 +135613,7 @@ SQLITE_PRIVATE int sqlite3Select( /* Generate a subroutine that will reset the group-by accumulator */ sqlite3VdbeResolveLabel(v, addrReset); - resetAccumulator(pParse, &sAggInfo); + resetAccumulator(pParse, pAggInfo); sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag); VdbeComment((v, "indicate accumulator empty")); sqlite3VdbeAddOp1(v, OP_Return, regReset); @@ -135477,7 +135621,7 @@ SQLITE_PRIVATE int sqlite3Select( } /* endif pGroupBy. Begin aggregate queries without GROUP BY: */ else { Table *pTab; - if( (pTab = isSimpleCount(p, &sAggInfo))!=0 ){ + if( (pTab = isSimpleCount(p, pAggInfo))!=0 ){ /* If isSimpleCount() returns a pointer to a Table structure, then ** the SQL statement is of the form: ** @@ -135532,7 +135676,7 @@ SQLITE_PRIVATE int sqlite3Select( if( pKeyInfo ){ sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO); } - sqlite3VdbeAddOp2(v, OP_Count, iCsr, sAggInfo.aFunc[0].iMem); + sqlite3VdbeAddOp2(v, OP_Count, iCsr, pAggInfo->aFunc[0].iMem); sqlite3VdbeAddOp1(v, OP_Close, iCsr); explainSimpleCount(pParse, pTab, pBest); }else{ @@ -135547,12 +135691,16 @@ SQLITE_PRIVATE int sqlite3Select( ** first row visited by the aggregate, so that they are updated at ** least once even if the FILTER clause means the min() or max() ** function visits zero rows. */ - if( sAggInfo.nAccumulator ){ - for(i=0; ifuncFlags&SQLITE_FUNC_NEEDCOLL ) break; + if( pAggInfo->nAccumulator ){ + for(i=0; inFunc; i++){ + if( ExprHasProperty(pAggInfo->aFunc[i].pExpr, EP_WinFunc) ){ + continue; + } + if( pAggInfo->aFunc[i].pFunc->funcFlags&SQLITE_FUNC_NEEDCOLL ){ + break; + } } - if( i==sAggInfo.nFunc ){ + if( i==pAggInfo->nFunc ){ regAcc = ++pParse->nMem; sqlite3VdbeAddOp2(v, OP_Integer, 0, regAcc); } @@ -135563,7 +135711,7 @@ SQLITE_PRIVATE int sqlite3Select( ** of output. */ assert( p->pGroupBy==0 ); - resetAccumulator(pParse, &sAggInfo); + resetAccumulator(pParse, pAggInfo); /* If this query is a candidate for the min/max optimization, then ** minMaxFlag will have been previously set to either @@ -135579,7 +135727,7 @@ SQLITE_PRIVATE int sqlite3Select( if( pWInfo==0 ){ goto select_end; } - updateAccumulator(pParse, regAcc, &sAggInfo); + updateAccumulator(pParse, regAcc, pAggInfo); if( regAcc ) sqlite3VdbeAddOp2(v, OP_Integer, 1, regAcc); if( sqlite3WhereIsOrdered(pWInfo)>0 ){ sqlite3VdbeGoto(v, sqlite3WhereBreakLabel(pWInfo)); @@ -135587,7 +135735,7 @@ SQLITE_PRIVATE int sqlite3Select( (minMaxFlag==WHERE_ORDERBY_MIN?"min":"max"))); } sqlite3WhereEnd(pWInfo); - finalizeAggFunctions(pParse, &sAggInfo); + finalizeAggFunctions(pParse, pAggInfo); } sSort.pOrderBy = 0; @@ -135626,8 +135774,25 @@ SQLITE_PRIVATE int sqlite3Select( */ select_end: sqlite3ExprListDelete(db, pMinMaxOrderBy); - sqlite3DbFree(db, sAggInfo.aCol); - sqlite3DbFree(db, sAggInfo.aFunc); +#ifdef SQLITE_DEBUG + if( pAggInfo && !db->mallocFailed ){ + for(i=0; inColumn; i++){ + Expr *pExpr = pAggInfo->aCol[i].pExpr; + assert( pExpr!=0 || db->mallocFailed ); + if( pExpr==0 ) continue; + assert( pExpr->pAggInfo==pAggInfo ); + assert( pExpr->iAgg==i ); + } + for(i=0; inFunc; i++){ + Expr *pExpr = pAggInfo->aFunc[i].pExpr; + assert( pExpr!=0 || db->mallocFailed ); + if( pExpr==0 ) continue; + assert( pExpr->pAggInfo==pAggInfo ); + assert( pExpr->iAgg==i ); + } + } +#endif + #if SELECTTRACE_ENABLED SELECTTRACE(0x1,pParse,p,("end processing\n")); if( (sqlite3SelectTrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){ @@ -151319,12 +151484,16 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Window *pMWin = p->pWin; /* Master window object */ Window *pWin; /* Window object iterator */ Table *pTab; + Walker w; + u32 selFlags = p->selFlags; pTab = sqlite3DbMallocZero(db, sizeof(Table)); if( pTab==0 ){ return sqlite3ErrorToParser(db, SQLITE_NOMEM); } + sqlite3AggInfoPersistWalkerInit(&w, pParse); + sqlite3WalkSelect(&w, p); p->pSrc = 0; p->pWhere = 0; @@ -151405,7 +151574,6 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, p->pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0); if( p->pSrc ){ Table *pTab2; - Walker w; p->pSrc->a[0].pSelect = pSub; sqlite3SrcListAssignCursors(pParse, p->pSrc); pSub->selFlags |= SF_Expanded; @@ -168302,6 +168470,9 @@ static int fts3PoslistMerge( */ fts3GetDeltaVarint(&p1, &i1); fts3GetDeltaVarint(&p2, &i2); + if( i1<2 || i2<2 ){ + break; + } do { fts3PutDeltaVarint(&p, &iPrev, (i10 ); assert( *pbEof==0 ); - assert( p || *piDocid==0 ); + assert_fts3_nc( p || *piDocid==0 ); assert( !p || (p>=aDoclist && p<=&aDoclist[nDoclist]) ); if( p==0 ){ @@ -171205,7 +171376,7 @@ static void fts3EvalInvalidatePoslist(Fts3Phrase *pPhr ** ** Parameter nNear is passed the NEAR distance of the expression (5 in ** the example above). When this function is called, *paPoslist points to -** the position list, and *pnToken is the number of phrase tokens in, the +** the position list, and *pnToken is the number of phrase tokens in the ** phrase on the other side of the NEAR operator to pPhrase. For example, ** if pPhrase refers to the "def ghi" phrase, then *paPoslist points to ** the position list associated with phrase "abc". @@ -224824,7 +224995,7 @@ static void fts5SourceIdFunc( ){ assert( nArg==0 ); UNUSED_PARAM2(nArg, apUnused); - sqlite3_result_text(pCtx, "fts5: 2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c", -1, SQLITE_TRANSIENT); + sqlite3_result_text(pCtx, "fts5: 2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933cc8fd", -1, SQLITE_TRANSIENT); } /* @@ -229607,9 +229778,9 @@ SQLITE_API int sqlite3_stmt_init( #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ /************** End of stmt.c ************************************************/ -#if __LINE__!=229610 +#if __LINE__!=229781 #undef SQLITE_SOURCE_ID -#define SQLITE_SOURCE_ID "2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e8686alt2" +#define SQLITE_SOURCE_ID "2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933calt2" #endif /* Return the source-id for this library */ SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } Modified: head/contrib/sqlite3/sqlite3.h ============================================================================== --- head/contrib/sqlite3/sqlite3.h Tue Jul 7 18:37:06 2020 (r362996) +++ head/contrib/sqlite3/sqlite3.h Tue Jul 7 19:09:38 2020 (r362997) @@ -123,9 +123,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.32.2" -#define SQLITE_VERSION_NUMBER 3032002 -#define SQLITE_SOURCE_ID "2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c" +#define SQLITE_VERSION "3.32.3" +#define SQLITE_VERSION_NUMBER 3032003 +#define SQLITE_SOURCE_ID "2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933cc8fd" /* ** CAPI3REF: Run-Time Library Version Numbers Modified: head/contrib/sqlite3/tea/configure ============================================================================== --- head/contrib/sqlite3/tea/configure Tue Jul 7 18:37:06 2020 (r362996) +++ head/contrib/sqlite3/tea/configure Tue Jul 7 19:09:38 2020 (r362997) @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for sqlite 3.32.2. +# Generated by GNU Autoconf 2.69 for sqlite 3.32.3. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -577,8 +577,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sqlite' PACKAGE_TARNAME='sqlite' -PACKAGE_VERSION='3.32.2' -PACKAGE_STRING='sqlite 3.32.2' +PACKAGE_VERSION='3.32.3' +PACKAGE_STRING='sqlite 3.32.3' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1303,7 +1303,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sqlite 3.32.2 to adapt to many kinds of systems. +\`configure' configures sqlite 3.32.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1365,7 +1365,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sqlite 3.32.2:";; + short | recursive ) echo "Configuration of sqlite 3.32.3:";; esac cat <<\_ACEOF @@ -1467,7 +1467,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sqlite configure 3.32.2 +sqlite configure 3.32.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1878,7 +1878,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sqlite $as_me 3.32.2, which was +It was created by sqlite $as_me 3.32.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -9373,7 +9373,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sqlite $as_me 3.32.2, which was +This file was extended by sqlite $as_me 3.32.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -9426,7 +9426,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -sqlite config.status 3.32.2 +sqlite config.status 3.32.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Modified: head/contrib/sqlite3/tea/configure.ac ============================================================================== --- head/contrib/sqlite3/tea/configure.ac Tue Jul 7 18:37:06 2020 (r362996) +++ head/contrib/sqlite3/tea/configure.ac Tue Jul 7 19:09:38 2020 (r362997) @@ -19,7 +19,7 @@ dnl to configure the system for the local environment. # so you can encode the package version directly into the source files. #----------------------------------------------------------------------- -AC_INIT([sqlite], [3.32.2]) +AC_INIT([sqlite], [3.32.3]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. From owner-svn-src-all@freebsd.org Tue Jul 7 20:33:13 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 59DB134C58C; Tue, 7 Jul 2020 20:33:13 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1YzY1jvfz45QW; Tue, 7 Jul 2020 20:33:13 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1EDE615062; Tue, 7 Jul 2020 20:33:13 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 067KXD0l029719; Tue, 7 Jul 2020 20:33:13 GMT (envelope-from scottl@FreeBSD.org) Received: (from scottl@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 067KXC9V029714; Tue, 7 Jul 2020 20:33:12 GMT (envelope-from scottl@FreeBSD.org) Message-Id: <202007072033.067KXC9V029714@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: scottl set sender to scottl@FreeBSD.org using -f From: Scott Long Date: Tue, 7 Jul 2020 20:33:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362998 - in head: stand/defaults sys/amd64/amd64 sys/powerpc/aim sys/vm X-SVN-Group: head X-SVN-Commit-Author: scottl X-SVN-Commit-Paths: in head: stand/defaults sys/amd64/amd64 sys/powerpc/aim sys/vm X-SVN-Commit-Revision: 362998 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 20:33:13 -0000 Author: scottl Date: Tue Jul 7 20:33:11 2020 New Revision: 362998 URL: https://svnweb.freebsd.org/changeset/base/362998 Log: Migrate the feature of excluding RAM pages to use "excludelist" as its nomenclature. MFC after: 1 week Modified: head/stand/defaults/loader.conf head/sys/amd64/amd64/pmap.c head/sys/powerpc/aim/mmu_radix.c head/sys/vm/vm_page.c head/sys/vm/vm_page.h Modified: head/stand/defaults/loader.conf ============================================================================== --- head/stand/defaults/loader.conf Tue Jul 7 19:09:38 2020 (r362997) +++ head/stand/defaults/loader.conf Tue Jul 7 20:33:11 2020 (r362998) @@ -49,12 +49,12 @@ entropy_cache_type="boot_entropy_cache" # Required for # must not change value even if the # _name above does change! -### RAM Blacklist configuration ############################ -ram_blacklist_load="NO" # Set this to YES to load a file +### RAM Excludelist configuration ############################ +ram_excludelist_load="NO" # Set this to YES to load a file # containing a list of addresses to # exclude from the running system. -ram_blacklist_name="/boot/blacklist.txt" # Set this to the name of the file -ram_blacklist_type="ram_blacklist" # Required for the kernel to find +ram_excludeist_name="/boot/excludelist.txt" # Set this to the name of the file +ram_excludelist_type="ram_excludelist" # Required for the kernel to find # the blacklist module ### Microcode loading configuration ######################## Modified: head/sys/amd64/amd64/pmap.c ============================================================================== --- head/sys/amd64/amd64/pmap.c Tue Jul 7 19:09:38 2020 (r362997) +++ head/sys/amd64/amd64/pmap.c Tue Jul 7 20:33:11 2020 (r362998) @@ -2060,7 +2060,7 @@ pmap_init(void) int error, i, ret, skz63; /* L1TF, reserve page @0 unconditionally */ - vm_page_blacklist_add(0, bootverbose); + vm_page_excludelist_add(0, bootverbose); /* Detect bare-metal Skylake Server and Skylake-X. */ if (vm_guest == VM_GUEST_NO && cpu_vendor_id == CPU_VENDOR_INTEL && @@ -2081,7 +2081,7 @@ pmap_init(void) printf("SKZ63: skipping 4M RAM starting " "at physical 1G\n"); for (i = 0; i < atop(0x400000); i++) { - ret = vm_page_blacklist_add(0x40000000 + + ret = vm_page_excludelist_add(0x40000000 + ptoa(i), FALSE); if (!ret && bootverbose) printf("page at %#lx already used\n", Modified: head/sys/powerpc/aim/mmu_radix.c ============================================================================== --- head/sys/powerpc/aim/mmu_radix.c Tue Jul 7 19:09:38 2020 (r362997) +++ head/sys/powerpc/aim/mmu_radix.c Tue Jul 7 20:33:11 2020 (r362998) @@ -3557,7 +3557,7 @@ mmu_radix_init() int error, i, pv_npg; /* L1TF, reserve page @0 unconditionally */ - vm_page_blacklist_add(0, bootverbose); + vm_page_excludelist_add(0, bootverbose); zone_radix_pgd = uma_zcache_create("radix_pgd_cache", RADIX_PGD_SIZE, NULL, NULL, Modified: head/sys/vm/vm_page.c ============================================================================== --- head/sys/vm/vm_page.c Tue Jul 7 19:09:38 2020 (r362997) +++ head/sys/vm/vm_page.c Tue Jul 7 20:33:11 2020 (r362998) @@ -155,10 +155,11 @@ vm_page_t vm_page_array; long vm_page_array_size; long first_page; -static TAILQ_HEAD(, vm_page) blacklist_head; -static int sysctl_vm_page_blacklist(SYSCTL_HANDLER_ARGS); -SYSCTL_PROC(_vm, OID_AUTO, page_blacklist, CTLTYPE_STRING | CTLFLAG_RD | - CTLFLAG_MPSAFE, NULL, 0, sysctl_vm_page_blacklist, "A", "Blacklist pages"); +static TAILQ_HEAD(, vm_page) excludelist_head; +static int sysctl_vm_page_excludelist(SYSCTL_HANDLER_ARGS); +SYSCTL_PROC(_vm, OID_AUTO, page_excludelist, CTLTYPE_STRING | CTLFLAG_RD | + CTLFLAG_MPSAFE, NULL, 0, sysctl_vm_page_excludelist, "A", + "Blacklist pages"); static uma_zone_t fakepg_zone; @@ -258,16 +259,16 @@ vm_set_page_size(void) } /* - * vm_page_blacklist_next: + * vm_page_excludelist_next: * - * Find the next entry in the provided string of blacklist + * Find the next entry in the provided string of excludelist * addresses. Entries are separated by space, comma, or newline. * If an invalid integer is encountered then the rest of the * string is skipped. Updates the list pointer to the next * character, or NULL if the string is exhausted or invalid. */ static vm_paddr_t -vm_page_blacklist_next(char **list, char *end) +vm_page_excludelist_next(char **list, char *end) { vm_paddr_t bad; char *cp, *pos; @@ -314,13 +315,13 @@ vm_page_blacklist_next(char **list, char *end) *list = cp; return (trunc_page(bad)); } - printf("Garbage in RAM blacklist, skipping\n"); + printf("Garbage in RAM excludelist, skipping\n"); *list = NULL; return (0); } bool -vm_page_blacklist_add(vm_paddr_t pa, bool verbose) +vm_page_excludelist_add(vm_paddr_t pa, bool verbose) { struct vm_domain *vmd; vm_page_t m; @@ -336,7 +337,7 @@ vm_page_blacklist_add(vm_paddr_t pa, bool verbose) vm_domain_free_unlock(vmd); if (ret != 0) { vm_domain_freecnt_inc(vmd, -1); - TAILQ_INSERT_TAIL(&blacklist_head, m, listq); + TAILQ_INSERT_TAIL(&excludelist_head, m, listq); if (verbose) printf("Skipping page with pa 0x%jx\n", (uintmax_t)pa); } @@ -344,35 +345,35 @@ vm_page_blacklist_add(vm_paddr_t pa, bool verbose) } /* - * vm_page_blacklist_check: + * vm_page_excludelist_check: * - * Iterate through the provided string of blacklist addresses, pulling + * Iterate through the provided string of excludelist addresses, pulling * each entry out of the physical allocator free list and putting it - * onto a list for reporting via the vm.page_blacklist sysctl. + * onto a list for reporting via the vm.page_excludelist sysctl. */ static void -vm_page_blacklist_check(char *list, char *end) +vm_page_excludelist_check(char *list, char *end) { vm_paddr_t pa; char *next; next = list; while (next != NULL) { - if ((pa = vm_page_blacklist_next(&next, end)) == 0) + if ((pa = vm_page_excludelist_next(&next, end)) == 0) continue; - vm_page_blacklist_add(pa, bootverbose); + vm_page_excludelist_add(pa, bootverbose); } } /* - * vm_page_blacklist_load: + * vm_page_excludelist_load: * - * Search for a special module named "ram_blacklist". It'll be a + * Search for a special module named "ram_excludelist". It'll be a * plain text file provided by the user via the loader directive * of the same name. */ static void -vm_page_blacklist_load(char **list, char **end) +vm_page_excludelist_load(char **list, char **end) { void *mod; u_char *ptr; @@ -381,7 +382,7 @@ vm_page_blacklist_load(char **list, char **end) mod = NULL; ptr = NULL; - mod = preload_search_by_type("ram_blacklist"); + mod = preload_search_by_type("ram_excludelist"); if (mod != NULL) { ptr = preload_fetch_addr(mod); len = preload_fetch_size(mod); @@ -395,7 +396,7 @@ vm_page_blacklist_load(char **list, char **end) } static int -sysctl_vm_page_blacklist(SYSCTL_HANDLER_ARGS) +sysctl_vm_page_excludelist(SYSCTL_HANDLER_ARGS) { vm_page_t m; struct sbuf sbuf; @@ -406,7 +407,7 @@ sysctl_vm_page_blacklist(SYSCTL_HANDLER_ARGS) if (error != 0) return (error); sbuf_new_for_sysctl(&sbuf, NULL, 128, req); - TAILQ_FOREACH(m, &blacklist_head, listq) { + TAILQ_FOREACH(m, &excludelist_head, listq) { sbuf_printf(&sbuf, "%s%#jx", first ? "" : ",", (uintmax_t)m->phys_addr); first = 0; @@ -793,14 +794,14 @@ vm_page_startup(vm_offset_t vaddr) } /* - * Remove blacklisted pages from the physical memory allocator. + * Remove excludelisted pages from the physical memory allocator. */ - TAILQ_INIT(&blacklist_head); - vm_page_blacklist_load(&list, &listend); - vm_page_blacklist_check(list, listend); + TAILQ_INIT(&excludelist_head); + vm_page_excludelist_load(&list, &listend); + vm_page_excludelist_check(list, listend); - list = kern_getenv("vm.blacklist"); - vm_page_blacklist_check(list, NULL); + list = kern_getenv("vm.excludelist"); + vm_page_excludelist_check(list, NULL); freeenv(list); #if VM_NRESERVLEVEL > 0 Modified: head/sys/vm/vm_page.h ============================================================================== --- head/sys/vm/vm_page.h Tue Jul 7 19:09:38 2020 (r362997) +++ head/sys/vm/vm_page.h Tue Jul 7 20:33:11 2020 (r362998) @@ -613,7 +613,7 @@ vm_page_t vm_page_alloc_contig_domain(vm_object_t obje vm_page_t vm_page_alloc_freelist(int, int); vm_page_t vm_page_alloc_freelist_domain(int, int, int); void vm_page_bits_set(vm_page_t m, vm_page_bits_t *bits, vm_page_bits_t set); -bool vm_page_blacklist_add(vm_paddr_t pa, bool verbose); +bool vm_page_excludelist_add(vm_paddr_t pa, bool verbose); vm_page_t vm_page_grab(vm_object_t, vm_pindex_t, int); vm_page_t vm_page_grab_unlocked(vm_object_t, vm_pindex_t, int); int vm_page_grab_pages(vm_object_t object, vm_pindex_t pindex, int allocflags, From owner-svn-src-all@freebsd.org Tue Jul 7 20:42:35 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C00E834C3F2; Tue, 7 Jul 2020 20:42:35 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1ZBM4jT6z463t; Tue, 7 Jul 2020 20:42:35 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8558615683; Tue, 7 Jul 2020 20:42:35 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 067KgZb6035654; Tue, 7 Jul 2020 20:42:35 GMT (envelope-from scottl@FreeBSD.org) Received: (from scottl@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 067KgZqd035653; Tue, 7 Jul 2020 20:42:35 GMT (envelope-from scottl@FreeBSD.org) Message-Id: <202007072042.067KgZqd035653@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: scottl set sender to scottl@FreeBSD.org using -f From: Scott Long Date: Tue, 7 Jul 2020 20:42:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r362999 - head/stand/defaults X-SVN-Group: head X-SVN-Commit-Author: scottl X-SVN-Commit-Paths: head/stand/defaults X-SVN-Commit-Revision: 362999 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 20:42:35 -0000 Author: scottl Date: Tue Jul 7 20:42:35 2020 New Revision: 362999 URL: https://svnweb.freebsd.org/changeset/base/362999 Log: Fix a example/docs typo from r362998, no functional change. Modified: head/stand/defaults/loader.conf Modified: head/stand/defaults/loader.conf ============================================================================== --- head/stand/defaults/loader.conf Tue Jul 7 20:33:11 2020 (r362998) +++ head/stand/defaults/loader.conf Tue Jul 7 20:42:35 2020 (r362999) @@ -53,7 +53,7 @@ entropy_cache_type="boot_entropy_cache" # Required for ram_excludelist_load="NO" # Set this to YES to load a file # containing a list of addresses to # exclude from the running system. -ram_excludeist_name="/boot/excludelist.txt" # Set this to the name of the file +ram_excludelist_name="/boot/excludelist.txt" # Set this to the name of the file ram_excludelist_type="ram_excludelist" # Required for the kernel to find # the blacklist module From owner-svn-src-all@freebsd.org Tue Jul 7 21:52:41 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 972DB34E0DB; Tue, 7 Jul 2020 21:52:41 +0000 (UTC) (envelope-from oliver.pntr@gmail.com) Received: from mail-yb1-xb2f.google.com (mail-yb1-xb2f.google.com [IPv6:2607:f8b0:4864:20::b2f]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1blF25tcz49pG; Tue, 7 Jul 2020 21:52:41 +0000 (UTC) (envelope-from oliver.pntr@gmail.com) Received: by mail-yb1-xb2f.google.com with SMTP id h39so21298499ybj.3; Tue, 07 Jul 2020 14:52:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=Yl1kIEgiwM+5Iaw/qF4C/2h1C9xeNhgX9Kf7knpsM8Q=; b=I82/y0FhtHrPl17iqzYocu1m5nuTuw3cpIl+FfFsVMwLDFYdJhr9fvIcccZpat10EB 0rDTgFJfd76jSiiJtWHnFb+qSbAqJefSS0lk3yyL59QRqDuIhdplRjTAwya2d+mGUVl2 9EAXSQFOOeDOISdwsATKpxdvmVVGPxjGnyF6R9gi/k7g8ThVfFPtYwciB35xtv/tVC95 D7WF775y+DPvQZPVSgkILtN3U2tgWJll4CrzrppaqaJ6gOj85TDgiEjDhyRHwjFyvT0v SFogbR2SzBkwfTvTv+I97KJ7iLqF3G+YyBiXsz1umBu1NMq2sLqCXpVE4rhixLD7EfpU Yr9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Yl1kIEgiwM+5Iaw/qF4C/2h1C9xeNhgX9Kf7knpsM8Q=; b=e+hjcazC1O2shfHLIZyhjDLuTf8YtjiCyYwEDxCrX4L2bPD/u7SCY6LwOv2yNNntWC R4oag2Qko6Fjp6aW3ARX2WHpulsbels4fNIqPjnzXmMEji9QB5qY7MR7HT3CsjrNaSAJ mDs1oETP1RPIRceQe7Nl64YeCmXtZIBPazdVSs+VHwJcHaYWXF50O+8oF8wTnvXQ4h8Y RP0dmltHSSGXWUgyD7vZXBlJ8xvxkBkHFF41th/x/34iQqEREKhuNwslTO4xv4L8U/dM isUE/ObrcUQaqNBl7zp9sTogvS5gcJVgC/kp5OiA1CQcwKw+wyh7dhkpdji5yA1byMsq nuRg== X-Gm-Message-State: AOAM530ngbClJBbBZvyey4YD+qfEtfnHLhUJrQZy2JqAsv0pPvsyLdkp Jx+U+tl5VuEbp+QcB1Ye9n/piqd2tEwD0LyjTkZZOg== X-Google-Smtp-Source: ABdhPJyFTfiAiE3nB0B+aq+qbRGIfeKMJAec0Zbgjptpzeja+Efwmx3phgxVGSwqdjsFEbJ4DdPfAwH6BK5d+1JB+7Y= X-Received: by 2002:a25:c045:: with SMTP id c66mr33762487ybf.314.1594158759947; Tue, 07 Jul 2020 14:52:39 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a25:ad26:0:0:0:0:0 with HTTP; Tue, 7 Jul 2020 14:52:39 -0700 (PDT) In-Reply-To: <202007072033.067KXC9V029714@repo.freebsd.org> References: <202007072033.067KXC9V029714@repo.freebsd.org> From: Oliver Pinter Date: Tue, 7 Jul 2020 23:52:39 +0200 Message-ID: Subject: Re: svn commit: r362998 - in head: stand/defaults sys/amd64/amd64 sys/powerpc/aim sys/vm To: Scott Long Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" X-Rspamd-Queue-Id: 4B1blF25tcz49pG X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; TAGGED_FROM(0.00)[]; REPLY(-4.00)[] Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.33 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Jul 2020 21:52:41 -0000 On Tuesday, July 7, 2020, Scott Long wrote: > Author: scottl > Date: Tue Jul 7 20:33:11 2020 > New Revision: 362998 > URL: https://svnweb.freebsd.org/changeset/base/362998 > > Log: > Migrate the feature of excluding RAM pages to use "excludelist" > as its nomenclature. > > MFC after: 1 week > > Modified: > head/stand/defaults/loader.conf > head/sys/amd64/amd64/pmap.c > head/sys/powerpc/aim/mmu_radix.c > head/sys/vm/vm_page.c > head/sys/vm/vm_page.h > > Modified: head/stand/defaults/loader.conf > ============================================================ > ================== > --- head/stand/defaults/loader.conf Tue Jul 7 19:09:38 2020 > (r362997) > +++ head/stand/defaults/loader.conf Tue Jul 7 20:33:11 2020 > (r362998) > @@ -49,12 +49,12 @@ entropy_cache_type="boot_entropy_cache" # > Required for > # must not change value even if the > # _name above does change! > > -### RAM Blacklist configuration ############################ > -ram_blacklist_load="NO" # Set this to YES to load > a file > +### RAM Excludelist configuration ############################ > +ram_excludelist_load="NO" # Set this to YES to load a file > # containing a list of addresses to > # exclude from the running system. > -ram_blacklist_name="/boot/blacklist.txt" # Set this to the name of the > file > -ram_blacklist_type="ram_blacklist" # Required for the kernel to find > +ram_excludeist_name="/boot/excludelist.txt" # Set this to the name of > the file > +ram_excludelist_type="ram_excludelist" # Required for the kernel to find This will break systems where the blacklist file is already in use. At least please add this to release notes and provide a backward compatible way. > # the blacklist module > > ### Microcode loading configuration ######################## > > Modified: head/sys/amd64/amd64/pmap.c > ============================================================ > ================== > --- head/sys/amd64/amd64/pmap.c Tue Jul 7 19:09:38 2020 (r362997) > +++ head/sys/amd64/amd64/pmap.c Tue Jul 7 20:33:11 2020 (r362998) > @@ -2060,7 +2060,7 @@ pmap_init(void) > int error, i, ret, skz63; > > /* L1TF, reserve page @0 unconditionally */ > - vm_page_blacklist_add(0, bootverbose); > + vm_page_excludelist_add(0, bootverbose); > > /* Detect bare-metal Skylake Server and Skylake-X. */ > if (vm_guest == VM_GUEST_NO && cpu_vendor_id == CPU_VENDOR_INTEL && > @@ -2081,7 +2081,7 @@ pmap_init(void) > printf("SKZ63: skipping 4M RAM starting " > "at physical 1G\n"); > for (i = 0; i < atop(0x400000); i++) { > - ret = vm_page_blacklist_add(0x40000000 + > + ret = vm_page_excludelist_add(0x40000000 + > ptoa(i), FALSE); > if (!ret && bootverbose) > printf("page at %#lx already > used\n", > > Modified: head/sys/powerpc/aim/mmu_radix.c > ============================================================ > ================== > --- head/sys/powerpc/aim/mmu_radix.c Tue Jul 7 19:09:38 2020 > (r362997) > +++ head/sys/powerpc/aim/mmu_radix.c Tue Jul 7 20:33:11 2020 > (r362998) > @@ -3557,7 +3557,7 @@ mmu_radix_init() > int error, i, pv_npg; > > /* L1TF, reserve page @0 unconditionally */ > - vm_page_blacklist_add(0, bootverbose); > + vm_page_excludelist_add(0, bootverbose); > > zone_radix_pgd = uma_zcache_create("radix_pgd_cache", > RADIX_PGD_SIZE, NULL, NULL, > > Modified: head/sys/vm/vm_page.c > ============================================================ > ================== > --- head/sys/vm/vm_page.c Tue Jul 7 19:09:38 2020 (r362997) > +++ head/sys/vm/vm_page.c Tue Jul 7 20:33:11 2020 (r362998) > @@ -155,10 +155,11 @@ vm_page_t vm_page_array; > long vm_page_array_size; > long first_page; > > -static TAILQ_HEAD(, vm_page) blacklist_head; > -static int sysctl_vm_page_blacklist(SYSCTL_HANDLER_ARGS); > -SYSCTL_PROC(_vm, OID_AUTO, page_blacklist, CTLTYPE_STRING | CTLFLAG_RD | > - CTLFLAG_MPSAFE, NULL, 0, sysctl_vm_page_blacklist, "A", "Blacklist > pages"); > +static TAILQ_HEAD(, vm_page) excludelist_head; > +static int sysctl_vm_page_excludelist(SYSCTL_HANDLER_ARGS); > +SYSCTL_PROC(_vm, OID_AUTO, page_excludelist, CTLTYPE_STRING | CTLFLAG_RD | > + CTLFLAG_MPSAFE, NULL, 0, sysctl_vm_page_excludelist, "A", > + "Blacklist pages"); > > static uma_zone_t fakepg_zone; > > @@ -258,16 +259,16 @@ vm_set_page_size(void) > } > > /* > - * vm_page_blacklist_next: > + * vm_page_excludelist_next: > * > - * Find the next entry in the provided string of blacklist > + * Find the next entry in the provided string of excludelist > * addresses. Entries are separated by space, comma, or newline. > * If an invalid integer is encountered then the rest of the > * string is skipped. Updates the list pointer to the next > * character, or NULL if the string is exhausted or invalid. > */ > static vm_paddr_t > -vm_page_blacklist_next(char **list, char *end) > +vm_page_excludelist_next(char **list, char *end) > { > vm_paddr_t bad; > char *cp, *pos; > @@ -314,13 +315,13 @@ vm_page_blacklist_next(char **list, char *end) > *list = cp; > return (trunc_page(bad)); > } > - printf("Garbage in RAM blacklist, skipping\n"); > + printf("Garbage in RAM excludelist, skipping\n"); > *list = NULL; > return (0); > } > > bool > -vm_page_blacklist_add(vm_paddr_t pa, bool verbose) > +vm_page_excludelist_add(vm_paddr_t pa, bool verbose) > { > struct vm_domain *vmd; > vm_page_t m; > @@ -336,7 +337,7 @@ vm_page_blacklist_add(vm_paddr_t pa, bool verbose) > vm_domain_free_unlock(vmd); > if (ret != 0) { > vm_domain_freecnt_inc(vmd, -1); > - TAILQ_INSERT_TAIL(&blacklist_head, m, listq); > + TAILQ_INSERT_TAIL(&excludelist_head, m, listq); > if (verbose) > printf("Skipping page with pa 0x%jx\n", > (uintmax_t)pa); > } > @@ -344,35 +345,35 @@ vm_page_blacklist_add(vm_paddr_t pa, bool verbose) > } > > /* > - * vm_page_blacklist_check: > + * vm_page_excludelist_check: > * > - * Iterate through the provided string of blacklist addresses, pulling > + * Iterate through the provided string of excludelist addresses, > pulling > * each entry out of the physical allocator free list and putting it > - * onto a list for reporting via the vm.page_blacklist sysctl. > + * onto a list for reporting via the vm.page_excludelist sysctl. > */ > static void > -vm_page_blacklist_check(char *list, char *end) > +vm_page_excludelist_check(char *list, char *end) > { > vm_paddr_t pa; > char *next; > > next = list; > while (next != NULL) { > - if ((pa = vm_page_blacklist_next(&next, end)) == 0) > + if ((pa = vm_page_excludelist_next(&next, end)) == 0) > continue; > - vm_page_blacklist_add(pa, bootverbose); > + vm_page_excludelist_add(pa, bootverbose); > } > } > > /* > - * vm_page_blacklist_load: > + * vm_page_excludelist_load: > * > - * Search for a special module named "ram_blacklist". It'll be a > + * Search for a special module named "ram_excludelist". It'll be a > * plain text file provided by the user via the loader directive > * of the same name. > */ > static void > -vm_page_blacklist_load(char **list, char **end) > +vm_page_excludelist_load(char **list, char **end) > { > void *mod; > u_char *ptr; > @@ -381,7 +382,7 @@ vm_page_blacklist_load(char **list, char **end) > mod = NULL; > ptr = NULL; > > - mod = preload_search_by_type("ram_blacklist"); > + mod = preload_search_by_type("ram_excludelist"); > if (mod != NULL) { > ptr = preload_fetch_addr(mod); > len = preload_fetch_size(mod); > @@ -395,7 +396,7 @@ vm_page_blacklist_load(char **list, char **end) > } > > static int > -sysctl_vm_page_blacklist(SYSCTL_HANDLER_ARGS) > +sysctl_vm_page_excludelist(SYSCTL_HANDLER_ARGS) > { > vm_page_t m; > struct sbuf sbuf; > @@ -406,7 +407,7 @@ sysctl_vm_page_blacklist(SYSCTL_HANDLER_ARGS) > if (error != 0) > return (error); > sbuf_new_for_sysctl(&sbuf, NULL, 128, req); > - TAILQ_FOREACH(m, &blacklist_head, listq) { > + TAILQ_FOREACH(m, &excludelist_head, listq) { > sbuf_printf(&sbuf, "%s%#jx", first ? "" : ",", > (uintmax_t)m->phys_addr); > first = 0; > @@ -793,14 +794,14 @@ vm_page_startup(vm_offset_t vaddr) > } > > /* > - * Remove blacklisted pages from the physical memory allocator. > + * Remove excludelisted pages from the physical memory allocator. > */ > - TAILQ_INIT(&blacklist_head); > - vm_page_blacklist_load(&list, &listend); > - vm_page_blacklist_check(list, listend); > + TAILQ_INIT(&excludelist_head); > + vm_page_excludelist_load(&list, &listend); > + vm_page_excludelist_check(list, listend); > > - list = kern_getenv("vm.blacklist"); > - vm_page_blacklist_check(list, NULL); > + list = kern_getenv("vm.excludelist"); > + vm_page_excludelist_check(list, NULL); > > freeenv(list); > #if VM_NRESERVLEVEL > 0 > > Modified: head/sys/vm/vm_page.h > ============================================================ > ================== > --- head/sys/vm/vm_page.h Tue Jul 7 19:09:38 2020 (r362997) > +++ head/sys/vm/vm_page.h Tue Jul 7 20:33:11 2020 (r362998) > @@ -613,7 +613,7 @@ vm_page_t vm_page_alloc_contig_domain(vm_object_t obje > vm_page_t vm_page_alloc_freelist(int, int); > vm_page_t vm_page_alloc_freelist_domain(int, int, int); > void vm_page_bits_set(vm_page_t m, vm_page_bits_t *bits, vm_page_bits_t > set); > -bool vm_page_blacklist_add(vm_paddr_t pa, bool verbose); > +bool vm_page_excludelist_add(vm_paddr_t pa, bool verbose); > vm_page_t vm_page_grab(vm_object_t, vm_pindex_t, int); > vm_page_t vm_page_grab_unlocked(vm_object_t, vm_pindex_t, int); > int vm_page_grab_pages(vm_object_t object, vm_pindex_t pindex, int > allocflags, > _______________________________________________ > svn-src-head@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/svn-src-head > To unsubscribe, send any mail to "svn-src-head-unsubscribe@freebsd.org" > From owner-svn-src-all@freebsd.org Wed Jul 8 01:47:21 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2F9B6352CEF; Wed, 8 Jul 2020 01:47:21 +0000 (UTC) (envelope-from grog@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1hy10PbWz4LYX; Wed, 8 Jul 2020 01:47:21 +0000 (UTC) (envelope-from grog@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E491F18A4E; Wed, 8 Jul 2020 01:47:20 +0000 (UTC) (envelope-from grog@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0681lKIF019409; Wed, 8 Jul 2020 01:47:20 GMT (envelope-from grog@FreeBSD.org) Received: (from grog@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0681lKtQ019408; Wed, 8 Jul 2020 01:47:20 GMT (envelope-from grog@FreeBSD.org) Message-Id: <202007080147.0681lKtQ019408@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: grog set sender to grog@FreeBSD.org using -f From: Greg Lehey Date: Wed, 8 Jul 2020 01:47:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363000 - head/usr.bin/calendar/calendars X-SVN-Group: head X-SVN-Commit-Author: grog X-SVN-Commit-Paths: head/usr.bin/calendar/calendars X-SVN-Commit-Revision: 363000 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 01:47:21 -0000 Author: grog Date: Wed Jul 8 01:47:20 2020 New Revision: 363000 URL: https://svnweb.freebsd.org/changeset/base/363000 Log: Be more precise about Percy Grainger's place of birth. Modified: head/usr.bin/calendar/calendars/calendar.music Modified: head/usr.bin/calendar/calendars/calendar.music ============================================================================== --- head/usr.bin/calendar/calendars/calendar.music Tue Jul 7 20:42:35 2020 (r362999) +++ head/usr.bin/calendar/calendars/calendar.music Wed Jul 8 01:47:20 2020 (r363000) @@ -287,7 +287,7 @@ 07/06 The Jefferson Airplane is formed in San Francisco, 1965 07/07 Ringo Starr (Richard Starkey) born in Liverpool, England, 1940 07/07 Leo Sowerby dies in Port Clinton, Ohio, 1968 -07/08 Percy Grainger is born near Melbourne, Australia, 1882 +07/08 Percy Grainger is born in Brighton, Victoria, Australia, 1882 07/08 Hans Leo Hassler is born in Nuremberg, Germany, 1564 07/09 Ottorino Respighi is born in Bologna, Italy, 1879 07/09 Randall Thompson dies, 1984 From owner-svn-src-all@freebsd.org Wed Jul 8 02:28:09 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 249BB35367E; Wed, 8 Jul 2020 02:28:09 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1js46Bg5z4N34; Wed, 8 Jul 2020 02:28:08 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B7E5F19560; Wed, 8 Jul 2020 02:28:08 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0682S8Ph043719; Wed, 8 Jul 2020 02:28:08 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0682S8J5043718; Wed, 8 Jul 2020 02:28:08 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <202007080228.0682S8J5043718@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Wed, 8 Jul 2020 02:28:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363001 - head/sys/fs/nfsclient X-SVN-Group: head X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: head/sys/fs/nfsclient X-SVN-Commit-Revision: 363001 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 02:28:09 -0000 Author: rmacklem Date: Wed Jul 8 02:28:08 2020 New Revision: 363001 URL: https://svnweb.freebsd.org/changeset/base/363001 Log: Add support for ext_pgs mbufs to nfsm_uiombuf(). This patch uses a slightly different algorithm for the non-ext_pgs case, where a variable called "mcp" is maintained, pointing to the current location that mbuf data can be filled into. This avoids use of mtod(mp, char *) + mp->m_len to calculate the location, since this does not work for ext_pgs mbufs and I think it makes the algorithm more readable. This change should not result in semantic changes for the non-ext_pgs case. This is another in the series of commits that add support to the NFS client and server for building RPC messages in ext_pgs mbufs with anonymous pages. This is useful so that the entire mbuf list does not need to be copied before calling sosend() when NFS over TLS is enabled. Since ND_EXTPG is never set yet, there is no semantic change at this time. Modified: head/sys/fs/nfsclient/nfs_clcomsubs.c Modified: head/sys/fs/nfsclient/nfs_clcomsubs.c ============================================================================== --- head/sys/fs/nfsclient/nfs_clcomsubs.c Wed Jul 8 01:47:20 2020 (r363000) +++ head/sys/fs/nfsclient/nfs_clcomsubs.c Wed Jul 8 02:28:08 2020 (r363001) @@ -62,7 +62,7 @@ nfsm_uiombuf(struct nfsrv_descript *nd, struct uio *ui struct mbuf *mp, *mp2; int xfer, left, mlen; int uiosiz, clflg, rem; - char *cp, *tcp; + char *mcp, *tcp; KASSERT(uiop->uio_iovcnt == 1, ("nfsm_uiotombuf: iovcnt != 1")); @@ -72,41 +72,52 @@ nfsm_uiombuf(struct nfsrv_descript *nd, struct uio *ui clflg = 0; rem = NFSM_RNDUP(siz) - siz; mp = mp2 = nd->nd_mb; + mcp = nd->nd_bpos; while (siz > 0) { + KASSERT((nd->nd_flag & ND_EXTPG) != 0 || mcp == + mtod(mp, char *) + mp->m_len, ("nfsm_uiombuf: mcp wrong")); left = uiop->uio_iov->iov_len; uiocp = uiop->uio_iov->iov_base; if (left > siz) left = siz; uiosiz = left; while (left > 0) { - mlen = M_TRAILINGSPACE(mp); - if (mlen == 0) { - if (clflg) - NFSMCLGET(mp, M_WAITOK); - else - NFSMGET(mp); - mp->m_len = 0; - mp2->m_next = mp; - mp2 = mp; + if ((nd->nd_flag & ND_EXTPG) != 0) + mlen = nd->nd_bextpgsiz; + else mlen = M_TRAILINGSPACE(mp); + if (mlen == 0) { + if ((nd->nd_flag & ND_EXTPG) != 0) { + mp = nfsm_add_ext_pgs(mp, + nd->nd_maxextsiz, &nd->nd_bextpg); + mcp = (char *)(void *)PHYS_TO_DMAP( + mp->m_epg_pa[nd->nd_bextpg]); + nd->nd_bextpgsiz = PAGE_SIZE; + } else { + if (clflg) + NFSMCLGET(mp, M_WAITOK); + else + NFSMGET(mp); + mp->m_len = 0; + mlen = M_TRAILINGSPACE(mp); + mcp = mtod(mp, char *); + mp2->m_next = mp; + mp2 = mp; + } } xfer = (left > mlen) ? mlen : left; -#ifdef notdef - /* Not Yet.. */ - if (uiop->uio_iov->iov_op != NULL) - (*(uiop->uio_iov->iov_op)) - (uiocp, mtod(mp, caddr_t) + mp->m_len, - xfer); - else -#endif if (uiop->uio_segflg == UIO_SYSSPACE) - NFSBCOPY(uiocp, mtod(mp, caddr_t) + mp->m_len, - xfer); + NFSBCOPY(uiocp, mcp, xfer); else - copyin(uiocp, mtod(mp, caddr_t) + mp->m_len, xfer); + copyin(uiocp, mcp, xfer); mp->m_len += xfer; left -= xfer; uiocp += xfer; + mcp += xfer; + if ((nd->nd_flag & ND_EXTPG) != 0) { + nd->nd_bextpgsiz -= xfer; + mp->m_epg_last_len += xfer; + } uiop->uio_offset += xfer; uiop->uio_resid -= xfer; } @@ -117,18 +128,30 @@ nfsm_uiombuf(struct nfsrv_descript *nd, struct uio *ui siz -= uiosiz; } if (rem > 0) { - if (rem > M_TRAILINGSPACE(mp)) { + if ((nd->nd_flag & ND_EXTPG) == 0 && rem > + M_TRAILINGSPACE(mp)) { NFSMGET(mp); mp->m_len = 0; mp2->m_next = mp; + mcp = mtod(mp, char *); + } else if ((nd->nd_flag & ND_EXTPG) != 0 && rem > + nd->nd_bextpgsiz) { + mp = nfsm_add_ext_pgs(mp, nd->nd_maxextsiz, + &nd->nd_bextpg); + mcp = (char *)(void *) + PHYS_TO_DMAP(mp->m_epg_pa[nd->nd_bextpg]); + nd->nd_bextpgsiz = PAGE_SIZE; } - cp = mtod(mp, caddr_t) + mp->m_len; for (left = 0; left < rem; left++) - *cp++ = '\0'; + *mcp++ = '\0'; mp->m_len += rem; - nd->nd_bpos = cp; + nd->nd_bpos = mcp; + if ((nd->nd_flag & ND_EXTPG) != 0) { + nd->nd_bextpgsiz -= rem; + mp->m_epg_last_len += rem; + } } else - nd->nd_bpos = mtod(mp, caddr_t) + mp->m_len; + nd->nd_bpos = mcp; nd->nd_mb = mp; } From owner-svn-src-all@freebsd.org Wed Jul 8 03:57:48 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2668E355275; Wed, 8 Jul 2020 03:57:48 +0000 (UTC) (envelope-from takawata@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1lrX0Crfz4SRh; Wed, 8 Jul 2020 03:57:48 +0000 (UTC) (envelope-from takawata@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DE1F91A70A; Wed, 8 Jul 2020 03:57:47 +0000 (UTC) (envelope-from takawata@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0683vldG000596; Wed, 8 Jul 2020 03:57:47 GMT (envelope-from takawata@FreeBSD.org) Received: (from takawata@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0683vlm5000595; Wed, 8 Jul 2020 03:57:47 GMT (envelope-from takawata@FreeBSD.org) Message-Id: <202007080357.0683vlm5000595@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: takawata set sender to takawata@FreeBSD.org using -f From: Takanori Watanabe Date: Wed, 8 Jul 2020 03:57:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363002 - head/usr.sbin/bluetooth/hccontrol X-SVN-Group: head X-SVN-Commit-Author: takawata X-SVN-Commit-Paths: head/usr.sbin/bluetooth/hccontrol X-SVN-Commit-Revision: 363002 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 03:57:48 -0000 Author: takawata Date: Wed Jul 8 03:57:47 2020 New Revision: 363002 URL: https://svnweb.freebsd.org/changeset/base/363002 Log: Add le_rand command. PR: 247808 Submitted by: Marc Veldman Modified: head/usr.sbin/bluetooth/hccontrol/hccontrol.8 head/usr.sbin/bluetooth/hccontrol/le.c Modified: head/usr.sbin/bluetooth/hccontrol/hccontrol.8 ============================================================================== --- head/usr.sbin/bluetooth/hccontrol/hccontrol.8 Wed Jul 8 02:28:08 2020 (r363001) +++ head/usr.sbin/bluetooth/hccontrol/hccontrol.8 Wed Jul 8 03:57:47 2020 (r363002) @@ -164,6 +164,7 @@ are: .It Cm LE_Connect .It Cm LE_Read_Channel_Map .It Cm LE_Read_Remote_Features +.It Cm LE_Rand .El .Pp The currently supported node commands in Modified: head/usr.sbin/bluetooth/hccontrol/le.c ============================================================================== --- head/usr.sbin/bluetooth/hccontrol/le.c Wed Jul 8 02:28:08 2020 (r363001) +++ head/usr.sbin/bluetooth/hccontrol/le.c Wed Jul 8 03:57:47 2020 (r363002) @@ -71,6 +71,7 @@ static int le_connect(int s, int argc, char *argv[]); static void handle_le_connection_event(ng_hci_event_pkt_t* e, bool verbose); static int le_read_channel_map(int s, int argc, char *argv[]); static void handle_le_remote_features_event(ng_hci_event_pkt_t* e); +static int le_rand(int s, int argc, char *argv[]); static int le_set_scan_param(int s, int argc, char *argv[]) @@ -1211,8 +1212,33 @@ static void handle_le_remote_features_event(ng_hci_eve return; } /* handle_le_remote_features_event */ +static int le_rand(int s, int argc, char *argv[]) +{ + ng_hci_le_rand_rp rp; + int n; + n = sizeof(rp); + if (hci_simple_request(s, NG_HCI_OPCODE(NG_HCI_OGF_LE, + NG_HCI_OCF_LE_RAND), + (void *)&rp, &n) == ERROR) + return (ERROR); + + if (rp.status != 0x00) { + fprintf(stdout, "Status: %s [%#02x]\n", + hci_status2str(rp.status), rp.status); + return (FAILED); + } + + fprintf(stdout, + "Random number : %08llx\n", + (unsigned long long)le64toh(rp.random_number)); + + return (OK); +} + + + struct hci_command le_commands[] = { { "le_enable", @@ -1335,5 +1361,11 @@ struct hci_command le_commands[] = { "Read supported features for the device\n" "identified by the connection handle", &le_read_remote_features + }, + { + "le_rand", + "le_rand\n" + "Generate 64 bits of random data", + &le_rand }, }; From owner-svn-src-all@freebsd.org Wed Jul 8 04:55:54 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 50CBC356571; Wed, 8 Jul 2020 04:55:54 +0000 (UTC) (envelope-from danfe@freebsd.org) Received: from freefall.freebsd.org (freefall.freebsd.org [96.47.72.132]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "freefall.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1n7Z1Nkcz4VPs; Wed, 8 Jul 2020 04:55:54 +0000 (UTC) (envelope-from danfe@freebsd.org) Received: by freefall.freebsd.org (Postfix, from userid 1033) id 125D11EF06; Wed, 8 Jul 2020 04:55:54 +0000 (UTC) Date: Wed, 8 Jul 2020 04:55:54 +0000 From: Alexey Dokuchaev To: Scott Long Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r362998 - in head: stand/defaults sys/amd64/amd64 sys/powerpc/aim sys/vm Message-ID: <20200708045554.GA54912@FreeBSD.org> References: <202007072033.067KXC9V029714@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <202007072033.067KXC9V029714@repo.freebsd.org> X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 04:55:54 -0000 On Tue, Jul 07, 2020 at 08:33:12PM +0000, Scott Long wrote: > New Revision: 362998 > URL: https://svnweb.freebsd.org/changeset/base/362998 > > Log: > Migrate the feature of excluding RAM pages to use "excludelist" > as its nomenclature. Did I miss any prior discussion of this change? Commit references no DR or something. I thought we had agreed that this black/master type of commits should not just go in like one pleases. To me this change is pessimization, it is technically less accurate. ./danfe From owner-svn-src-all@freebsd.org Wed Jul 8 06:33:08 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7E792358B1A; Wed, 8 Jul 2020 06:33:08 +0000 (UTC) (envelope-from takawata@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1qHm2nqZz4bBk; Wed, 8 Jul 2020 06:33:08 +0000 (UTC) (envelope-from takawata@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 43E601C2B0; Wed, 8 Jul 2020 06:33:08 +0000 (UTC) (envelope-from takawata@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0686X8j4097782; Wed, 8 Jul 2020 06:33:08 GMT (envelope-from takawata@FreeBSD.org) Received: (from takawata@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0686X8dl097781; Wed, 8 Jul 2020 06:33:08 GMT (envelope-from takawata@FreeBSD.org) Message-Id: <202007080633.0686X8dl097781@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: takawata set sender to takawata@FreeBSD.org using -f From: Takanori Watanabe Date: Wed, 8 Jul 2020 06:33:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363003 - head/sys/netgraph/bluetooth/include X-SVN-Group: head X-SVN-Commit-Author: takawata X-SVN-Commit-Paths: head/sys/netgraph/bluetooth/include X-SVN-Commit-Revision: 363003 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 06:33:08 -0000 Author: takawata Date: Wed Jul 8 06:33:07 2020 New Revision: 363003 URL: https://svnweb.freebsd.org/changeset/base/363003 Log: Add support for [read|write] supported data length commands. Fix ng_hci_le_long_term_key_request_negative_reply_cp struct while here. PR: 247809 Submitted by: Marc Veldman Modified: head/sys/netgraph/bluetooth/include/ng_hci.h Modified: head/sys/netgraph/bluetooth/include/ng_hci.h ============================================================================== --- head/sys/netgraph/bluetooth/include/ng_hci.h Wed Jul 8 03:57:47 2020 (r363002) +++ head/sys/netgraph/bluetooth/include/ng_hci.h Wed Jul 8 06:33:07 2020 (r363003) @@ -1730,11 +1730,26 @@ typedef struct { #define NG_HCI_OCF_LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY 0x001b typedef struct{ u_int16_t connection_handle; -}ng_hci_le_long_term_key_request_negative_reply_cp; +}__attribute__((packed)) ng_hci_le_long_term_key_request_negative_reply_cp; typedef struct { u_int8_t status; u_int16_t connection_handle; }__attribute__ ((packed)) ng_hci_le_long_term_key_request_negative_reply_rp; + +#define NG_HCI_OCF_LE_READ_SUGGESTED_DATA_LENGTH 0x0023 +/*No command parameter*/ +typedef struct { + u_int8_t status; + u_int16_t suggested_max_tx_octets; + u_int16_t suggested_max_tx_time; +}__attribute__ ((packed)) ng_hci_le_read_suggested_data_length_rp; + +#define NG_HCI_OCF_LE_WRITE_SUGGESTED_DATA_LENGTH 0x0024 +typedef struct { + u_int16_t suggested_max_tx_octets; + u_int16_t suggested_max_tx_time; +}__attribute__ ((packed)) ng_hci_le_write_suggested_data_length_cp; +typedef ng_hci_status_rp ng_hci_le_write_suggested_data_length_rp; #define NG_HCI_OCF_LE_READ_BUFFER_SIZE_V2 0x0060 /*No command parameter */ From owner-svn-src-all@freebsd.org Wed Jul 8 09:00:06 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 05F4C35B9F8; Wed, 8 Jul 2020 09:00:06 +0000 (UTC) (envelope-from rscheff@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1tYK6R59z3Vlc; Wed, 8 Jul 2020 09:00:05 +0000 (UTC) (envelope-from rscheff@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C14D31DB45; Wed, 8 Jul 2020 09:00:05 +0000 (UTC) (envelope-from rscheff@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068905sw084585; Wed, 8 Jul 2020 09:00:05 GMT (envelope-from rscheff@FreeBSD.org) Received: (from rscheff@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0689051Y084583; Wed, 8 Jul 2020 09:00:05 GMT (envelope-from rscheff@FreeBSD.org) Message-Id: <202007080900.0689051Y084583@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rscheff set sender to rscheff@FreeBSD.org using -f From: Richard Scheffenegger Date: Wed, 8 Jul 2020 09:00:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363004 - stable/12/sys/netinet X-SVN-Group: stable-12 X-SVN-Commit-Author: rscheff X-SVN-Commit-Paths: stable/12/sys/netinet X-SVN-Commit-Revision: 363004 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 09:00:06 -0000 Author: rscheff Date: Wed Jul 8 09:00:05 2020 New Revision: 363004 URL: https://svnweb.freebsd.org/changeset/base/363004 Log: MFC r362577: TCP: make after-idle work for transactional sessions. The use of t_rcvtime as proxy for the last transmission fails for transactional IO, where the client requests data before the server can respond with a bulk transfer. Set aside a dedicated variable to actually track the last locally sent segment going forward. Reported by: rrs Reviewed by: rrs, tuexen (mentor) Approved by: tuexen (mentor), rgrimes (mentor, blanket) MFC after: 2 weeks Sponsored by: NetApp, Inc. Differential Revision: https://reviews.freebsd.org/D25016 Modified: stable/12/sys/netinet/tcp_output.c stable/12/sys/netinet/tcp_var.h Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/netinet/tcp_output.c ============================================================================== --- stable/12/sys/netinet/tcp_output.c Wed Jul 8 06:33:07 2020 (r363003) +++ stable/12/sys/netinet/tcp_output.c Wed Jul 8 09:00:05 2020 (r363004) @@ -246,7 +246,8 @@ tcp_output(struct tcpcb *tp) * to send, then transmit; otherwise, investigate further. */ idle = (tp->t_flags & TF_LASTIDLE) || (tp->snd_max == tp->snd_una); - if (idle && ticks - tp->t_rcvtime >= tp->t_rxtcur) + if (idle && (((ticks - tp->t_rcvtime) >= tp->t_rxtcur) || + (tp->t_sndtime && ((ticks - tp->t_sndtime) >= tp->t_rxtcur)))) cc_after_idle(tp); tp->t_flags &= ~TF_LASTIDLE; if (idle) { @@ -1461,6 +1462,7 @@ out: * Time this transmission if not a retransmission and * not currently timing anything. */ + tp->t_sndtime = ticks; if (tp->t_rtttime == 0) { tp->t_rtttime = ticks; tp->t_rtseq = startseq; Modified: stable/12/sys/netinet/tcp_var.h ============================================================================== --- stable/12/sys/netinet/tcp_var.h Wed Jul 8 06:33:07 2020 (r363003) +++ stable/12/sys/netinet/tcp_var.h Wed Jul 8 09:00:05 2020 (r363004) @@ -152,8 +152,9 @@ struct tcpcb { tcp_seq snd_wl2; /* window update seg ack number */ tcp_seq irs; /* initial receive sequence number */ - tcp_seq iss; /* initial send sequence number */ - u_int t_acktime; + tcp_seq iss; /* initial send sequence number */ + u_int t_acktime; /* RACK and BBR incoming new data was acked */ + u_int t_sndtime; /* time last data was sent */ u_int ts_recent_age; /* when last updated */ tcp_seq snd_recover; /* for use in NewReno Fast Recovery */ uint16_t cl4_spare; /* Spare to adjust CL 4 */ From owner-svn-src-all@freebsd.org Wed Jul 8 09:04:21 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B4E7E35BE70; Wed, 8 Jul 2020 09:04:21 +0000 (UTC) (envelope-from rscheff@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1tfF4Pbgz3W8g; Wed, 8 Jul 2020 09:04:21 +0000 (UTC) (envelope-from rscheff@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7A3BF1DA71; Wed, 8 Jul 2020 09:04:21 +0000 (UTC) (envelope-from rscheff@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06894LkY090451; Wed, 8 Jul 2020 09:04:21 GMT (envelope-from rscheff@FreeBSD.org) Received: (from rscheff@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06894Lfm090450; Wed, 8 Jul 2020 09:04:21 GMT (envelope-from rscheff@FreeBSD.org) Message-Id: <202007080904.06894Lfm090450@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rscheff set sender to rscheff@FreeBSD.org using -f From: Richard Scheffenegger Date: Wed, 8 Jul 2020 09:04:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363005 - stable/12/sys/netinet/cc X-SVN-Group: stable-12 X-SVN-Commit-Author: rscheff X-SVN-Commit-Paths: stable/12/sys/netinet/cc X-SVN-Commit-Revision: 363005 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 09:04:21 -0000 Author: rscheff Date: Wed Jul 8 09:04:20 2020 New Revision: 363005 URL: https://svnweb.freebsd.org/changeset/base/363005 Log: MFC r362580: TCP: fix cubic RTO reaction. Proper TCP Cubic operation requires the knowledge of the maximum congestion window prior to the last congestion event. This restores and improves a bugfix previously added by jtl@ but subsequently removed due to a revert. Reported by: chengc_netapp.com Reviewed by: chengc_netapp.com, tuexen (mentor) Approved by: tuexen (mentor), rgrimes (mentor, blanket) MFC after: 2 weeks Sponsored by: NetApp, Inc. Differential Revision: https://reviews.freebsd.org/D25133 Modified: stable/12/sys/netinet/cc/cc_cubic.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/netinet/cc/cc_cubic.c ============================================================================== --- stable/12/sys/netinet/cc/cc_cubic.c Wed Jul 8 09:00:05 2020 (r363004) +++ stable/12/sys/netinet/cc/cc_cubic.c Wed Jul 8 09:04:20 2020 (r363005) @@ -313,10 +313,15 @@ cubic_cong_signal(struct cc_var *ccv, uint32_t type) * timeout has fired more than once, as there is a reasonable * chance the first one is a false alarm and may not indicate * congestion. + * This will put Cubic firmly into the concave / TCP friendly + * region, for a slower ramp-up after two consecutive RTOs. */ if (CCV(ccv, t_rxtshift) >= 2) { cubic_data->flags |= CUBICFLAG_CONG_EVENT; cubic_data->t_last_cong = ticks; + cubic_data->max_cwnd = CCV(ccv, snd_cwnd_prev); + cubic_data->K = cubic_k(cubic_data->max_cwnd / + CCV(ccv, t_maxseg)); } break; } From owner-svn-src-all@freebsd.org Wed Jul 8 10:04:13 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 87D9A35DE74; Wed, 8 Jul 2020 10:04:13 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1vzK34CKz3bNK; Wed, 8 Jul 2020 10:04:13 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4D3821EA38; Wed, 8 Jul 2020 10:04:13 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068A4DOL027871; Wed, 8 Jul 2020 10:04:13 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068A4DhG027870; Wed, 8 Jul 2020 10:04:13 GMT (envelope-from kib@FreeBSD.org) Message-Id: <202007081004.068A4DhG027870@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Wed, 8 Jul 2020 10:04:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363006 - stable/12/sys/kern X-SVN-Group: stable-12 X-SVN-Commit-Author: kib X-SVN-Commit-Paths: stable/12/sys/kern X-SVN-Commit-Revision: 363006 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 10:04:13 -0000 Author: kib Date: Wed Jul 8 10:04:12 2020 New Revision: 363006 URL: https://svnweb.freebsd.org/changeset/base/363006 Log: MFC r362948: Fix typo. Modified: stable/12/sys/kern/vfs_vnops.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/kern/vfs_vnops.c ============================================================================== --- stable/12/sys/kern/vfs_vnops.c Wed Jul 8 09:04:20 2020 (r363005) +++ stable/12/sys/kern/vfs_vnops.c Wed Jul 8 10:04:12 2020 (r363006) @@ -1447,7 +1447,7 @@ vn_stat(struct vnode *vp, struct stat *sb, struct ucre * "a filesystem-specific preferred I/O block size for this * object. In some filesystem types, this may vary from file * to file" - * Use miminum/default of PAGE_SIZE (e.g. for VCHR). + * Use minimum/default of PAGE_SIZE (e.g. for VCHR). */ sb->st_blksize = max(PAGE_SIZE, vap->va_blocksize); From owner-svn-src-all@freebsd.org Wed Jul 8 10:04:52 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 973F435E2A3; Wed, 8 Jul 2020 10:04:52 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1w043Vqjz3bRW; Wed, 8 Jul 2020 10:04:52 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5B9B51E7E8; Wed, 8 Jul 2020 10:04:52 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068A4qnR027962; Wed, 8 Jul 2020 10:04:52 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068A4qS2027961; Wed, 8 Jul 2020 10:04:52 GMT (envelope-from kib@FreeBSD.org) Message-Id: <202007081004.068A4qS2027961@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Wed, 8 Jul 2020 10:04:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r363007 - stable/11/sys/kern X-SVN-Group: stable-11 X-SVN-Commit-Author: kib X-SVN-Commit-Paths: stable/11/sys/kern X-SVN-Commit-Revision: 363007 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 10:04:52 -0000 Author: kib Date: Wed Jul 8 10:04:51 2020 New Revision: 363007 URL: https://svnweb.freebsd.org/changeset/base/363007 Log: MFC r362948: Fix typo. Modified: stable/11/sys/kern/vfs_vnops.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/kern/vfs_vnops.c ============================================================================== --- stable/11/sys/kern/vfs_vnops.c Wed Jul 8 10:04:12 2020 (r363006) +++ stable/11/sys/kern/vfs_vnops.c Wed Jul 8 10:04:51 2020 (r363007) @@ -1466,7 +1466,7 @@ vn_stat(struct vnode *vp, struct stat *sb, struct ucre * "a filesystem-specific preferred I/O block size for this * object. In some filesystem types, this may vary from file * to file" - * Use miminum/default of PAGE_SIZE (e.g. for VCHR). + * Use minimum/default of PAGE_SIZE (e.g. for VCHR). */ sb->st_blksize = max(PAGE_SIZE, vap->va_blocksize); From owner-svn-src-all@freebsd.org Wed Jul 8 12:25:19 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D0E52361D1D; Wed, 8 Jul 2020 12:25:19 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B1z675B1wz41nd; Wed, 8 Jul 2020 12:25:19 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 96097200F7; Wed, 8 Jul 2020 12:25:19 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068CPJSC014832; Wed, 8 Jul 2020 12:25:19 GMT (envelope-from tuexen@FreeBSD.org) Received: (from tuexen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068CPJr9014831; Wed, 8 Jul 2020 12:25:19 GMT (envelope-from tuexen@FreeBSD.org) Message-Id: <202007081225.068CPJr9014831@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tuexen set sender to tuexen@FreeBSD.org using -f From: Michael Tuexen Date: Wed, 8 Jul 2020 12:25:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363008 - head/sys/netinet X-SVN-Group: head X-SVN-Commit-Author: tuexen X-SVN-Commit-Paths: head/sys/netinet X-SVN-Commit-Revision: 363008 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 12:25:19 -0000 Author: tuexen Date: Wed Jul 8 12:25:19 2020 New Revision: 363008 URL: https://svnweb.freebsd.org/changeset/base/363008 Log: Improve handling of PKTDROP chunks. This includes the input validation to address two issues found by ossfuzz testing the userland stack: * https://oss-fuzz.com/testcase-detail/5387560242380800 * https://oss-fuzz.com/testcase-detail/4887954068865024 and adding support for I-DATA chunks in addition to DATA chunks. Modified: head/sys/netinet/sctp_input.c Modified: head/sys/netinet/sctp_input.c ============================================================================== --- head/sys/netinet/sctp_input.c Wed Jul 8 10:04:51 2020 (r363007) +++ head/sys/netinet/sctp_input.c Wed Jul 8 12:25:19 2020 (r363008) @@ -3046,7 +3046,8 @@ process_chunk_drop(struct sctp_tcb *stcb, struct sctp_ { switch (desc->chunk_type) { case SCTP_DATA: - /* find the tsn to resend (possibly */ + case SCTP_IDATA: + /* find the tsn to resend (possibly) */ { uint32_t tsn; struct sctp_tmit_chunk *tp1; @@ -3080,8 +3081,6 @@ process_chunk_drop(struct sctp_tcb *stcb, struct sctp_ SCTP_STAT_INCR(sctps_pdrptsnnf); } if ((tp1) && (tp1->sent < SCTP_DATAGRAM_ACKED)) { - uint8_t *ddp; - if (((flg & SCTP_BADCRC) == 0) && ((flg & SCTP_FROM_MIDDLE_BOX) == 0)) { return (0); @@ -3096,20 +3095,18 @@ process_chunk_drop(struct sctp_tcb *stcb, struct sctp_ SCTP_STAT_INCR(sctps_pdrpdizrw); return (0); } - ddp = (uint8_t *)(mtod(tp1->data, caddr_t)+ - sizeof(struct sctp_data_chunk)); - { - unsigned int iii; - - for (iii = 0; iii < sizeof(desc->data_bytes); - iii++) { - if (ddp[iii] != desc->data_bytes[iii]) { - SCTP_STAT_INCR(sctps_pdrpbadd); - return (-1); - } - } + if ((uint32_t)SCTP_BUF_LEN(tp1->data) < + SCTP_DATA_CHUNK_OVERHEAD(stcb) + SCTP_NUM_DB_TO_VERIFY) { + /* Payload not matching. */ + SCTP_STAT_INCR(sctps_pdrpbadd); + return (-1); } - + if (memcmp(mtod(tp1->data, caddr_t)+SCTP_DATA_CHUNK_OVERHEAD(stcb), + desc->data_bytes, SCTP_NUM_DB_TO_VERIFY) != 0) { + /* Payload not matching. */ + SCTP_STAT_INCR(sctps_pdrpbadd); + return (-1); + } if (tp1->do_rtt) { /* * this guy had a RTO calculation @@ -4135,104 +4132,126 @@ static void sctp_handle_packet_dropped(struct sctp_pktdrop_chunk *cp, struct sctp_tcb *stcb, struct sctp_nets *net, uint32_t limit) { + struct sctp_chunk_desc desc; + struct sctp_chunkhdr *chk_hdr; + struct sctp_data_chunk *data_chunk; + struct sctp_idata_chunk *idata_chunk; uint32_t bottle_bw, on_queue; + uint32_t offset, chk_len; uint16_t trunc_len; - unsigned int chlen; - unsigned int at; - struct sctp_chunk_desc desc; - struct sctp_chunkhdr *ch; + uint16_t pktdrp_len; + uint8_t pktdrp_flags; - chlen = ntohs(cp->ch.chunk_length); - chlen -= sizeof(struct sctp_pktdrop_chunk); - /* XXX possible chlen underflow */ - if (chlen == 0) { - ch = NULL; - if (cp->ch.chunk_flags & SCTP_FROM_MIDDLE_BOX) + KASSERT(sizeof(struct sctp_pktdrop_chunk) <= limit, + ("PKTDROP chunk too small")); + pktdrp_flags = cp->ch.chunk_flags; + pktdrp_len = ntohs(cp->ch.chunk_length); + KASSERT(limit <= pktdrp_len, ("Inconsistent limit")); + if (pktdrp_flags & SCTP_PACKET_TRUNCATED) { + trunc_len = ntohs(cp->trunc_len); + if (trunc_len <= pktdrp_len - sizeof(struct sctp_pktdrop_chunk)) { + /* The peer plays games with us. */ + return; + } + } else { + trunc_len = 0; + } + limit -= sizeof(struct sctp_pktdrop_chunk); + offset = 0; + if (offset == limit) { + if (pktdrp_flags & SCTP_FROM_MIDDLE_BOX) { SCTP_STAT_INCR(sctps_pdrpbwrpt); + } + } else if (offset + sizeof(struct sctphdr) > limit) { + /* Only a partial SCTP common header. */ + SCTP_STAT_INCR(sctps_pdrpcrupt); + offset = limit; } else { - ch = (struct sctp_chunkhdr *)(cp->data + sizeof(struct sctphdr)); - chlen -= sizeof(struct sctphdr); - /* XXX possible chlen underflow */ - memset(&desc, 0, sizeof(desc)); + /* XXX: Check embedded SCTP common header. */ + offset += sizeof(struct sctphdr); } - trunc_len = (uint16_t)ntohs(cp->trunc_len); - if (trunc_len > limit) { - trunc_len = limit; - } - - /* now the chunks themselves */ - while ((ch != NULL) && (chlen >= sizeof(struct sctp_chunkhdr))) { - desc.chunk_type = ch->chunk_type; - /* get amount we need to move */ - at = ntohs(ch->chunk_length); - if (at < sizeof(struct sctp_chunkhdr)) { - /* corrupt chunk, maybe at the end? */ + /* Now parse through the chunks themselves. */ + while (offset < limit) { + if (offset + sizeof(struct sctp_chunkhdr) > limit) { SCTP_STAT_INCR(sctps_pdrpcrupt); break; } - if (trunc_len == 0) { - /* we are supposed to have all of it */ - if (at > chlen) { - /* corrupt skip it */ - SCTP_STAT_INCR(sctps_pdrpcrupt); + chk_hdr = (struct sctp_chunkhdr *)(cp->data + offset); + desc.chunk_type = chk_hdr->chunk_type; + /* get amount we need to move */ + chk_len = (uint32_t)ntohs(chk_hdr->chunk_length); + if (chk_len < sizeof(struct sctp_chunkhdr)) { + /* Someone is lying... */ + break; + } + if (desc.chunk_type == SCTP_DATA) { + if (stcb->asoc.idata_supported) { + /* Some is playing games with us. */ break; } - } else { - /* is there enough of it left ? */ - if (desc.chunk_type == SCTP_DATA) { - if (chlen < (sizeof(struct sctp_data_chunk) + - sizeof(desc.data_bytes))) { - break; - } - } else { - if (chlen < sizeof(struct sctp_chunkhdr)) { - break; - } + if (chk_len <= sizeof(struct sctp_data_chunk)) { + /* Some is playing games with us. */ + break; } - } - if (desc.chunk_type == SCTP_DATA) { - /* can we get out the tsn? */ - if ((cp->ch.chunk_flags & SCTP_FROM_MIDDLE_BOX)) + if (chk_len < sizeof(struct sctp_data_chunk) + SCTP_NUM_DB_TO_VERIFY) { + /* + * Not enough data bytes available in the + * chunk. + */ + SCTP_STAT_INCR(sctps_pdrpnedat); + goto next_chunk; + } + if (offset + sizeof(struct sctp_data_chunk) + SCTP_NUM_DB_TO_VERIFY > limit) { + /* Not enough data in buffer. */ + break; + } + data_chunk = (struct sctp_data_chunk *)(cp->data + offset); + memcpy(desc.data_bytes, data_chunk + 1, SCTP_NUM_DB_TO_VERIFY); + desc.tsn_ifany = data_chunk->dp.tsn; + if (pktdrp_flags & SCTP_FROM_MIDDLE_BOX) { SCTP_STAT_INCR(sctps_pdrpmbda); - - if (chlen >= (sizeof(struct sctp_data_chunk) + sizeof(uint32_t))) { - /* yep */ - struct sctp_data_chunk *dcp; - uint8_t *ddp; - unsigned int iii; - - dcp = (struct sctp_data_chunk *)ch; - ddp = (uint8_t *)(dcp + 1); - for (iii = 0; iii < sizeof(desc.data_bytes); iii++) { - desc.data_bytes[iii] = ddp[iii]; - } - desc.tsn_ifany = dcp->dp.tsn; - } else { - /* nope we are done. */ + } + } else if (desc.chunk_type == SCTP_IDATA) { + if (!stcb->asoc.idata_supported) { + /* Some is playing games with us. */ + break; + } + if (chk_len <= sizeof(struct sctp_idata_chunk)) { + /* Some is playing games with us. */ + break; + } + if (chk_len < sizeof(struct sctp_idata_chunk) + SCTP_NUM_DB_TO_VERIFY) { + /* + * Not enough data bytes available in the + * chunk. + */ SCTP_STAT_INCR(sctps_pdrpnedat); + goto next_chunk; + } + if (offset + sizeof(struct sctp_idata_chunk) + SCTP_NUM_DB_TO_VERIFY > limit) { + /* Not enough data in buffer. */ break; } + idata_chunk = (struct sctp_idata_chunk *)(cp->data + offset); + memcpy(desc.data_bytes, idata_chunk + 1, SCTP_NUM_DB_TO_VERIFY); + desc.tsn_ifany = idata_chunk->dp.tsn; + if (pktdrp_flags & SCTP_FROM_MIDDLE_BOX) { + SCTP_STAT_INCR(sctps_pdrpmbda); + } } else { - if ((cp->ch.chunk_flags & SCTP_FROM_MIDDLE_BOX)) + if (pktdrp_flags & SCTP_FROM_MIDDLE_BOX) { SCTP_STAT_INCR(sctps_pdrpmbct); + } } - - if (process_chunk_drop(stcb, &desc, net, cp->ch.chunk_flags)) { + if (process_chunk_drop(stcb, &desc, net, pktdrp_flags)) { SCTP_STAT_INCR(sctps_pdrppdbrk); break; } - if (SCTP_SIZE32(at) > chlen) { - break; - } - chlen -= SCTP_SIZE32(at); - if (chlen < sizeof(struct sctp_chunkhdr)) { - /* done, none left */ - break; - } - ch = (struct sctp_chunkhdr *)((caddr_t)ch + SCTP_SIZE32(at)); +next_chunk: + offset += SCTP_SIZE32(chk_len); } /* Now update any rwnd --- possibly */ - if ((cp->ch.chunk_flags & SCTP_FROM_MIDDLE_BOX) == 0) { + if ((pktdrp_flags & SCTP_FROM_MIDDLE_BOX) == 0) { /* From a peer, we get a rwnd report */ uint32_t a_rwnd; @@ -4268,7 +4287,7 @@ sctp_handle_packet_dropped(struct sctp_pktdrop_chunk * } /* now middle boxes in sat networks get a cwnd bump */ - if ((cp->ch.chunk_flags & SCTP_FROM_MIDDLE_BOX) && + if ((pktdrp_flags & SCTP_FROM_MIDDLE_BOX) && (stcb->asoc.sat_t3_loss_recovery == 0) && (stcb->asoc.sat_network)) { /* From owner-svn-src-all@freebsd.org Wed Jul 8 13:40:28 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9D62B36305C; Wed, 8 Jul 2020 13:40:28 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B20mr3jd0z44xq; Wed, 8 Jul 2020 13:40:28 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5E92A21291; Wed, 8 Jul 2020 13:40:28 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068DeSx8057502; Wed, 8 Jul 2020 13:40:28 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068DeSdT057501; Wed, 8 Jul 2020 13:40:28 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007081340.068DeSdT057501@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Wed, 8 Jul 2020 13:40:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r363009 - stable/11/sys/netinet X-SVN-Group: stable-11 X-SVN-Commit-Author: markj X-SVN-Commit-Paths: stable/11/sys/netinet X-SVN-Commit-Revision: 363009 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 13:40:28 -0000 Author: markj Date: Wed Jul 8 13:40:27 2020 New Revision: 363009 URL: https://svnweb.freebsd.org/changeset/base/363009 Log: MFC r362840: Fix a possible refcount leak when handling IPSec traffic. PR: 246951 Modified: stable/11/sys/netinet/ip_input.c Modified: stable/11/sys/netinet/ip_input.c ============================================================================== --- stable/11/sys/netinet/ip_input.c Wed Jul 8 12:25:19 2020 (r363008) +++ stable/11/sys/netinet/ip_input.c Wed Jul 8 13:40:27 2020 (r363009) @@ -1023,6 +1023,8 @@ ip_forward(struct mbuf *m, int srcrt) if (IPSEC_ENABLED(ipv4)) { if ((error = IPSEC_FORWARD(ipv4, m)) != 0) { /* mbuf consumed by IPsec */ + if (ia != NULL) + ifa_free(&ia->ia_ifa); m_freem(mcopy); if (error != EINPROGRESS) IPSTAT_INC(ips_cantforward); From owner-svn-src-all@freebsd.org Wed Jul 8 15:49:30 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C0DA6365CDA; Wed, 8 Jul 2020 15:49:30 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B23dk4lRPz4DDn; Wed, 8 Jul 2020 15:49:30 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 85A2B226F4; Wed, 8 Jul 2020 15:49:30 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068FnU4t038308; Wed, 8 Jul 2020 15:49:30 GMT (envelope-from tuexen@FreeBSD.org) Received: (from tuexen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068FnUIn038307; Wed, 8 Jul 2020 15:49:30 GMT (envelope-from tuexen@FreeBSD.org) Message-Id: <202007081549.068FnUIn038307@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tuexen set sender to tuexen@FreeBSD.org using -f From: Michael Tuexen Date: Wed, 8 Jul 2020 15:49:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363010 - head/sys/netinet X-SVN-Group: head X-SVN-Commit-Author: tuexen X-SVN-Commit-Paths: head/sys/netinet X-SVN-Commit-Revision: 363010 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 15:49:30 -0000 Author: tuexen Date: Wed Jul 8 15:49:30 2020 New Revision: 363010 URL: https://svnweb.freebsd.org/changeset/base/363010 Log: Don't accept FORWARD-TSN chunks when I-FORWARD-TSN was negotiated and vice versa. MFC after: 1 week Modified: head/sys/netinet/sctp_input.c Modified: head/sys/netinet/sctp_input.c ============================================================================== --- head/sys/netinet/sctp_input.c Wed Jul 8 13:40:27 2020 (r363009) +++ head/sys/netinet/sctp_input.c Wed Jul 8 15:49:30 2020 (r363010) @@ -5089,7 +5089,8 @@ process_control_chunks: break; case SCTP_FORWARD_CUM_TSN: case SCTP_IFORWARD_CUM_TSN: - SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_FWD_TSN\n"); + SCTPDBG(SCTP_DEBUG_INPUT3, "%s\n", + ch->chunk_type == SCTP_FORWARD_CUM_TSN ? "FORWARD_TSN" : "I_FORWARD_TSN"); if (chk_length < sizeof(struct sctp_forward_tsn_chunk)) { /* Its not ours */ *offset = length; @@ -5101,6 +5102,18 @@ process_control_chunks: if (stcb->asoc.prsctp_supported == 0) { goto unknown_chunk; + } + if (((asoc->idata_supported == 1) && (ch->chunk_type == SCTP_FORWARD_CUM_TSN)) || + ((asoc->idata_supported == 0) && (ch->chunk_type == SCTP_IFORWARD_CUM_TSN))) { + if (ch->chunk_type == SCTP_FORWARD_CUM_TSN) { + SCTP_SNPRINTF(msg, sizeof(msg), "%s", "FORWARD-TSN chunk received when I-FORWARD-TSN was negotiated"); + } else { + SCTP_SNPRINTF(msg, sizeof(msg), "%s", "I-FORWARD-TSN chunk received when FORWARD-TSN was negotiated"); + } + op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); + sctp_abort_an_association(inp, stcb, op_err, SCTP_SO_NOT_LOCKED); + *offset = length; + return (NULL); } *fwd_tsn_seen = 1; if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) { From owner-svn-src-all@freebsd.org Wed Jul 8 16:04:06 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D7F6A3664DE; Wed, 8 Jul 2020 16:04:06 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B23yZ5NPrz4F5x; Wed, 8 Jul 2020 16:04:06 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9BD8C22E94; Wed, 8 Jul 2020 16:04:06 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068G46M3050656; Wed, 8 Jul 2020 16:04:06 GMT (envelope-from tuexen@FreeBSD.org) Received: (from tuexen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068G46Me050655; Wed, 8 Jul 2020 16:04:06 GMT (envelope-from tuexen@FreeBSD.org) Message-Id: <202007081604.068G46Me050655@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tuexen set sender to tuexen@FreeBSD.org using -f From: Michael Tuexen Date: Wed, 8 Jul 2020 16:04:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363011 - head/sys/netinet X-SVN-Group: head X-SVN-Commit-Author: tuexen X-SVN-Commit-Paths: head/sys/netinet X-SVN-Commit-Revision: 363011 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 16:04:06 -0000 Author: tuexen Date: Wed Jul 8 16:04:06 2020 New Revision: 363011 URL: https://svnweb.freebsd.org/changeset/base/363011 Log: Fix error description. MFC after: 1 week Modified: head/sys/netinet/sctp_indata.c Modified: head/sys/netinet/sctp_indata.c ============================================================================== --- head/sys/netinet/sctp_indata.c Wed Jul 8 15:49:30 2020 (r363010) +++ head/sys/netinet/sctp_indata.c Wed Jul 8 16:04:06 2020 (r363011) @@ -2745,7 +2745,7 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *o struct mbuf *op_err; char msg[SCTP_DIAG_INFO_LEN]; - SCTP_SNPRINTF(msg, sizeof(msg), "%s", "I-DATA chunk received when DATA was negotiated"); + SCTP_SNPRINTF(msg, sizeof(msg), "%s", "DATA chunk received when I-DATA was negotiated"); op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_20; sctp_abort_an_association(inp, stcb, op_err, SCTP_SO_NOT_LOCKED); @@ -2756,7 +2756,7 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *o struct mbuf *op_err; char msg[SCTP_DIAG_INFO_LEN]; - SCTP_SNPRINTF(msg, sizeof(msg), "%s", "DATA chunk received when I-DATA was negotiated"); + SCTP_SNPRINTF(msg, sizeof(msg), "%s", "I-DATA chunk received when DATA was negotiated"); op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_21; sctp_abort_an_association(inp, stcb, op_err, SCTP_SO_NOT_LOCKED); From owner-svn-src-all@freebsd.org Wed Jul 8 16:23:40 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DC3A3366BAE; Wed, 8 Jul 2020 16:23:40 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B24P85Vyhz4GQG; Wed, 8 Jul 2020 16:23:40 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A06502312D; Wed, 8 Jul 2020 16:23:40 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068GNemL062652; Wed, 8 Jul 2020 16:23:40 GMT (envelope-from tuexen@FreeBSD.org) Received: (from tuexen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068GNe05062651; Wed, 8 Jul 2020 16:23:40 GMT (envelope-from tuexen@FreeBSD.org) Message-Id: <202007081623.068GNe05062651@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tuexen set sender to tuexen@FreeBSD.org using -f From: Michael Tuexen Date: Wed, 8 Jul 2020 16:23:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363012 - head/sys/netinet X-SVN-Group: head X-SVN-Commit-Author: tuexen X-SVN-Commit-Paths: head/sys/netinet X-SVN-Commit-Revision: 363012 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 16:23:40 -0000 Author: tuexen Date: Wed Jul 8 16:23:40 2020 New Revision: 363012 URL: https://svnweb.freebsd.org/changeset/base/363012 Log: Improve consistency. MFC after: 1 week Modified: head/sys/netinet/sctp_input.c Modified: head/sys/netinet/sctp_input.c ============================================================================== --- head/sys/netinet/sctp_input.c Wed Jul 8 16:04:06 2020 (r363011) +++ head/sys/netinet/sctp_input.c Wed Jul 8 16:23:40 2020 (r363012) @@ -5103,8 +5103,8 @@ process_control_chunks: if (stcb->asoc.prsctp_supported == 0) { goto unknown_chunk; } - if (((asoc->idata_supported == 1) && (ch->chunk_type == SCTP_FORWARD_CUM_TSN)) || - ((asoc->idata_supported == 0) && (ch->chunk_type == SCTP_IFORWARD_CUM_TSN))) { + if (((stcb->asoc.idata_supported == 1) && (ch->chunk_type == SCTP_FORWARD_CUM_TSN)) || + ((stcb->asoc.idata_supported == 0) && (ch->chunk_type == SCTP_IFORWARD_CUM_TSN))) { if (ch->chunk_type == SCTP_FORWARD_CUM_TSN) { SCTP_SNPRINTF(msg, sizeof(msg), "%s", "FORWARD-TSN chunk received when I-FORWARD-TSN was negotiated"); } else { From owner-svn-src-all@freebsd.org Wed Jul 8 16:50:48 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B420E3675FA; Wed, 8 Jul 2020 16:50:48 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B250S48szz4J1s; Wed, 8 Jul 2020 16:50:48 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5993C23701; Wed, 8 Jul 2020 16:50:48 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068Gomhp078186; Wed, 8 Jul 2020 16:50:48 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068GolhP078184; Wed, 8 Jul 2020 16:50:47 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202007081650.068GolhP078184@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Wed, 8 Jul 2020 16:50:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363013 - head/contrib/llvm-project/clang/lib/Sema X-SVN-Group: head X-SVN-Commit-Author: dim X-SVN-Commit-Paths: head/contrib/llvm-project/clang/lib/Sema X-SVN-Commit-Revision: 363013 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 16:50:48 -0000 Author: dim Date: Wed Jul 8 16:50:47 2020 New Revision: 363013 URL: https://svnweb.freebsd.org/changeset/base/363013 Log: Merge commit 065fc1eafe7c from llvm git (by Richard Smith): PR45521: Preserve the value kind when performing a standard conversion sequence on a glvalue expression. If the sequence is supposed to perform an lvalue-to-rvalue conversion, then one will be specified as the first conversion in the sequence. Otherwise, one should not be invented. This should fix clang crashing with "can't implicitly cast lvalue to rvalue with this cast kind", followed by "UNREACHABLE executed at /usr/src/contrib/llvm-project/clang/lib/Sema/Sema.cpp:538!", when building recent versions of Ceph, and the CPAN module SYBER/Date-5.2.0. Reported by: Willem Jan Withagen , eserte12@yahoo.de PR: 245530, 247812 MFC after: 3 days Modified: head/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp head/contrib/llvm-project/clang/lib/Sema/SemaOverload.cpp Modified: head/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp ============================================================================== --- head/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp Wed Jul 8 16:23:40 2020 (r363012) +++ head/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp Wed Jul 8 16:50:47 2020 (r363013) @@ -4063,8 +4063,8 @@ Sema::PerformImplicitConversion(Expr *From, QualType T break; case ICK_Compatible_Conversion: - From = ImpCastExprToType(From, ToType, CK_NoOp, - VK_RValue, /*BasePath=*/nullptr, CCK).get(); + From = ImpCastExprToType(From, ToType, CK_NoOp, From->getValueKind(), + /*BasePath=*/nullptr, CCK).get(); break; case ICK_Writeback_Conversion: @@ -4303,11 +4303,7 @@ Sema::PerformImplicitConversion(Expr *From, QualType T break; case ICK_Qualification: { - // The qualification keeps the category of the inner expression, unless the - // target type isn't a reference. - ExprValueKind VK = - ToType->isReferenceType() ? From->getValueKind() : VK_RValue; - + ExprValueKind VK = From->getValueKind(); CastKind CK = CK_NoOp; if (ToType->isReferenceType() && Modified: head/contrib/llvm-project/clang/lib/Sema/SemaOverload.cpp ============================================================================== --- head/contrib/llvm-project/clang/lib/Sema/SemaOverload.cpp Wed Jul 8 16:23:40 2020 (r363012) +++ head/contrib/llvm-project/clang/lib/Sema/SemaOverload.cpp Wed Jul 8 16:50:47 2020 (r363013) @@ -4693,7 +4693,7 @@ TryReferenceInit(Sema &S, Expr *Init, QualType DeclTyp Sema::ReferenceConversions::NestedQualification) ? ICK_Qualification : ICK_Identity; - ICS.Standard.FromTypePtr = T2.getAsOpaquePtr(); + ICS.Standard.setFromType(T2); ICS.Standard.setToType(0, T2); ICS.Standard.setToType(1, T1); ICS.Standard.setToType(2, T1); From owner-svn-src-all@freebsd.org Wed Jul 8 17:12:13 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4D6973683A8; Wed, 8 Jul 2020 17:12:13 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B25T91PVjz4KPH; Wed, 8 Jul 2020 17:12:13 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1383023B84; Wed, 8 Jul 2020 17:12:13 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068HCCJF090456; Wed, 8 Jul 2020 17:12:12 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068HCCUV090453; Wed, 8 Jul 2020 17:12:12 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <202007081712.068HCCUV090453@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Wed, 8 Jul 2020 17:12:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363014 - in head: sys/geom/eli tests/sys/geom/class/eli X-SVN-Group: head X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: in head: sys/geom/eli tests/sys/geom/class/eli X-SVN-Commit-Revision: 363014 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 17:12:13 -0000 Author: asomers Date: Wed Jul 8 17:12:12 2020 New Revision: 363014 URL: https://svnweb.freebsd.org/changeset/base/363014 Log: geli: enable direct dispatch geli does all of its crypto operations in a separate thread pool, so g_eli_start, g_eli_read_done, and g_eli_write_done don't actually do very much work. Enabling direct dispatch eliminates the g_up/g_down bottlenecks, doubling IOPs on my system. This change does not affect the thread pool. Reviewed by: markj MFC after: 2 weeks Sponsored by: Axcient Differential Revision: https://reviews.freebsd.org/D25587 Added: head/tests/sys/geom/class/eli/reentrancy_test.sh (contents, props changed) Modified: head/sys/geom/eli/g_eli.c head/tests/sys/geom/class/eli/Makefile Modified: head/sys/geom/eli/g_eli.c ============================================================================== --- head/sys/geom/eli/g_eli.c Wed Jul 8 16:50:47 2020 (r363013) +++ head/sys/geom/eli/g_eli.c Wed Jul 8 17:12:12 2020 (r363014) @@ -734,6 +734,7 @@ g_eli_read_metadata_offset(struct g_class *mp, struct gp->orphan = g_eli_orphan_spoil_assert; gp->spoiled = g_eli_orphan_spoil_assert; cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; error = g_attach(cp, pp); if (error != 0) goto end; @@ -882,6 +883,7 @@ g_eli_create(struct gctl_req *req, struct g_class *mp, pp = NULL; cp = g_new_consumer(gp); + cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; error = g_attach(cp, bpp); if (error != 0) { if (req != NULL) { @@ -969,6 +971,7 @@ g_eli_create(struct gctl_req *req, struct g_class *mp, * Create decrypted provider. */ pp = g_new_providerf(gp, "%s%s", bpp->name, G_ELI_SUFFIX); + pp->flags |= G_PF_DIRECT_SEND | G_PF_DIRECT_RECEIVE; pp->mediasize = sc->sc_mediasize; pp->sectorsize = sc->sc_sectorsize; LIST_FOREACH(gap, &bpp->aliases, ga_next) Modified: head/tests/sys/geom/class/eli/Makefile ============================================================================== --- head/tests/sys/geom/class/eli/Makefile Wed Jul 8 16:50:47 2020 (r363013) +++ head/tests/sys/geom/class/eli/Makefile Wed Jul 8 17:12:12 2020 (r363014) @@ -17,6 +17,7 @@ ATF_TESTS_SH+= kill_test ATF_TESTS_SH+= misc_test ATF_TESTS_SH+= onetime_test ATF_TESTS_SH+= online_resize_test +ATF_TESTS_SH+= reentrancy_test ATF_TESTS_SH+= resize_test ATF_TESTS_SH+= setkey_test Added: head/tests/sys/geom/class/eli/reentrancy_test.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tests/sys/geom/class/eli/reentrancy_test.sh Wed Jul 8 17:12:12 2020 (r363014) @@ -0,0 +1,69 @@ +# $FreeBSD$ + +# Test various operations for geli-on-geli providers, to ensure that geli is +# reentrant. + +. $(atf_get_srcdir)/conf.sh + +init_test() +{ + cipher=$1 + aalgo=$2 + secsize=$3 + ealgo=${cipher%%:*} + keylen=${cipher##*:} + + atf_check dd if=/dev/random of=testdata bs=$secsize count=1 status=none + atf_check dd if=/dev/random of=keyfile bs=$secsize count=16 status=none + + # Create the lower geli device + atf_check -s exit:0 -e ignore \ + geli init -B none -a $aalgo -e $ealgo -l $keylen -P -K keyfile \ + -s $secsize ${md} + atf_check geli attach -p -k keyfile ${md} + # Create the upper geli device + atf_check -s exit:0 -e ignore \ + geli init -B none -a $aalgo -e $ealgo -l $keylen -P -K keyfile \ + -s $secsize ${md}.eli + atf_check geli attach -p -k keyfile ${md}.eli + echo ${md} > layered_md_device + + # Ensure we can read and write. + atf_check dd if=testdata of=/dev/${md}.eli.eli bs=$secsize count=1 \ + status=none + atf_check dd if=/dev/${md}.eli.eli of=cmpdata bs=$secsize count=1 \ + status=none + atf_check cmp -s testdata cmpdata + + geli detach ${md}.eli 2>/dev/null +} + +atf_test_case init cleanup +init_head() +{ + atf_set "descr" "Initialize a geli provider on top of another" + atf_set "require.user" "root" + atf_set "timeout" 600 +} +init_body() +{ + sectors=2 + geli_test_setup + + for_each_geli_config init_test +} +init_cleanup() +{ + if [ -f layered_md_device ]; then + while read provider; do + [ -c /dev/${md}.eli.eli ] && \ + geli detach $md.eli.eli 2>/dev/null + done < layered_md_device + fi + geli_test_cleanup +} + +atf_init_test_cases() +{ + atf_add_test_case init +} From owner-svn-src-all@freebsd.org Wed Jul 8 17:14:45 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 86DAB3684F3; Wed, 8 Jul 2020 17:14:45 +0000 (UTC) (envelope-from manu@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B25X536f7z4KTY; Wed, 8 Jul 2020 17:14:45 +0000 (UTC) (envelope-from manu@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4D97223760; Wed, 8 Jul 2020 17:14:45 +0000 (UTC) (envelope-from manu@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068HEjZX094099; Wed, 8 Jul 2020 17:14:45 GMT (envelope-from manu@FreeBSD.org) Received: (from manu@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068HEjkK094098; Wed, 8 Jul 2020 17:14:45 GMT (envelope-from manu@FreeBSD.org) Message-Id: <202007081714.068HEjkK094098@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: manu set sender to manu@FreeBSD.org using -f From: Emmanuel Vadot Date: Wed, 8 Jul 2020 17:14:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363015 - head/sys/dev/extres/syscon X-SVN-Group: head X-SVN-Commit-Author: manu X-SVN-Commit-Paths: head/sys/dev/extres/syscon X-SVN-Commit-Revision: 363015 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 17:14:45 -0000 Author: manu Date: Wed Jul 8 17:14:44 2020 New Revision: 363015 URL: https://svnweb.freebsd.org/changeset/base/363015 Log: extres/syscon_generic: Make device quiet if not in boot verbose On some boards there is a lot of of syscon node that are unused as more specific drivers is probed before, no need to flood the console for the mostly-unused generic ones. MFC after: 1 week Modified: head/sys/dev/extres/syscon/syscon_generic.c Modified: head/sys/dev/extres/syscon/syscon_generic.c ============================================================================== --- head/sys/dev/extres/syscon/syscon_generic.c Wed Jul 8 17:12:12 2020 (r363014) +++ head/sys/dev/extres/syscon/syscon_generic.c Wed Jul 8 17:14:44 2020 (r363015) @@ -142,6 +142,9 @@ syscon_generic_probe(device_t dev) return (ENXIO); device_set_desc(dev, "syscon"); + if (!bootverbose) + device_quiet(dev); + return (BUS_PROBE_GENERIC); } From owner-svn-src-all@freebsd.org Wed Jul 8 17:59:03 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id A74073691A2; Wed, 8 Jul 2020 17:59:03 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B26WC3t6gz4MS0; Wed, 8 Jul 2020 17:59:03 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 64D4B23EE9; Wed, 8 Jul 2020 17:59:03 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068Hx39O019385; Wed, 8 Jul 2020 17:59:03 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068Hx1wq019373; Wed, 8 Jul 2020 17:59:01 GMT (envelope-from mav@FreeBSD.org) Message-Id: <202007081759.068Hx1wq019373@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 8 Jul 2020 17:59:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363016 - in stable/12/sys: dev/aac dev/bge dev/isci dev/pci dev/twa x86/iommu X-SVN-Group: stable-12 X-SVN-Commit-Author: mav X-SVN-Commit-Paths: in stable/12/sys: dev/aac dev/bge dev/isci dev/pci dev/twa x86/iommu X-SVN-Commit-Revision: 363016 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 17:59:03 -0000 Author: mav Date: Wed Jul 8 17:59:00 2020 New Revision: 363016 URL: https://svnweb.freebsd.org/changeset/base/363016 Log: MFC r346386, r347890, r347896, r349895: remove the 4GB boundary requirement on PCI DMA segments Modified: stable/12/sys/dev/aac/aac_pci.c stable/12/sys/dev/bge/if_bge.c stable/12/sys/dev/bge/if_bgereg.h stable/12/sys/dev/isci/isci.c stable/12/sys/dev/isci/isci.h stable/12/sys/dev/isci/isci_controller.c stable/12/sys/dev/pci/pci.c stable/12/sys/dev/pci/pcivar.h stable/12/sys/dev/twa/tw_osl.h stable/12/sys/dev/twa/tw_osl_freebsd.c stable/12/sys/x86/iommu/intel_ctx.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/aac/aac_pci.c ============================================================================== --- stable/12/sys/dev/aac/aac_pci.c Wed Jul 8 17:14:44 2020 (r363015) +++ stable/12/sys/dev/aac/aac_pci.c Wed Jul 8 17:59:00 2020 (r363016) @@ -443,7 +443,8 @@ aac_pci_attach(device_t dev) * Note that some of these controllers are 64-bit capable. */ if (bus_dma_tag_create(bus_get_dma_tag(dev), /* parent */ - PAGE_SIZE, 0, /* algnmnt, boundary */ + PAGE_SIZE, /* algnmnt */ + ((bus_size_t)((uint64_t)1 << 32)), /* boundary*/ BUS_SPACE_MAXADDR, /* lowaddr */ BUS_SPACE_MAXADDR, /* highaddr */ NULL, NULL, /* filter, filterarg */ Modified: stable/12/sys/dev/bge/if_bge.c ============================================================================== --- stable/12/sys/dev/bge/if_bge.c Wed Jul 8 17:14:44 2020 (r363015) +++ stable/12/sys/dev/bge/if_bge.c Wed Jul 8 17:59:00 2020 (r363016) @@ -2927,10 +2927,14 @@ bge_dma_ring_alloc(struct bge_softc *sc, bus_size_t al bus_addr_t *paddr, const char *msg) { struct bge_dmamap_arg ctx; + bus_addr_t lowaddr; + bus_size_t ring_end; int error; + lowaddr = BUS_SPACE_MAXADDR; +again: error = bus_dma_tag_create(sc->bge_cdata.bge_parent_tag, - alignment, 0, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, + alignment, 0, lowaddr, BUS_SPACE_MAXADDR, NULL, NULL, maxsize, 1, maxsize, 0, NULL, NULL, tag); if (error != 0) { device_printf(sc->bge_dev, @@ -2955,6 +2959,25 @@ bge_dma_ring_alloc(struct bge_softc *sc, bus_size_t al return (ENOMEM); } *paddr = ctx.bge_busaddr; + ring_end = *paddr + maxsize; + if ((sc->bge_flags & BGE_FLAG_4G_BNDRY_BUG) != 0 && + BGE_ADDR_HI(*paddr) != BGE_ADDR_HI(ring_end)) { + /* + * 4GB boundary crossed. Limit maximum allowable DMA + * address space to 32bit and try again. + */ + bus_dmamap_unload(*tag, *map); + bus_dmamem_free(*tag, *ring, *map); + bus_dma_tag_destroy(*tag); + if (bootverbose) + device_printf(sc->bge_dev, "4GB boundary crossed, " + "limit DMA address space to 32bit for %s\n", msg); + *ring = NULL; + *tag = NULL; + *map = NULL; + lowaddr = BUS_SPACE_MAXADDR_32BIT; + goto again; + } return (0); } @@ -2962,7 +2985,7 @@ static int bge_dma_alloc(struct bge_softc *sc) { bus_addr_t lowaddr; - bus_size_t rxmaxsegsz, sbsz, txsegsz, txmaxsegsz; + bus_size_t boundary, sbsz, rxmaxsegsz, txsegsz, txmaxsegsz; int i, error; lowaddr = BUS_SPACE_MAXADDR; @@ -3049,7 +3072,9 @@ bge_dma_alloc(struct bge_softc *sc) } /* Create parent tag for buffers. */ + boundary = 0; if ((sc->bge_flags & BGE_FLAG_4G_BNDRY_BUG) != 0) { + boundary = BGE_DMA_BNDRY; /* * XXX * watchdog timeout issue was observed on BCM5704 which @@ -3060,10 +3085,10 @@ bge_dma_alloc(struct bge_softc *sc) if (sc->bge_pcixcap != 0) lowaddr = BUS_SPACE_MAXADDR_32BIT; } - error = bus_dma_tag_create(bus_get_dma_tag(sc->bge_dev), 1, 0, lowaddr, - BUS_SPACE_MAXADDR, NULL, NULL, BUS_SPACE_MAXSIZE_32BIT, 0, - BUS_SPACE_MAXSIZE_32BIT, 0, NULL, NULL, - &sc->bge_cdata.bge_buffer_tag); + error = bus_dma_tag_create(bus_get_dma_tag(sc->bge_dev), + 1, boundary, lowaddr, BUS_SPACE_MAXADDR, NULL, + NULL, BUS_SPACE_MAXSIZE_32BIT, 0, BUS_SPACE_MAXSIZE_32BIT, + 0, NULL, NULL, &sc->bge_cdata.bge_buffer_tag); if (error != 0) { device_printf(sc->bge_dev, "could not allocate buffer dma tag\n"); Modified: stable/12/sys/dev/bge/if_bgereg.h ============================================================================== --- stable/12/sys/dev/bge/if_bgereg.h Wed Jul 8 17:14:44 2020 (r363015) +++ stable/12/sys/dev/bge/if_bgereg.h Wed Jul 8 17:59:00 2020 (r363016) @@ -2866,6 +2866,12 @@ struct bge_gib { #define BGE_DMA_MAXADDR 0xFFFFFFFFFF #endif +#if (BUS_SPACE_MAXSIZE > 0xFFFFFFFF) +#define BGE_DMA_BNDRY 0x100000000 +#else +#define BGE_DMA_BNDRY 0 +#endif + /* * Ring structures. Most of these reside in host memory and we tell * the NIC where they are via the ring control blocks. The exceptions @@ -3067,3 +3073,11 @@ struct bge_softc { #define BGE_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->bge_mtx, MA_OWNED) #define BGE_UNLOCK(_sc) mtx_unlock(&(_sc)->bge_mtx) #define BGE_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->bge_mtx) + +#ifdef BUS_SPACE_MAXADDR +#if (BUS_SPACE_MAXADDR > 0xFFFFFFFF) +#define BGE_DMA_BOUNDARY (0x100000000) +#else +#define BGE_DMA_BOUNDARY 0 +#endif +#endif Modified: stable/12/sys/dev/isci/isci.c ============================================================================== --- stable/12/sys/dev/isci/isci.c Wed Jul 8 17:14:44 2020 (r363015) +++ stable/12/sys/dev/isci/isci.c Wed Jul 8 17:59:00 2020 (r363016) @@ -414,7 +414,8 @@ isci_allocate_dma_buffer(device_t device, struct ISCI_ uint32_t status; status = bus_dma_tag_create(bus_get_dma_tag(device), - 0x40 /* cacheline alignment */, 0x0, BUS_SPACE_MAXADDR, + 0x40 /* cacheline alignment */, + ISCI_DMA_BOUNDARY, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL, memory->size, 0x1 /* we want physically contiguous */, memory->size, 0, busdma_lock_mutex, &controller->lock, Modified: stable/12/sys/dev/isci/isci.h ============================================================================== --- stable/12/sys/dev/isci/isci.h Wed Jul 8 17:14:44 2020 (r363015) +++ stable/12/sys/dev/isci/isci.h Wed Jul 8 17:59:00 2020 (r363016) @@ -75,6 +75,9 @@ #define ISCI_NUM_PCI_BARS 2 #define ISCI_MAX_LUN 8 +/* This device cannot DMA across a 4GB boundary */ +#define ISCI_DMA_BOUNDARY ((bus_addr_t)((uint64_t)1 << 32)) + MALLOC_DECLARE(M_ISCI); struct ISCI_TIMER { Modified: stable/12/sys/dev/isci/isci_controller.c ============================================================================== --- stable/12/sys/dev/isci/isci_controller.c Wed Jul 8 17:14:44 2020 (r363015) +++ stable/12/sys/dev/isci/isci_controller.c Wed Jul 8 17:59:00 2020 (r363016) @@ -477,9 +477,9 @@ int isci_controller_allocate_memory(struct ISCI_CONTRO * will enable better performance than creating the DMA maps every time we get * an I/O. */ - status = bus_dma_tag_create(bus_get_dma_tag(device), 0x1, 0x0, - BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL, - isci_io_request_get_max_io_size(), + status = bus_dma_tag_create(bus_get_dma_tag(device), 0x1, + ISCI_DMA_BOUNDARY, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, + NULL, NULL, isci_io_request_get_max_io_size(), SCI_MAX_SCATTER_GATHER_ELEMENTS, max_segment_size, 0, busdma_lock_mutex, &controller->lock, &controller->buffer_dma_tag); Modified: stable/12/sys/dev/pci/pci.c ============================================================================== --- stable/12/sys/dev/pci/pci.c Wed Jul 8 17:14:44 2020 (r363015) +++ stable/12/sys/dev/pci/pci.c Wed Jul 8 17:59:00 2020 (r363016) @@ -4345,9 +4345,6 @@ pci_attach_common(device_t dev) { struct pci_softc *sc; int busno, domain; -#ifdef PCI_DMA_BOUNDARY - int error, tag_valid; -#endif #ifdef PCI_RES_BUS int rid; #endif @@ -4367,23 +4364,7 @@ pci_attach_common(device_t dev) if (bootverbose) device_printf(dev, "domain=%d, physical bus=%d\n", domain, busno); -#ifdef PCI_DMA_BOUNDARY - tag_valid = 0; - if (device_get_devclass(device_get_parent(device_get_parent(dev))) != - devclass_find("pci")) { - error = bus_dma_tag_create(bus_get_dma_tag(dev), 1, - PCI_DMA_BOUNDARY, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, - NULL, NULL, BUS_SPACE_MAXSIZE, BUS_SPACE_UNRESTRICTED, - BUS_SPACE_MAXSIZE, 0, NULL, NULL, &sc->sc_dma_tag); - if (error) - device_printf(dev, "Failed to create DMA tag: %d\n", - error); - else - tag_valid = 1; - } - if (!tag_valid) -#endif - sc->sc_dma_tag = bus_get_dma_tag(dev); + sc->sc_dma_tag = bus_get_dma_tag(dev); return (0); } Modified: stable/12/sys/dev/pci/pcivar.h ============================================================================== --- stable/12/sys/dev/pci/pcivar.h Wed Jul 8 17:14:44 2020 (r363015) +++ stable/12/sys/dev/pci/pcivar.h Wed Jul 8 17:59:00 2020 (r363016) @@ -686,14 +686,6 @@ int pcie_link_reset(device_t port, int pcie_location); void pci_print_faulted_dev(void); -#ifdef BUS_SPACE_MAXADDR -#if (BUS_SPACE_MAXADDR > 0xFFFFFFFF) -#define PCI_DMA_BOUNDARY 0x100000000 -#else -#define PCI_DMA_BOUNDARY 0 -#endif -#endif - #endif /* _SYS_BUS_H_ */ /* Modified: stable/12/sys/dev/twa/tw_osl.h ============================================================================== --- stable/12/sys/dev/twa/tw_osl.h Wed Jul 8 17:14:44 2020 (r363015) +++ stable/12/sys/dev/twa/tw_osl.h Wed Jul 8 17:59:00 2020 (r363016) @@ -57,6 +57,12 @@ #define TW_OSLI_MAX_NUM_IOS (TW_OSLI_MAX_NUM_REQUESTS - 2) #define TW_OSLI_MAX_NUM_AENS 0x100 +#ifdef PAE +#define TW_OSLI_DMA_BOUNDARY (1u << 31) +#else +#define TW_OSLI_DMA_BOUNDARY ((bus_size_t)((uint64_t)1 << 32)) +#endif + /* Possible values of req->state. */ #define TW_OSLI_REQ_STATE_INIT 0x0 /* being initialized */ #define TW_OSLI_REQ_STATE_BUSY 0x1 /* submitted to CL */ Modified: stable/12/sys/dev/twa/tw_osl_freebsd.c ============================================================================== --- stable/12/sys/dev/twa/tw_osl_freebsd.c Wed Jul 8 17:14:44 2020 (r363015) +++ stable/12/sys/dev/twa/tw_osl_freebsd.c Wed Jul 8 17:59:00 2020 (r363016) @@ -551,7 +551,7 @@ tw_osli_alloc_mem(struct twa_softc *sc) /* Create the parent dma tag. */ if (bus_dma_tag_create(bus_get_dma_tag(sc->bus_dev), /* parent */ sc->alignment, /* alignment */ - 0, /* boundary */ + TW_OSLI_DMA_BOUNDARY, /* boundary */ BUS_SPACE_MAXADDR, /* lowaddr */ BUS_SPACE_MAXADDR, /* highaddr */ NULL, NULL, /* filter, filterarg */ Modified: stable/12/sys/x86/iommu/intel_ctx.c ============================================================================== --- stable/12/sys/x86/iommu/intel_ctx.c Wed Jul 8 17:14:44 2020 (r363015) +++ stable/12/sys/x86/iommu/intel_ctx.c Wed Jul 8 17:59:00 2020 (r363016) @@ -130,7 +130,7 @@ ctx_tag_init(struct dmar_ctx *ctx, device_t dev) maxaddr = MIN(ctx->domain->end, BUS_SPACE_MAXADDR); ctx->ctx_tag.common.ref_count = 1; /* Prevent free */ ctx->ctx_tag.common.impl = &bus_dma_dmar_impl; - ctx->ctx_tag.common.boundary = PCI_DMA_BOUNDARY; + ctx->ctx_tag.common.boundary = 0; ctx->ctx_tag.common.lowaddr = maxaddr; ctx->ctx_tag.common.highaddr = maxaddr; ctx->ctx_tag.common.maxsize = maxaddr; From owner-svn-src-all@freebsd.org Wed Jul 8 18:29:08 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 155CE369C1C; Wed, 8 Jul 2020 18:29:08 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B279v6ncsz4PCp; Wed, 8 Jul 2020 18:29:07 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C911F24343; Wed, 8 Jul 2020 18:29:07 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068IT7sg037425; Wed, 8 Jul 2020 18:29:07 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068IT7LP037422; Wed, 8 Jul 2020 18:29:07 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <202007081829.068IT7LP037422@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Wed, 8 Jul 2020 18:29:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363017 - in stable/12: . bin/csh lib/libc/sys sys/kern X-SVN-Group: stable-12 X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: in stable/12: . bin/csh lib/libc/sys sys/kern X-SVN-Commit-Revision: 363017 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 18:29:08 -0000 Author: kevans Date: Wed Jul 8 18:29:06 2020 New Revision: 363017 URL: https://svnweb.freebsd.org/changeset/base/363017 Log: MFC r361798, r361800: vfs: default disallow read(2) of a directory This MFC is in accordance with the original MFC plan outlined in the commit message for r361798, appearing in full (with exception to metadata) below. To summarize: this MFC only merges back the sysctl with a default disallow policy, as in head, to ensure we hit any issues quickly but in a fashion that end users can easily revert. Interested parties can flip the security.bsd.allow_read_dir sysctl back to 1 to fully honor the previous behavior of allowing read(2) of any dir, filesystem permitting. r361798: vfs: add restrictions to read(2) of a directory [1/2] Historically, we've allowed read() of a directory and some filesystems will accommodate (e.g. ufs/ffs, msdosfs). From the history department staffed by Warner: <uio_rw == UIO_READ ? vn_read : vn_write; vp = fp->f_vnode; + + /* + * The ability to read(2) on a directory has historically been + * allowed for all users, but this can and has been the source of + * at least one security issue in the past. As such, it is now hidden + * away behind a sysctl for those that actually need it to use it. + */ + if (vp->v_type == VDIR) { + KASSERT(uio->uio_rw == UIO_READ, + ("illegal write attempted on a directory")); + if (!vfs_allow_read_dir) + return (EISDIR); + } + foffset_lock_uio(fp, uio, flags); if (do_vn_io_fault(vp, uio)) { args.kind = VN_IO_FAULT_FOP; From owner-svn-src-all@freebsd.org Wed Jul 8 18:32:17 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id F0690369CB8; Wed, 8 Jul 2020 18:32:17 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B27FY5NQdz4Pqm; Wed, 8 Jul 2020 18:32:17 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9BFFE2493C; Wed, 8 Jul 2020 18:32:17 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068IWH5X043484; Wed, 8 Jul 2020 18:32:17 GMT (envelope-from sjg@FreeBSD.org) Received: (from sjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068IWFaf043470; Wed, 8 Jul 2020 18:32:15 GMT (envelope-from sjg@FreeBSD.org) Message-Id: <202007081832.068IWFaf043470@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sjg set sender to sjg@FreeBSD.org using -f From: "Simon J. Gerraty" Date: Wed, 8 Jul 2020 18:32:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r363018 - in vendor/NetBSD/bmake/dist: . lst.lib unit-tests X-SVN-Group: vendor X-SVN-Commit-Author: sjg X-SVN-Commit-Paths: in vendor/NetBSD/bmake/dist: . lst.lib unit-tests X-SVN-Commit-Revision: 363018 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 18:32:18 -0000 Author: sjg Date: Wed Jul 8 18:32:15 2020 New Revision: 363018 URL: https://svnweb.freebsd.org/changeset/base/363018 Log: Import bmake-20200704 from ChangeLog: (most of this by rillig@) o lots of style and white-space cleanup o lots more unit tests for variable modifiers o simplified description of some functions o str.c: refactor Str_Match o var.c: debugging output for :@ constify VarModify parameter fix :hash modifier on 16-bit platforms remove unnecessary forward declarations refactor ApplyModifier_SysV to have less indentation simplify code for :E and :R clean up code for :H and :T refactor ApplyModifiers * var.c: we need stdint.h on some platforms to get uint32_t * unit-test/Makefile: we need to supress the specific error for RE substitution error in modmisc, since it varies accross different OS. Modified: vendor/NetBSD/bmake/dist/ChangeLog vendor/NetBSD/bmake/dist/VERSION vendor/NetBSD/bmake/dist/arch.c vendor/NetBSD/bmake/dist/buf.c vendor/NetBSD/bmake/dist/compat.c vendor/NetBSD/bmake/dist/cond.c vendor/NetBSD/bmake/dist/dir.c vendor/NetBSD/bmake/dist/for.c vendor/NetBSD/bmake/dist/hash.c vendor/NetBSD/bmake/dist/hash.h vendor/NetBSD/bmake/dist/job.c vendor/NetBSD/bmake/dist/job.h vendor/NetBSD/bmake/dist/lst.lib/lstAppend.c vendor/NetBSD/bmake/dist/lst.lib/lstAtEnd.c vendor/NetBSD/bmake/dist/lst.lib/lstAtFront.c vendor/NetBSD/bmake/dist/lst.lib/lstClose.c vendor/NetBSD/bmake/dist/lst.lib/lstConcat.c vendor/NetBSD/bmake/dist/lst.lib/lstDatum.c vendor/NetBSD/bmake/dist/lst.lib/lstDeQueue.c vendor/NetBSD/bmake/dist/lst.lib/lstDupl.c vendor/NetBSD/bmake/dist/lst.lib/lstEnQueue.c vendor/NetBSD/bmake/dist/lst.lib/lstFind.c vendor/NetBSD/bmake/dist/lst.lib/lstFindFrom.c vendor/NetBSD/bmake/dist/lst.lib/lstFirst.c vendor/NetBSD/bmake/dist/lst.lib/lstForEach.c vendor/NetBSD/bmake/dist/lst.lib/lstForEachFrom.c vendor/NetBSD/bmake/dist/lst.lib/lstInit.c vendor/NetBSD/bmake/dist/lst.lib/lstInsert.c vendor/NetBSD/bmake/dist/lst.lib/lstIsAtEnd.c vendor/NetBSD/bmake/dist/lst.lib/lstIsEmpty.c vendor/NetBSD/bmake/dist/lst.lib/lstLast.c vendor/NetBSD/bmake/dist/lst.lib/lstNext.c vendor/NetBSD/bmake/dist/lst.lib/lstOpen.c vendor/NetBSD/bmake/dist/lst.lib/lstPrev.c vendor/NetBSD/bmake/dist/lst.lib/lstRemove.c vendor/NetBSD/bmake/dist/lst.lib/lstReplace.c vendor/NetBSD/bmake/dist/lst.lib/lstSucc.c vendor/NetBSD/bmake/dist/main.c vendor/NetBSD/bmake/dist/make.c vendor/NetBSD/bmake/dist/make.h vendor/NetBSD/bmake/dist/make_malloc.c vendor/NetBSD/bmake/dist/meta.c vendor/NetBSD/bmake/dist/meta.h vendor/NetBSD/bmake/dist/nonints.h vendor/NetBSD/bmake/dist/parse.c vendor/NetBSD/bmake/dist/str.c vendor/NetBSD/bmake/dist/suff.c vendor/NetBSD/bmake/dist/targ.c vendor/NetBSD/bmake/dist/trace.c vendor/NetBSD/bmake/dist/unit-tests/Makefile vendor/NetBSD/bmake/dist/unit-tests/cond-short.exp vendor/NetBSD/bmake/dist/unit-tests/cond-short.mk vendor/NetBSD/bmake/dist/unit-tests/modmisc.exp vendor/NetBSD/bmake/dist/unit-tests/modmisc.mk vendor/NetBSD/bmake/dist/unit-tests/sysv.exp vendor/NetBSD/bmake/dist/unit-tests/sysv.mk vendor/NetBSD/bmake/dist/unit-tests/varmisc.exp vendor/NetBSD/bmake/dist/unit-tests/varmisc.mk vendor/NetBSD/bmake/dist/util.c vendor/NetBSD/bmake/dist/var.c Modified: vendor/NetBSD/bmake/dist/ChangeLog ============================================================================== --- vendor/NetBSD/bmake/dist/ChangeLog Wed Jul 8 18:29:06 2020 (r363017) +++ vendor/NetBSD/bmake/dist/ChangeLog Wed Jul 8 18:32:15 2020 (r363018) @@ -1,3 +1,42 @@ +2020-07-04 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200704 + Merge with NetBSD make, pick up + (most of this by rillig@) + o lots of style and white-space cleanup + o lots more unit tests for variable modifiers + o simplified description of some functions + o str.c: refactor Str_Match + o var.c: debugging output for :@ + constify VarModify parameter + fix :hash modifier on 16-bit platforms + remove unnecessary forward declarations + refactor ApplyModifier_SysV to have less indentation + simplify code for :E and :R + clean up code for :H and :T + refactor ApplyModifiers + + * var.c: we need stdint.h on some platforms to get uint32_t + * unit-test/Makefile: we need to supress the specific error + for RE substitution error in modmisc, since it varies accross + different OS. + +2020-07-02 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200702 + Merge with NetBSD make, pick up + o var.c: more improvements to avoiding unnecessary evaluation + use enums for flags + o remove flags arg to Var_Set which outside of var.c is always 0 + +2020-07-01 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200701 + Merge with NetBSD make, pick up + o var.c: with change to cond.c; ensure that nested variables + within a variable name are expanded. + o unit-tests/varmisc.mk: test for nested varname + 2020-06-29 Simon J Gerraty * VERSION (_MAKE_VERSION): 20200629 Modified: vendor/NetBSD/bmake/dist/VERSION ============================================================================== --- vendor/NetBSD/bmake/dist/VERSION Wed Jul 8 18:29:06 2020 (r363017) +++ vendor/NetBSD/bmake/dist/VERSION Wed Jul 8 18:32:15 2020 (r363018) @@ -1,2 +1,2 @@ # keep this compatible with sh and make -_MAKE_VERSION=20200629 +_MAKE_VERSION=20200704 Modified: vendor/NetBSD/bmake/dist/arch.c ============================================================================== --- vendor/NetBSD/bmake/dist/arch.c Wed Jul 8 18:29:06 2020 (r363017) +++ vendor/NetBSD/bmake/dist/arch.c Wed Jul 8 18:32:15 2020 (r363018) @@ -1,4 +1,4 @@ -/* $NetBSD: arch.c,v 1.71 2019/10/05 23:35:57 mrg Exp $ */ +/* $NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: arch.c,v 1.71 2019/10/05 23:35:57 mrg Exp $"; +static char rcsid[] = "$NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)arch.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: arch.c,v 1.71 2019/10/05 23:35:57 mrg Exp $"); +__RCSID("$NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -312,7 +312,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * free(freeIt); if (result == var_Error) { - return(FAILURE); + return FAILURE; } else { subLibName = TRUE; } @@ -354,7 +354,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * free(freeIt); if (result == var_Error) { - return(FAILURE); + return FAILURE; } else { doSubst = TRUE; } @@ -372,7 +372,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * */ if (*cp == '\0') { printf("No closing parenthesis in archive specification\n"); - return (FAILURE); + return FAILURE; } /* @@ -426,7 +426,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * if (gn == NULL) { free(buf); - return(FAILURE); + return FAILURE; } else { gn->type |= OP_ARCHV; (void)Lst_AtEnd(nodeLst, gn); @@ -437,7 +437,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * * ourselves. */ free(buf); - return(FAILURE); + return FAILURE; } /* * Free buffer and continue with our work. @@ -461,7 +461,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * gn = Targ_FindNode(nameBuf, TARG_CREATE); if (gn == NULL) { free(nameBuf); - return (FAILURE); + return FAILURE; } else { /* * We've found the node, but have to make sure the rest of @@ -483,7 +483,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * gn = Targ_FindNode(nameBuf, TARG_CREATE); free(nameBuf); if (gn == NULL) { - return (FAILURE); + return FAILURE; } else { /* * We've found the node, but have to make sure the rest of the @@ -520,7 +520,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * } while (*cp != '\0' && isspace ((unsigned char)*cp)); *linePtr = cp; - return (SUCCESS); + return SUCCESS; } /*- @@ -544,7 +544,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * static int ArchFindArchive(const void *ar, const void *archName) { - return (strcmp(archName, ((const Arch *)ar)->name)); + return strcmp(archName, ((const Arch *)ar)->name); } /*- @@ -602,7 +602,7 @@ ArchStatMember(char *archive, char *member, Boolean ha he = Hash_FindEntry(&ar->members, member); if (he != NULL) { - return ((struct ar_hdr *)Hash_GetValue(he)); + return (struct ar_hdr *)Hash_GetValue(he); } else { /* Try truncated name */ char copy[AR_MAX_NAME_LEN+1]; @@ -614,7 +614,7 @@ ArchStatMember(char *archive, char *member, Boolean ha copy[AR_MAX_NAME_LEN] = '\0'; } if ((he = Hash_FindEntry(&ar->members, copy)) != NULL) - return ((struct ar_hdr *)Hash_GetValue(he)); + return (struct ar_hdr *)Hash_GetValue(he); return NULL; } } @@ -635,7 +635,7 @@ ArchStatMember(char *archive, char *member, Boolean ha return NULL; } else { fclose(arch); - return (&sarh); + return &sarh; } } @@ -753,7 +753,7 @@ ArchStatMember(char *archive, char *member, Boolean ha he = Hash_FindEntry(&ar->members, member); if (he != NULL) { - return ((struct ar_hdr *)Hash_GetValue(he)); + return (struct ar_hdr *)Hash_GetValue(he); } else { return NULL; } @@ -962,7 +962,7 @@ ArchFindMember(char *archive, char *member, struct ar_ fclose(arch); return NULL; } - return (arch); + return arch; } } else #ifdef AR_EFMT1 @@ -996,7 +996,7 @@ ArchFindMember(char *archive, char *member, struct ar_ fclose(arch); return NULL; } - return (arch); + return arch; } if (fseek(arch, -elen, SEEK_CUR) != 0) { fclose(arch); @@ -1152,7 +1152,7 @@ Arch_MTime(GNode *gn) } gn->mtime = modTime; - return (modTime); + return modTime; } /*- @@ -1179,7 +1179,7 @@ Arch_MemMTime(GNode *gn) if (Lst_Open(gn->parents) != SUCCESS) { gn->mtime = 0; - return (0); + return 0; } while ((ln = Lst_Next(gn->parents)) != NULL) { pgn = (GNode *)Lst_Datum(ln); @@ -1211,7 +1211,7 @@ Arch_MemMTime(GNode *gn) Lst_Close(gn->parents); - return (gn->mtime); + return gn->mtime; } /*- @@ -1252,9 +1252,9 @@ Arch_FindLib(GNode *gn, Lst path) free(libName); #ifdef LIBRARIES - Var_Set(TARGET, gn->name, gn, 0); + Var_Set(TARGET, gn->name, gn); #else - Var_Set(TARGET, gn->path == NULL ? gn->name : gn->path, gn, 0); + Var_Set(TARGET, gn->path == NULL ? gn->name : gn->path, gn); #endif /* LIBRARIES */ } @@ -1337,7 +1337,7 @@ Arch_LibOODate(GNode *gn) oodate = FALSE; #endif } - return (oodate); + return oodate; } /*- Modified: vendor/NetBSD/bmake/dist/buf.c ============================================================================== --- vendor/NetBSD/bmake/dist/buf.c Wed Jul 8 18:29:06 2020 (r363017) +++ vendor/NetBSD/bmake/dist/buf.c Wed Jul 8 18:32:15 2020 (r363018) @@ -1,4 +1,4 @@ -/* $NetBSD: buf.c,v 1.25 2012/04/24 20:26:58 sjg Exp $ */ +/* $NetBSD: buf.c,v 1.26 2020/07/03 08:02:55 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: buf.c,v 1.25 2012/04/24 20:26:58 sjg Exp $"; +static char rcsid[] = "$NetBSD: buf.c,v 1.26 2020/07/03 08:02:55 rillig Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)buf.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: buf.c,v 1.25 2012/04/24 20:26:58 sjg Exp $"); +__RCSID("$NetBSD: buf.c,v 1.26 2020/07/03 08:02:55 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -160,7 +160,7 @@ Buf_GetAll(Buffer *bp, int *numBytesPtr) if (numBytesPtr != NULL) *numBytesPtr = bp->count; - return (bp->buffer); + return bp->buffer; } /*- Modified: vendor/NetBSD/bmake/dist/compat.c ============================================================================== --- vendor/NetBSD/bmake/dist/compat.c Wed Jul 8 18:29:06 2020 (r363017) +++ vendor/NetBSD/bmake/dist/compat.c Wed Jul 8 18:32:15 2020 (r363018) @@ -1,4 +1,4 @@ -/* $NetBSD: compat.c,v 1.110 2020/01/19 19:42:32 riastradh Exp $ */ +/* $NetBSD: compat.c,v 1.113 2020/07/03 08:13:23 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: compat.c,v 1.110 2020/01/19 19:42:32 riastradh Exp $"; +static char rcsid[] = "$NetBSD: compat.c,v 1.113 2020/07/03 08:13:23 rillig Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)compat.c 8.2 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: compat.c,v 1.110 2020/01/19 19:42:32 riastradh Exp $"); +__RCSID("$NetBSD: compat.c,v 1.113 2020/07/03 08:13:23 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -236,7 +236,7 @@ CompatRunCommand(void *cmdp, void *gnp) silent = gn->type & OP_SILENT; errCheck = !(gn->type & OP_IGNORE); doIt = FALSE; - + cmdNode = Lst_Member(gn->commands, cmd); cmdStart = Var_Subst(NULL, cmd, gn, VARF_WANTRES); @@ -249,18 +249,18 @@ CompatRunCommand(void *cmdp, void *gnp) if (*cmdStart == '\0') { free(cmdStart); - return(0); + return 0; } cmd = cmdStart; Lst_Replace(cmdNode, cmdStart); if ((gn->type & OP_SAVE_CMDS) && (gn != ENDNode)) { (void)Lst_AtEnd(ENDNode->commands, cmdStart); - return(0); + return 0; } if (strcmp(cmdStart, "...") == 0) { gn->type |= OP_SAVE_CMDS; - return(0); + return 0; } while ((*cmd == '@') || (*cmd == '-') || (*cmd == '+')) { @@ -287,7 +287,7 @@ CompatRunCommand(void *cmdp, void *gnp) * If we did not end up with a command, just skip it. */ if (!*cmd) - return (0); + return 0; #if !defined(MAKE_NATIVE) /* @@ -307,7 +307,7 @@ CompatRunCommand(void *cmdp, void *gnp) * go to the shell. Therefore treat '=' and ':' like shell * meta characters as documented in make(1). */ - + useShell = needshell(cmd, FALSE); #endif @@ -325,7 +325,7 @@ CompatRunCommand(void *cmdp, void *gnp) * we go... */ if (!doIt && NoExecute(gn)) { - return (0); + return 0; } if (DEBUG(JOB)) fprintf(debug_file, "Execute: '%s'\n", cmd); @@ -377,7 +377,7 @@ again: meta_compat_start(); } #endif - + /* * Fork and execute the single command. If the fork fails, we abort. */ @@ -499,8 +499,8 @@ again: bmake_signal(compatSigno, SIG_DFL); kill(myPid, compatSigno); } - - return (status); + + return status; } /*- @@ -550,7 +550,7 @@ Compat_Make(void *gnp, void *pgnp) if (Lst_Member(gn->iParents, pgn) != NULL) { char *p1; - Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn, 0); + Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn); free(p1); } @@ -654,7 +654,7 @@ Compat_Make(void *gnp, void *pgnp) } else { if (Lst_Member(gn->iParents, pgn) != NULL) { char *p1; - Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn, 0); + Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn); free(p1); } switch(gn->made) { @@ -681,7 +681,7 @@ Compat_Make(void *gnp, void *pgnp) cohorts: Lst_ForEach(gn->cohorts, Compat_Make, pgnp); - return (0); + return 0; } /*- Modified: vendor/NetBSD/bmake/dist/cond.c ============================================================================== --- vendor/NetBSD/bmake/dist/cond.c Wed Jul 8 18:29:06 2020 (r363017) +++ vendor/NetBSD/bmake/dist/cond.c Wed Jul 8 18:32:15 2020 (r363018) @@ -1,4 +1,4 @@ -/* $NetBSD: cond.c,v 1.76 2020/06/28 11:06:26 rillig Exp $ */ +/* $NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: cond.c,v 1.76 2020/06/28 11:06:26 rillig Exp $"; +static char rcsid[] = "$NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)cond.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: cond.c,v 1.76 2020/06/28 11:06:26 rillig Exp $"); +__RCSID("$NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -186,7 +186,7 @@ static unsigned int cond_min_depth = 0; /* depth at * Indicate when we should be strict about lhs of comparisons. * TRUE when Cond_EvalExpression is called from Cond_Eval (.if etc) * FALSE when Cond_EvalExpression is called from var.c:ApplyModifiers - * since lhs is already expanded and we cannot tell if + * since lhs is already expanded and we cannot tell if * it was a variable reference or not. */ static Boolean lhsStrict; @@ -256,7 +256,7 @@ CondGetArg(Boolean doEval, char **linePtr, char **argP * the word 'make' or 'defined' at the beginning of a symbol... */ *argPtr = NULL; - return (0); + return 0; } while (*cp == ' ' || *cp == '\t') { @@ -314,11 +314,11 @@ CondGetArg(Boolean doEval, char **linePtr, char **argP if (func != NULL && *cp++ != ')') { Parse_Error(PARSE_WARNING, "Missing closing parenthesis for %s()", func); - return (0); + return 0; } *linePtr = cp; - return (argLen); + return argLen; } /*- @@ -347,7 +347,7 @@ CondDoDefined(int argLen MAKE_ATTR_UNUSED, const char } free(p1); - return (result); + return result; } /*- @@ -367,7 +367,7 @@ CondDoDefined(int argLen MAKE_ATTR_UNUSED, const char static int CondStrMatch(const void *string, const void *pattern) { - return(!Str_Match(string, pattern)); + return !Str_Match(string, pattern); } /*- @@ -412,14 +412,14 @@ CondDoExists(int argLen MAKE_ATTR_UNUSED, const char * if (DEBUG(COND)) { fprintf(debug_file, "exists(%s) result is \"%s\"\n", arg, path ? path : ""); - } + } if (path != NULL) { result = TRUE; free(path); } else { result = FALSE; } - return (result); + return result; } /*- @@ -441,7 +441,7 @@ CondDoTarget(int argLen MAKE_ATTR_UNUSED, const char * GNode *gn; gn = Targ_FindNode(arg, TARG_NOCREATE); - return (gn != NULL) && !OP_NOP(gn->type); + return gn != NULL && !OP_NOP(gn->type); } /*- @@ -465,7 +465,7 @@ CondDoCommands(int argLen MAKE_ATTR_UNUSED, const char GNode *gn; gn = Targ_FindNode(arg, TARG_NOCREATE); - return (gn != NULL) && !OP_NOP(gn->type) && !Lst_IsEmpty(gn->commands); + return gn != NULL && !OP_NOP(gn->type) && !Lst_IsEmpty(gn->commands); } /*- @@ -666,7 +666,7 @@ compare_expression(Boolean doEval) rhs = NULL; lhsFree = rhsFree = FALSE; lhsQuoted = rhsQuoted = FALSE; - + /* * Parse the variable spec and skip over it, saving its * value in lhs. @@ -709,7 +709,7 @@ compare_expression(Boolean doEval) goto done; } /* For .ifxxx compare against zero */ - if (CondCvtArg(lhs, &left)) { + if (CondCvtArg(lhs, &left)) { t = left != 0.0; goto done; } @@ -762,7 +762,7 @@ do_string_compare: * rhs is either a float or an integer. Convert both the * lhs and the rhs to a double and compare the two. */ - + if (!CondCvtArg(lhs, &left) || !CondCvtArg(rhs, &right)) goto do_string_compare; @@ -1038,7 +1038,7 @@ CondT(Boolean doEval) t = TOK_TRUE; } } - return (t); + return t; } /*- @@ -1084,7 +1084,7 @@ CondF(Boolean doEval) CondPushBack(o); } } - return (l); + return l; } /*- @@ -1131,7 +1131,7 @@ CondE(Boolean doEval) CondPushBack(o); } } - return (l); + return l; } /*- Modified: vendor/NetBSD/bmake/dist/dir.c ============================================================================== --- vendor/NetBSD/bmake/dist/dir.c Wed Jul 8 18:29:06 2020 (r363017) +++ vendor/NetBSD/bmake/dist/dir.c Wed Jul 8 18:32:15 2020 (r363018) @@ -1,4 +1,4 @@ -/* $NetBSD: dir.c,v 1.74 2020/06/05 18:03:59 sjg Exp $ */ +/* $NetBSD: dir.c,v 1.76 2020/07/03 08:13:23 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: dir.c,v 1.74 2020/06/05 18:03:59 sjg Exp $"; +static char rcsid[] = "$NetBSD: dir.c,v 1.76 2020/07/03 08:13:23 rillig Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)dir.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: dir.c,v 1.74 2020/06/05 18:03:59 sjg Exp $"); +__RCSID("$NetBSD: dir.c,v 1.76 2020/07/03 08:13:23 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -112,7 +112,7 @@ __RCSID("$NetBSD: dir.c,v 1.74 2020/06/05 18:03:59 sjg * Dir_FindHereOrAbove Search for a path in the current directory and * then all the directories above it in turn until * the path is found or we reach the root ("/"). - * + * * Dir_MTime Return the modification time of a node. The file * is searched for along the default search path. * The path and mtime fields of the node are filled @@ -377,7 +377,7 @@ void Dir_InitCur(const char *cdname) { Path *p; - + if (cdname != NULL) { /* * Our build directory is not the same as our source directory. @@ -480,7 +480,7 @@ Dir_SetPATH(void) Boolean hasLastDot = FALSE; /* true we should search dot last */ Var_Delete(".PATH", VAR_GLOBAL); - + if (Lst_Open(dirSearchPath) == SUCCESS) { if ((ln = Lst_First(dirSearchPath)) != NULL) { p = (Path *)Lst_Datum(ln); @@ -537,7 +537,7 @@ Dir_SetPATH(void) static int DirFindName(const void *p, const void *dname) { - return (strcmp(((const Path *)p)->name, dname)); + return strcmp(((const Path *)p)->name, dname); } /*- @@ -545,7 +545,7 @@ DirFindName(const void *p, const void *dname) * Dir_HasWildcards -- * see if the given name has any wildcard characters in it * be careful not to expand unmatching brackets or braces. - * XXX: This code is not 100% correct. ([^]] fails etc.) + * XXX: This code is not 100% correct. ([^]] fails etc.) * I really don't think that make(1) should be expanding * patterns, because then you have to set a mechanism for * escaping the expansion! @@ -644,7 +644,7 @@ DirMatchFiles(const char *pattern, Path *p, Lst expans STR_ADDSLASH))); } } - return (0); + return 0; } /*- @@ -947,7 +947,7 @@ Dir_Expand(const char *word, Lst path, Lst expansions) *----------------------------------------------------------------------- */ static char * -DirLookup(Path *p, const char *name MAKE_ATTR_UNUSED, const char *cp, +DirLookup(Path *p, const char *name MAKE_ATTR_UNUSED, const char *cp, Boolean hasSlash MAKE_ATTR_UNUSED) { char *file; /* the current filename to check */ @@ -1004,7 +1004,7 @@ DirLookupSubdir(Path *p, const char *name) if (cached_stat(file, &stb) == 0) { nearmisses += 1; - return (file); + return file; } free(file); return NULL; @@ -1061,7 +1061,7 @@ DirLookupAbs(Path *p, const char *name, const char *cp if (DEBUG(DIR)) { fprintf(debug_file, " returning %s\n", name); } - return (bmake_strdup(name)); + return bmake_strdup(name); } /*- @@ -1087,7 +1087,7 @@ DirFindDot(Boolean hasSlash MAKE_ATTR_UNUSED, const ch } hits += 1; dot->hits += 1; - return (bmake_strdup(name)); + return bmake_strdup(name); } if (cur && Hash_FindEntry(&cur->files, cp) != NULL) { @@ -1185,7 +1185,7 @@ Dir_FindFile(const char *name, Lst path) * is found, we concatenate the directory name and the final * component and return the resulting string. If we don't find any * such thing, we go on to phase two... - * + * * No matter what, we always look for the file in the current * directory before anywhere else (unless we found the magic * DOTLAST path, in which case we search it last) and we *do not* @@ -1384,7 +1384,7 @@ Dir_FindFile(const char *name, Lst path) } if (Hash_FindEntry(&p->files, cp) != NULL) { - return (bmake_strdup(name)); + return bmake_strdup(name); } else { return NULL; } @@ -1395,7 +1395,7 @@ Dir_FindFile(const char *name, Lst path) bigmisses += 1; if (cached_stat(name, &stb) == 0) { - return (bmake_strdup(name)); + return bmake_strdup(name); } if (DEBUG(DIR)) { @@ -1409,14 +1409,14 @@ Dir_FindFile(const char *name, Lst path) /*- *----------------------------------------------------------------------- * Dir_FindHereOrAbove -- - * search for a path starting at a given directory and then working + * search for a path starting at a given directory and then working * our way up towards the root. * * Input: * here starting directory * search_path the path we are looking for * result the result of a successful search is placed here - * rlen the length of the result buffer + * rlen the length of the result buffer * (typically MAXPATHLEN + 1) * * Results: @@ -1426,7 +1426,7 @@ Dir_FindFile(const char *name, Lst path) * Side Effects: *----------------------------------------------------------------------- */ -int +int Dir_FindHereOrAbove(char *here, char *search_path, char *result, int rlen) { struct stat st; @@ -1451,7 +1451,7 @@ Dir_FindHereOrAbove(char *here, char *search_path, cha try_end = try + strlen(try); while (try_end > try && *try_end != '/') try_end--; - if (try_end > try) + if (try_end > try) *try_end = 0; /* chop! */ } @@ -1459,10 +1459,10 @@ Dir_FindHereOrAbove(char *here, char *search_path, cha * done! */ snprintf(result, rlen, "%s", try); - return(1); + return 1; } - /* + /* * nope, we didn't find it. if we used up dirbase we've * reached the root and failed. */ @@ -1479,9 +1479,9 @@ Dir_FindHereOrAbove(char *here, char *search_path, cha } /* while (1) */ /* - * we failed... + * we failed... */ - return(0); + return 0; } /*- @@ -1529,7 +1529,7 @@ Dir_MTime(GNode *gn, Boolean recheck) * see if we can find it via the current .PATH */ cp++; - + fullName = Dir_FindFile(cp, Suff_FindPath(gn)); if (fullName) { /* @@ -1572,7 +1572,7 @@ Dir_MTime(GNode *gn, Boolean recheck) } gn->mtime = stb.st_mtime; - return (gn->mtime); + return gn->mtime; } /*- @@ -1677,7 +1677,7 @@ Dir_CopyDir(void *p) { ((Path *)p)->refCount += 1; - return (p); + return p; } /*- @@ -1722,7 +1722,7 @@ Dir_MakeFlags(const char *flag, Lst path) Lst_Close(path); } - return (str); + return str; } /*- Modified: vendor/NetBSD/bmake/dist/for.c ============================================================================== --- vendor/NetBSD/bmake/dist/for.c Wed Jul 8 18:29:06 2020 (r363017) +++ vendor/NetBSD/bmake/dist/for.c Wed Jul 8 18:32:15 2020 (r363018) @@ -1,4 +1,4 @@ -/* $NetBSD: for.c,v 1.53 2017/04/16 21:04:44 riastradh Exp $ */ +/* $NetBSD: for.c,v 1.54 2020/07/03 08:13:23 rillig Exp $ */ /* * Copyright (c) 1992, The Regents of the University of California. @@ -30,14 +30,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: for.c,v 1.53 2017/04/16 21:04:44 riastradh Exp $"; +static char rcsid[] = "$NetBSD: for.c,v 1.54 2020/07/03 08:13:23 rillig Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)for.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: for.c,v 1.53 2017/04/16 21:04:44 riastradh Exp $"); +__RCSID("$NetBSD: for.c,v 1.54 2020/07/03 08:13:23 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -224,7 +224,7 @@ For_Eval(char *line) words = brk_string(sub, &nwords, FALSE, &word_buf); free(sub); - + if (words != NULL) { for (n = 0; n < nwords; n++) { ptr = words[n]; @@ -480,9 +480,9 @@ For_Iterate(void *v_arg, size_t *ret_len) void For_Run(int lineno) -{ +{ For *arg; - + arg = accumFor; accumFor = NULL; @@ -491,6 +491,6 @@ For_Run(int lineno) For_Free(arg); return; } - + Parse_SetInput(NULL, lineno, -1, For_Iterate, arg); } Modified: vendor/NetBSD/bmake/dist/hash.c ============================================================================== --- vendor/NetBSD/bmake/dist/hash.c Wed Jul 8 18:29:06 2020 (r363017) +++ vendor/NetBSD/bmake/dist/hash.c Wed Jul 8 18:32:15 2020 (r363018) @@ -1,4 +1,4 @@ -/* $NetBSD: hash.c,v 1.20 2013/11/14 00:27:05 sjg Exp $ */ +/* $NetBSD: hash.c,v 1.22 2020/07/03 17:03:09 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: hash.c,v 1.20 2013/11/14 00:27:05 sjg Exp $"; +static char rcsid[] = "$NetBSD: hash.c,v 1.22 2020/07/03 17:03:09 rillig Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)hash.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: hash.c,v 1.20 2013/11/14 00:27:05 sjg Exp $"); +__RCSID("$NetBSD: hash.c,v 1.22 2020/07/03 17:03:09 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -229,7 +229,7 @@ Hash_FindEntry(Hash_Table *t, const char *key) p = key; for (e = t->bucketPtr[h & t->mask]; e != NULL; e = e->next) if (e->namehash == h && strcmp(e->name, p) == 0) - return (e); + return e; return NULL; } @@ -279,7 +279,7 @@ Hash_CreateEntry(Hash_Table *t, const char *key, Boole if (e->namehash == h && strcmp(e->name, p) == 0) { if (newPtr != NULL) *newPtr = FALSE; - return (e); + return e; } } @@ -301,7 +301,7 @@ Hash_CreateEntry(Hash_Table *t, const char *key, Boole if (newPtr != NULL) *newPtr = TRUE; - return (e); + return e; } /* @@ -418,7 +418,7 @@ Hash_EnumNext(Hash_Search *searchPtr) e = t->bucketPtr[searchPtr->nextIndex++]; } searchPtr->hashEntryPtr = e; - return (e); + return e; } /* @@ -463,4 +463,15 @@ RebuildTable(Hash_Table *t) } } free(oldhp); +} + +void Hash_ForEach(Hash_Table *t, void (*action)(void *, void *), void *data) +{ + Hash_Search search; + Hash_Entry *e; + + for (e = Hash_EnumFirst(t, &search); + e != NULL; + e = Hash_EnumNext(&search)) + action(Hash_GetValue(e), data); } Modified: vendor/NetBSD/bmake/dist/hash.h ============================================================================== --- vendor/NetBSD/bmake/dist/hash.h Wed Jul 8 18:29:06 2020 (r363017) +++ vendor/NetBSD/bmake/dist/hash.h Wed Jul 8 18:32:15 2020 (r363018) @@ -1,4 +1,4 @@ -/* $NetBSD: hash.h,v 1.12 2017/05/31 21:07:03 maya Exp $ */ +/* $NetBSD: hash.h,v 1.13 2020/07/03 17:03:09 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -145,5 +145,6 @@ Hash_Entry *Hash_CreateEntry(Hash_Table *, const char void Hash_DeleteEntry(Hash_Table *, Hash_Entry *); Hash_Entry *Hash_EnumFirst(Hash_Table *, Hash_Search *); Hash_Entry *Hash_EnumNext(Hash_Search *); +void Hash_ForEach(Hash_Table *, void (*)(void *, void *), void *); #endif /* _HASH_H */ Modified: vendor/NetBSD/bmake/dist/job.c ============================================================================== --- vendor/NetBSD/bmake/dist/job.c Wed Jul 8 18:29:06 2020 (r363017) +++ vendor/NetBSD/bmake/dist/job.c Wed Jul 8 18:32:15 2020 (r363018) @@ -1,4 +1,4 @@ -/* $NetBSD: job.c,v 1.198 2020/06/19 21:17:48 sjg Exp $ */ +/* $NetBSD: job.c,v 1.201 2020/07/03 08:13:23 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: job.c,v 1.198 2020/06/19 21:17:48 sjg Exp $"; +static char rcsid[] = "$NetBSD: job.c,v 1.201 2020/07/03 08:13:23 rillig Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)job.c 8.2 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: job.c,v 1.198 2020/06/19 21:17:48 sjg Exp $"); +__RCSID("$NetBSD: job.c,v 1.201 2020/07/03 08:13:23 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -274,7 +274,7 @@ static Shell shells[] = { "", }, /* *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@freebsd.org Wed Jul 8 18:32:28 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4333C369BD0; Wed, 8 Jul 2020 18:32:28 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B27Fl1NdKz4Pj5; Wed, 8 Jul 2020 18:32:26 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id AE24424990; Wed, 8 Jul 2020 18:32:25 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068IWPgi043535; Wed, 8 Jul 2020 18:32:25 GMT (envelope-from sjg@FreeBSD.org) Received: (from sjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068IWP4C043534; Wed, 8 Jul 2020 18:32:25 GMT (envelope-from sjg@FreeBSD.org) Message-Id: <202007081832.068IWP4C043534@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sjg set sender to sjg@FreeBSD.org using -f From: "Simon J. Gerraty" Date: Wed, 8 Jul 2020 18:32:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r363019 - vendor/NetBSD/bmake/20200704 X-SVN-Group: vendor X-SVN-Commit-Author: sjg X-SVN-Commit-Paths: vendor/NetBSD/bmake/20200704 X-SVN-Commit-Revision: 363019 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 18:32:28 -0000 Author: sjg Date: Wed Jul 8 18:32:25 2020 New Revision: 363019 URL: https://svnweb.freebsd.org/changeset/base/363019 Log: tag bmake-20200704 Added: vendor/NetBSD/bmake/20200704/ - copied from r363018, vendor/NetBSD/bmake/dist/ From owner-svn-src-all@freebsd.org Wed Jul 8 18:58:47 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 287D136AA8A; Wed, 8 Jul 2020 18:58:47 +0000 (UTC) (envelope-from alfredo@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B27r55QCGz4TwY; Wed, 8 Jul 2020 18:58:45 +0000 (UTC) (envelope-from alfredo@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C7C2F249C1; Wed, 8 Jul 2020 18:58:44 +0000 (UTC) (envelope-from alfredo@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068IwiNb061773; Wed, 8 Jul 2020 18:58:44 GMT (envelope-from alfredo@FreeBSD.org) Received: (from alfredo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068IwiMI061772; Wed, 8 Jul 2020 18:58:44 GMT (envelope-from alfredo@FreeBSD.org) Message-Id: <202007081858.068IwiMI061772@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: alfredo set sender to alfredo@FreeBSD.org using -f From: "Alfredo Dal'Ava Junior" Date: Wed, 8 Jul 2020 18:58:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363020 - head/lib/libkvm/tests X-SVN-Group: head X-SVN-Commit-Author: alfredo X-SVN-Commit-Paths: head/lib/libkvm/tests X-SVN-Commit-Revision: 363020 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 18:58:48 -0000 Author: alfredo Date: Wed Jul 8 18:58:44 2020 New Revision: 363020 URL: https://svnweb.freebsd.org/changeset/base/363020 Log: test: add libkvm read test This test checks if value received from kvm_read is sane, based on value returned by sysctl interface. This should catch regression on bug fixed by r359160 Reviewed by: jhb Approved by: jhibbits (mentor) MFC after: 1 week Sponsored by: Eldorado Research Institute (eldorado.org.br) Differential Revision: https://reviews.freebsd.org/D23783 Added: head/lib/libkvm/tests/kvm_read_test.c (contents, props changed) Modified: head/lib/libkvm/tests/Makefile Modified: head/lib/libkvm/tests/Makefile ============================================================================== --- head/lib/libkvm/tests/Makefile Wed Jul 8 18:32:25 2020 (r363019) +++ head/lib/libkvm/tests/Makefile Wed Jul 8 18:58:44 2020 (r363020) @@ -6,8 +6,10 @@ ATF_TESTS_C+= kvm_close_test ATF_TESTS_C+= kvm_geterr_test ATF_TESTS_C+= kvm_open_test ATF_TESTS_C+= kvm_open2_test +ATF_TESTS_C+= kvm_read_test CFLAGS.kvm_geterr_test+= -I${.CURDIR:H} +CFLAGS.kvm_read_test+= -I${.CURDIR:H} LIBADD+= kvm @@ -15,7 +17,7 @@ WARNS?= 6 BINDIR= ${TESTSDIR} -.for t in kvm_geterr_test kvm_open_test kvm_open2_test +.for t in kvm_geterr_test kvm_open_test kvm_open2_test kvm_read_test SRCS.$t= $t.c kvm_test_common.c .endfor Added: head/lib/libkvm/tests/kvm_read_test.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libkvm/tests/kvm_read_test.c Wed Jul 8 18:58:44 2020 (r363020) @@ -0,0 +1,98 @@ +/*- + * Copyright (c) 2020 Alfredo Dal'Ava Junior + * Copyright (c) 2017 Enji Cooper + * + * 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. + * + * From: FreeBSD: src/lib/libkvm/tests/kvm_geterr_test.c + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "kvm_test_common.h" + +ATF_TC(kvm_read_positive_test_no_error); +ATF_TC_HEAD(kvm_read_positive_test_no_error, tc) +{ + + atf_tc_set_md_var(tc, "descr", + "test that kvm_read returns a sane value"); + atf_tc_set_md_var(tc, "require.user", "root"); +} + +ATF_TC_BODY(kvm_read_positive_test_no_error, tc) +{ + kvm_t *kd; + struct nlist nl[] = { +#define SYMNAME "_mp_maxcpus" +#define X_MAXCPUS 0 + { SYMNAME, 0, 0, 0, 0 }, + { NULL, 0, 0, 0, 0 }, + }; + ssize_t rc; + int sysctl_maxcpus, mp_maxcpus, retcode; + size_t len = sizeof(sysctl_maxcpus); + + errbuf_clear(); + kd = kvm_open(NULL, NULL, NULL, O_RDONLY, errbuf); + ATF_CHECK(!errbuf_has_error(errbuf)); + ATF_REQUIRE_MSG(kd != NULL, "kvm_open failed: %s", errbuf); + retcode = kvm_nlist(kd, nl); + ATF_REQUIRE_MSG(retcode != -1, + "kvm_nlist failed (returned %d): %s", retcode, kvm_geterr(kd)); + if (nl[X_MAXCPUS].n_type == 0) + atf_tc_skip("symbol (\"%s\") couldn't be found", SYMNAME); + + rc = kvm_read(kd, nl[X_MAXCPUS].n_value, &mp_maxcpus, + sizeof(mp_maxcpus)); + + ATF_REQUIRE_MSG(rc != -1, "kvm_read failed: %s", kvm_geterr(kd)); + ATF_REQUIRE_MSG(kvm_close(kd) == 0, "kvm_close failed: %s", + strerror(errno)); + + /* Check if value read from kvm_read is sane */ + retcode = sysctlbyname("kern.smp.maxcpus", &sysctl_maxcpus, &len, NULL, 0); + ATF_REQUIRE_MSG(retcode == 0, "sysctl read failed : %d", retcode); + ATF_REQUIRE_EQ_MSG(mp_maxcpus, sysctl_maxcpus, + "failed: kvm_read of mp_maxcpus returned %d but sysctl maxcpus returned %d", + mp_maxcpus, sysctl_maxcpus); +} + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, kvm_read_positive_test_no_error); + return (atf_no_error()); +} From owner-svn-src-all@freebsd.org Wed Jul 8 19:14:49 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id EF63936C6C7; Wed, 8 Jul 2020 19:14:48 +0000 (UTC) (envelope-from manu@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B28Bb0fj8z3VHj; Wed, 8 Jul 2020 19:14:46 +0000 (UTC) (envelope-from manu@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 96580250CA; Wed, 8 Jul 2020 19:14:44 +0000 (UTC) (envelope-from manu@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068JEi9H090415; Wed, 8 Jul 2020 19:14:44 GMT (envelope-from manu@FreeBSD.org) Received: (from manu@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068JEiBq090414; Wed, 8 Jul 2020 19:14:44 GMT (envelope-from manu@FreeBSD.org) Message-Id: <202007081914.068JEiBq090414@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: manu set sender to manu@FreeBSD.org using -f From: Emmanuel Vadot Date: Wed, 8 Jul 2020 19:14:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363021 - head/sys/dev/iicbus/twsi X-SVN-Group: head X-SVN-Commit-Author: manu X-SVN-Commit-Paths: head/sys/dev/iicbus/twsi X-SVN-Commit-Revision: 363021 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 19:14:49 -0000 Author: manu Date: Wed Jul 8 19:14:44 2020 New Revision: 363021 URL: https://svnweb.freebsd.org/changeset/base/363021 Log: twsi: Fix for > Allwinner A20 Every revision of twsi after the A20 have a bug where we need to write again the control register after each interrupts. We also need to add some delay before writing to this register, a simple read of the same register does the job so do that. Also fix the case when we have finish sending all the bytes, it only worked for 1 byte transfer (the same kind that we do for talking to the PMIC on A20 boards). While here add more debug messages and rework some of them. This was tested by talking to a AT23C32 eeprom and a DS3231 RTC from an H3 and A20 board. PR: 247576 Reported by: Manuel Stühn (freebsd@justmail.de) MFC after: 1 week Modified: head/sys/dev/iicbus/twsi/twsi.c Modified: head/sys/dev/iicbus/twsi/twsi.c ============================================================================== --- head/sys/dev/iicbus/twsi/twsi.c Wed Jul 8 18:58:44 2020 (r363020) +++ head/sys/dev/iicbus/twsi/twsi.c Wed Jul 8 19:14:44 2020 (r363021) @@ -499,6 +499,10 @@ twsi_transfer(device_t dev, struct iic_msg *msgs, uint sc->msg_idx = 0; sc->transfer = 1; +#ifdef TWSI_DEBUG + for (int i = 0; i < nmsgs; i++) + debugf(sc->dev, "msg %d is %d bytes long\n", i, msgs[i].len); +#endif /* Send start and re-enable interrupts */ sc->control_val = TWSI_CONTROL_TWSIEN | TWSI_CONTROL_INTEN | TWSI_CONTROL_ACK; @@ -535,13 +539,13 @@ twsi_intr(void *arg) debugf(sc->dev, "Got interrupt Current msg=%x\n", sc->msg_idx); status = TWSI_READ(sc, sc->reg_status); - debugf(sc->dev, "initial status=%x\n", status); + debugf(sc->dev, "reg control=%x\n", TWSI_READ(sc, sc->reg_control)); switch (status) { case TWSI_STATUS_START: case TWSI_STATUS_RPTD_START: /* Transmit the address */ - debugf(sc->dev, "Send the address\n"); + debugf(sc->dev, "Send the address (%x)", sc->msgs[sc->msg_idx].slave); if (sc->msgs[sc->msg_idx].flags & IIC_M_RD) TWSI_WRITE(sc, sc->reg_data, @@ -555,8 +559,10 @@ twsi_intr(void *arg) case TWSI_STATUS_ADDR_W_ACK: debugf(sc->dev, "Ack received after transmitting the address (write)\n"); /* Directly send the first byte */ - sc->sent_bytes = 0; - debugf(sc->dev, "Sending byte 0 = %x\n", sc->msgs[sc->msg_idx].buf[0]); + sc->sent_bytes = 1; + debugf(sc->dev, "Sending byte 0 (of %d) = %x\n", + sc->msgs[sc->msg_idx].len, + sc->msgs[sc->msg_idx].buf[0]); TWSI_WRITE(sc, sc->reg_data, sc->msgs[sc->msg_idx].buf[0]); TWSI_WRITE(sc, sc->reg_control, sc->control_val); @@ -580,7 +586,7 @@ twsi_intr(void *arg) case TWSI_STATUS_DATA_WR_ACK: debugf(sc->dev, "Ack received after transmitting data\n"); - if (sc->sent_bytes++ == (sc->msgs[sc->msg_idx].len - 1)) { + if (sc->sent_bytes == sc->msgs[sc->msg_idx].len) { debugf(sc->dev, "Done sending all the bytes for msg %d\n", sc->msg_idx); /* Send stop, no interrupts on stop */ if (!(sc->msgs[sc->msg_idx].flags & IIC_M_NOSTOP)) { @@ -595,30 +601,40 @@ twsi_intr(void *arg) if (sc->msg_idx == sc->nmsgs) { debugf(sc->dev, "transfer_done=1\n"); transfer_done = 1; + sc->error = 0; + } else { + debugf(sc->dev, "Send repeated start\n"); + TWSI_WRITE(sc, sc->reg_control, sc->control_val | TWSI_CONTROL_START); } } else { - debugf(sc->dev, "Sending byte %d = %x\n", + debugf(sc->dev, "Sending byte %d (of %d) = %x\n", sc->sent_bytes, + sc->msgs[sc->msg_idx].len, sc->msgs[sc->msg_idx].buf[sc->sent_bytes]); TWSI_WRITE(sc, sc->reg_data, sc->msgs[sc->msg_idx].buf[sc->sent_bytes]); TWSI_WRITE(sc, sc->reg_control, sc->control_val); + sc->sent_bytes++; } break; case TWSI_STATUS_DATA_RD_ACK: debugf(sc->dev, "Ack received after receiving data\n"); - debugf(sc->dev, "msg_len=%d recv_bytes=%d\n", sc->msgs[sc->msg_idx].len, sc->recv_bytes); sc->msgs[sc->msg_idx].buf[sc->recv_bytes++] = TWSI_READ(sc, sc->reg_data); + debugf(sc->dev, "msg_len=%d recv_bytes=%d\n", sc->msgs[sc->msg_idx].len, sc->recv_bytes); /* If we only have one byte left, disable ACK */ if (sc->msgs[sc->msg_idx].len - sc->recv_bytes == 1) sc->control_val &= ~TWSI_CONTROL_ACK; - if (sc->msgs[sc->msg_idx].len - sc->recv_bytes) { + if (sc->msgs[sc->msg_idx].len == sc->recv_bytes) { + debugf(sc->dev, "Done with msg %d\n", sc->msg_idx); sc->msg_idx++; - if (sc->msg_idx == sc->nmsgs - 1) + if (sc->msg_idx == sc->nmsgs - 1) { + debugf(sc->dev, "No more msgs\n"); transfer_done = 1; + sc->error = 0; + } } TWSI_WRITE(sc, sc->reg_control, sc->control_val); break; @@ -631,12 +647,14 @@ twsi_intr(void *arg) TWSI_WRITE(sc, sc->reg_control, sc->control_val | TWSI_CONTROL_STOP); } else { - debugf(sc->dev, "No ack when receiving data\n"); - sc->error = ENXIO; - sc->control_val = 0; + debugf(sc->dev, "No ack when receiving data, sending stop anyway\n"); + if (!(sc->msgs[sc->msg_idx].flags & IIC_M_NOSTOP)) + TWSI_WRITE(sc, sc->reg_control, + sc->control_val | TWSI_CONTROL_STOP); } sc->transfer = 0; transfer_done = 1; + sc->error = 0; break; default: @@ -647,6 +665,15 @@ twsi_intr(void *arg) wakeup(sc); break; } + debugf(sc->dev, "Refresh reg_control\n"); + + /* + * Fix silicon bug on > Allwinner A20 by doing a read and writing + * again to the control register + */ + status = TWSI_READ(sc, sc->reg_status); + TWSI_WRITE(sc, sc->reg_control, + sc->control_val | TWSI_CONTROL_IFLG); debugf(sc->dev, "Done with interrupts\n\n"); if (transfer_done == 1) { From owner-svn-src-all@freebsd.org Wed Jul 8 19:56:37 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8D07E36D798; Wed, 8 Jul 2020 19:56:37 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B296r75fHz3ZNx; Wed, 8 Jul 2020 19:56:36 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DCDB1258A9; Wed, 8 Jul 2020 19:56:35 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068JuZq7018075; Wed, 8 Jul 2020 19:56:35 GMT (envelope-from gordon@FreeBSD.org) Received: (from gordon@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068JuYAQ018071; Wed, 8 Jul 2020 19:56:34 GMT (envelope-from gordon@FreeBSD.org) Message-Id: <202007081956.068JuYAQ018071@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gordon set sender to gordon@FreeBSD.org using -f From: Gordon Tetlow Date: Wed, 8 Jul 2020 19:56:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-releng@freebsd.org Subject: svn commit: r363022 - in releng/12.1: sys/amd64/vmm/intel usr.sbin/bhyve X-SVN-Group: releng X-SVN-Commit-Author: gordon X-SVN-Commit-Paths: in releng/12.1: sys/amd64/vmm/intel usr.sbin/bhyve X-SVN-Commit-Revision: 363022 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 19:56:38 -0000 Author: gordon Date: Wed Jul 8 19:56:34 2020 New Revision: 363022 URL: https://svnweb.freebsd.org/changeset/base/363022 Log: Fix host crash in bhyve with PCI device passthrough. Approved by: so Security: FreeBSD-EN-20:13.bhyve Modified: releng/12.1/sys/amd64/vmm/intel/vtd.c releng/12.1/usr.sbin/bhyve/pci_emul.c releng/12.1/usr.sbin/bhyve/pci_emul.h releng/12.1/usr.sbin/bhyve/pci_passthru.c Modified: releng/12.1/sys/amd64/vmm/intel/vtd.c ============================================================================== --- releng/12.1/sys/amd64/vmm/intel/vtd.c Wed Jul 8 19:14:44 2020 (r363021) +++ releng/12.1/sys/amd64/vmm/intel/vtd.c Wed Jul 8 19:56:34 2020 (r363022) @@ -51,6 +51,8 @@ __FBSDID("$FreeBSD$"); * Architecture Spec, September 2008. */ +#define VTD_DRHD_INCLUDE_PCI_ALL(Flags) (((Flags) >> 0) & 0x1) + /* Section 10.4 "Register Descriptions" */ struct vtdmap { volatile uint32_t version; @@ -116,10 +118,11 @@ struct domain { static SLIST_HEAD(, domain) domhead; #define DRHD_MAX_UNITS 8 -static int drhd_num; -static struct vtdmap *vtdmaps[DRHD_MAX_UNITS]; -static int max_domains; -typedef int (*drhd_ident_func_t)(void); +static ACPI_DMAR_HARDWARE_UNIT *drhds[DRHD_MAX_UNITS]; +static int drhd_num; +static struct vtdmap *vtdmaps[DRHD_MAX_UNITS]; +static int max_domains; +typedef int (*drhd_ident_func_t)(void); static uint64_t root_table[PAGE_SIZE / sizeof(uint64_t)] __aligned(4096); static uint64_t ctx_tables[256][PAGE_SIZE / sizeof(uint64_t)] __aligned(4096); @@ -175,6 +178,69 @@ domain_id(void) return (id); } +static struct vtdmap * +vtd_device_scope(uint16_t rid) +{ + int i, remaining, pathremaining; + char *end, *pathend; + struct vtdmap *vtdmap; + ACPI_DMAR_HARDWARE_UNIT *drhd; + ACPI_DMAR_DEVICE_SCOPE *device_scope; + ACPI_DMAR_PCI_PATH *path; + + for (i = 0; i < drhd_num; i++) { + drhd = drhds[i]; + + if (VTD_DRHD_INCLUDE_PCI_ALL(drhd->Flags)) { + /* + * From Intel VT-d arch spec, version 3.0: + * If a DRHD structure with INCLUDE_PCI_ALL flag Set is reported + * for a Segment, it must be enumerated by BIOS after all other + * DRHD structures for the same Segment. + */ + vtdmap = vtdmaps[i]; + return(vtdmap); + } + + end = (char *)drhd + drhd->Header.Length; + remaining = drhd->Header.Length - sizeof(ACPI_DMAR_HARDWARE_UNIT); + while (remaining > sizeof(ACPI_DMAR_DEVICE_SCOPE)) { + device_scope = (ACPI_DMAR_DEVICE_SCOPE *)(end - remaining); + remaining -= device_scope->Length; + + switch (device_scope->EntryType){ + /* 0x01 and 0x02 are PCI device entries */ + case 0x01: + case 0x02: + break; + default: + continue; + } + + if (PCI_RID2BUS(rid) != device_scope->Bus) + continue; + + pathend = (char *)device_scope + device_scope->Length; + pathremaining = device_scope->Length - sizeof(ACPI_DMAR_DEVICE_SCOPE); + while (pathremaining >= sizeof(ACPI_DMAR_PCI_PATH)) { + path = (ACPI_DMAR_PCI_PATH *)(pathend - pathremaining); + pathremaining -= sizeof(ACPI_DMAR_PCI_PATH); + + if (PCI_RID2SLOT(rid) != path->Device) + continue; + if (PCI_RID2FUNC(rid) != path->Function) + continue; + + vtdmap = vtdmaps[i]; + return (vtdmap); + } + } + } + + /* No matching scope */ + return (NULL); +} + static void vtd_wbflush(struct vtdmap *vtdmap) { @@ -240,7 +306,7 @@ vtd_translation_disable(struct vtdmap *vtdmap) static int vtd_init(void) { - int i, units, remaining; + int i, units, remaining, tmp; struct vtdmap *vtdmap; vm_paddr_t ctx_paddr; char *end, envname[32]; @@ -291,8 +357,9 @@ vtd_init(void) break; drhd = (ACPI_DMAR_HARDWARE_UNIT *)hdr; - vtdmaps[units++] = (struct vtdmap *)PHYS_TO_DMAP(drhd->Address); - if (units >= DRHD_MAX_UNITS) + drhds[units] = drhd; + vtdmaps[units] = (struct vtdmap *)PHYS_TO_DMAP(drhd->Address); + if (++units >= DRHD_MAX_UNITS) break; remaining -= hdr->Length; } @@ -302,13 +369,19 @@ vtd_init(void) skip_dmar: drhd_num = units; - vtdmap = vtdmaps[0]; - if (VTD_CAP_CM(vtdmap->cap) != 0) - panic("vtd_init: invalid caching mode"); + max_domains = 64 * 1024; /* maximum valid value */ + for (i = 0; i < drhd_num; i++){ + vtdmap = vtdmaps[i]; - max_domains = vtd_max_domains(vtdmap); + if (VTD_CAP_CM(vtdmap->cap) != 0) + panic("vtd_init: invalid caching mode"); + /* take most compatible (minimum) value */ + if ((tmp = vtd_max_domains(vtdmap)) < max_domains) + max_domains = tmp; + } + /* * Set up the root-table to point to the context-entry tables */ @@ -373,7 +446,6 @@ vtd_add_device(void *arg, uint16_t rid) struct vtdmap *vtdmap; uint8_t bus; - vtdmap = vtdmaps[0]; bus = PCI_RID2BUS(rid); ctxp = ctx_tables[bus]; pt_paddr = vtophys(dom->ptp); @@ -385,6 +457,10 @@ vtd_add_device(void *arg, uint16_t rid) (uint16_t)(ctxp[idx + 1] >> 8)); } + if ((vtdmap = vtd_device_scope(rid)) == NULL) + panic("vtd_add_device: device %x is not in scope for " + "any DMA remapping unit", rid); + /* * Order is important. The 'present' bit is set only after all fields * of the context pointer are initialized. @@ -568,8 +644,6 @@ vtd_create_domain(vm_paddr_t maxaddr) if (drhd_num <= 0) panic("vtd_create_domain: no dma remapping hardware available"); - vtdmap = vtdmaps[0]; - /* * Calculate AGAW. * Section 3.4.2 "Adjusted Guest Address Width", Architecture Spec. @@ -594,7 +668,14 @@ vtd_create_domain(vm_paddr_t maxaddr) pt_levels = 2; sagaw = 30; addrwidth = 0; - tmp = VTD_CAP_SAGAW(vtdmap->cap); + + tmp = ~0; + for (i = 0; i < drhd_num; i++) { + vtdmap = vtdmaps[i]; + /* take most compatible value */ + tmp &= VTD_CAP_SAGAW(vtdmap->cap); + } + for (i = 0; i < 5; i++) { if ((tmp & (1 << i)) != 0 && sagaw >= agaw) break; @@ -606,8 +687,8 @@ vtd_create_domain(vm_paddr_t maxaddr) } if (i >= 5) { - panic("vtd_create_domain: SAGAW 0x%lx does not support AGAW %d", - VTD_CAP_SAGAW(vtdmap->cap), agaw); + panic("vtd_create_domain: SAGAW 0x%x does not support AGAW %d", + tmp, agaw); } dom = malloc(sizeof(struct domain), M_VTD, M_ZERO | M_WAITOK); @@ -634,7 +715,12 @@ vtd_create_domain(vm_paddr_t maxaddr) * There is not any code to deal with the demotion at the moment * so we disable superpage mappings altogether. */ - dom->spsmask = VTD_CAP_SPS(vtdmap->cap); + dom->spsmask = ~0; + for (i = 0; i < drhd_num; i++) { + vtdmap = vtdmaps[i]; + /* take most compatible value */ + dom->spsmask &= VTD_CAP_SPS(vtdmap->cap); + } #endif SLIST_INSERT_HEAD(&domhead, dom, next); Modified: releng/12.1/usr.sbin/bhyve/pci_emul.c ============================================================================== --- releng/12.1/usr.sbin/bhyve/pci_emul.c Wed Jul 8 19:14:44 2020 (r363021) +++ releng/12.1/usr.sbin/bhyve/pci_emul.c Wed Jul 8 19:56:34 2020 (r363022) @@ -868,7 +868,7 @@ pci_emul_add_msixcap(struct pci_devinst *pi, int msgnu sizeof(msixcap))); } -void +static void msixcap_cfgwrite(struct pci_devinst *pi, int capoff, int offset, int bytes, uint32_t val) { @@ -892,7 +892,7 @@ msixcap_cfgwrite(struct pci_devinst *pi, int capoff, i CFGWRITE(pi, offset, val, bytes); } -void +static void msicap_cfgwrite(struct pci_devinst *pi, int capoff, int offset, int bytes, uint32_t val) { @@ -971,30 +971,34 @@ pci_emul_add_pciecap(struct pci_devinst *pi, int type) /* * This function assumes that 'coff' is in the capabilities region of the - * config space. + * config space. A capoff parameter of zero will force a search for the + * offset and type. */ -static void -pci_emul_capwrite(struct pci_devinst *pi, int offset, int bytes, uint32_t val) +void +pci_emul_capwrite(struct pci_devinst *pi, int offset, int bytes, uint32_t val, + uint8_t capoff, int capid) { - int capid; - uint8_t capoff, nextoff; + uint8_t nextoff; /* Do not allow un-aligned writes */ if ((offset & (bytes - 1)) != 0) return; - /* Find the capability that we want to update */ - capoff = CAP_START_OFFSET; - while (1) { - nextoff = pci_get_cfgdata8(pi, capoff + 1); - if (nextoff == 0) - break; - if (offset >= capoff && offset < nextoff) - break; + if (capoff == 0) { + /* Find the capability that we want to update */ + capoff = CAP_START_OFFSET; + while (1) { + nextoff = pci_get_cfgdata8(pi, capoff + 1); + if (nextoff == 0) + break; + if (offset >= capoff && offset < nextoff) + break; - capoff = nextoff; + capoff = nextoff; + } + assert(offset >= capoff); + capid = pci_get_cfgdata8(pi, capoff); } - assert(offset >= capoff); /* * Capability ID and Next Capability Pointer are readonly. @@ -1011,7 +1015,6 @@ pci_emul_capwrite(struct pci_devinst *pi, int offset, return; } - capid = pci_get_cfgdata8(pi, capoff); switch (capid) { case PCIY_MSI: msicap_cfgwrite(pi, capoff, offset, bytes, val); @@ -1878,7 +1881,7 @@ pci_cfgrw(struct vmctx *ctx, int vcpu, int in, int bus pci_set_cfgdata32(pi, coff, bar); } else if (pci_emul_iscap(pi, coff)) { - pci_emul_capwrite(pi, coff, bytes, *eax); + pci_emul_capwrite(pi, coff, bytes, *eax, 0, 0); } else if (coff >= PCIR_COMMAND && coff < PCIR_REVID) { pci_emul_cmdsts_write(pi, coff, *eax, bytes); } else { Modified: releng/12.1/usr.sbin/bhyve/pci_emul.h ============================================================================== --- releng/12.1/usr.sbin/bhyve/pci_emul.h Wed Jul 8 19:14:44 2020 (r363021) +++ releng/12.1/usr.sbin/bhyve/pci_emul.h Wed Jul 8 19:56:34 2020 (r363022) @@ -212,10 +212,6 @@ typedef void (*pci_lintr_cb)(int b, int s, int pin, in int ioapic_irq, void *arg); int init_pci(struct vmctx *ctx); -void msicap_cfgwrite(struct pci_devinst *pi, int capoff, int offset, - int bytes, uint32_t val); -void msixcap_cfgwrite(struct pci_devinst *pi, int capoff, int offset, - int bytes, uint32_t val); void pci_callback(void); int pci_emul_alloc_bar(struct pci_devinst *pdi, int idx, enum pcibar_type type, uint64_t size); @@ -223,6 +219,8 @@ int pci_emul_alloc_pbar(struct pci_devinst *pdi, int i uint64_t hostbase, enum pcibar_type type, uint64_t size); int pci_emul_add_msicap(struct pci_devinst *pi, int msgnum); int pci_emul_add_pciecap(struct pci_devinst *pi, int pcie_device_type); +void pci_emul_capwrite(struct pci_devinst *pi, int offset, int bytes, + uint32_t val, uint8_t capoff, int capid); void pci_generate_msi(struct pci_devinst *pi, int msgnum); void pci_generate_msix(struct pci_devinst *pi, int msgnum); void pci_lintr_assert(struct pci_devinst *pi); Modified: releng/12.1/usr.sbin/bhyve/pci_passthru.c ============================================================================== --- releng/12.1/usr.sbin/bhyve/pci_passthru.c Wed Jul 8 19:14:44 2020 (r363021) +++ releng/12.1/usr.sbin/bhyve/pci_passthru.c Wed Jul 8 19:56:34 2020 (r363022) @@ -828,8 +828,8 @@ passthru_cfgwrite(struct vmctx *ctx, int vcpu, struct * MSI capability is emulated */ if (msicap_access(sc, coff)) { - msicap_cfgwrite(pi, sc->psc_msi.capoff, coff, bytes, val); - + pci_emul_capwrite(pi, coff, bytes, val, sc->psc_msi.capoff, + PCIY_MSI); error = vm_setup_pptdev_msi(ctx, vcpu, sc->psc_sel.pc_bus, sc->psc_sel.pc_dev, sc->psc_sel.pc_func, pi->pi_msi.addr, pi->pi_msi.msg_data, @@ -840,7 +840,8 @@ passthru_cfgwrite(struct vmctx *ctx, int vcpu, struct } if (msixcap_access(sc, coff)) { - msixcap_cfgwrite(pi, sc->psc_msix.capoff, coff, bytes, val); + pci_emul_capwrite(pi, coff, bytes, val, sc->psc_msix.capoff, + PCIY_MSIX); if (pi->pi_msix.enabled) { msix_table_entries = pi->pi_msix.table_count; for (i = 0; i < msix_table_entries; i++) { From owner-svn-src-all@freebsd.org Wed Jul 8 19:57:25 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 500C736D527; Wed, 8 Jul 2020 19:57:25 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B297n0gfcz3b0r; Wed, 8 Jul 2020 19:57:25 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EDEAC25370; Wed, 8 Jul 2020 19:57:24 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068JvO22018155; Wed, 8 Jul 2020 19:57:24 GMT (envelope-from gordon@FreeBSD.org) Received: (from gordon@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068JvOBY018153; Wed, 8 Jul 2020 19:57:24 GMT (envelope-from gordon@FreeBSD.org) Message-Id: <202007081957.068JvOBY018153@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gordon set sender to gordon@FreeBSD.org using -f From: Gordon Tetlow Date: Wed, 8 Jul 2020 19:57:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-releng@freebsd.org Subject: svn commit: r363023 - in releng: 11.3/sys/compat/linuxkpi/common/src 12.1/sys/compat/linuxkpi/common/src X-SVN-Group: releng X-SVN-Commit-Author: gordon X-SVN-Commit-Paths: in releng: 11.3/sys/compat/linuxkpi/common/src 12.1/sys/compat/linuxkpi/common/src X-SVN-Commit-Revision: 363023 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 19:57:25 -0000 Author: gordon Date: Wed Jul 8 19:57:24 2020 New Revision: 363023 URL: https://svnweb.freebsd.org/changeset/base/363023 Log: Fix kernel panic in LinuxKPI subsystem. Approved by: so Security: FreeBSD-EN-20:14.linuxpki Modified: releng/11.3/sys/compat/linuxkpi/common/src/linux_compat.c releng/12.1/sys/compat/linuxkpi/common/src/linux_compat.c Modified: releng/11.3/sys/compat/linuxkpi/common/src/linux_compat.c ============================================================================== --- releng/11.3/sys/compat/linuxkpi/common/src/linux_compat.c Wed Jul 8 19:56:34 2020 (r363022) +++ releng/11.3/sys/compat/linuxkpi/common/src/linux_compat.c Wed Jul 8 19:57:24 2020 (r363023) @@ -1502,6 +1502,9 @@ linux_file_close(struct file *file, struct thread *td) KASSERT(file_count(filp) == 0, ("File refcount(%d) is not zero", file_count(filp))); + if (td == NULL) + td = curthread; + error = 0; filp->f_flags = file->f_flag; linux_set_current(td); Modified: releng/12.1/sys/compat/linuxkpi/common/src/linux_compat.c ============================================================================== --- releng/12.1/sys/compat/linuxkpi/common/src/linux_compat.c Wed Jul 8 19:56:34 2020 (r363022) +++ releng/12.1/sys/compat/linuxkpi/common/src/linux_compat.c Wed Jul 8 19:57:24 2020 (r363023) @@ -1502,6 +1502,9 @@ linux_file_close(struct file *file, struct thread *td) KASSERT(file_count(filp) == 0, ("File refcount(%d) is not zero", file_count(filp))); + if (td == NULL) + td = curthread; + error = 0; filp->f_flags = file->f_flag; linux_set_current(td); From owner-svn-src-all@freebsd.org Wed Jul 8 19:58:01 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E2E8736D52F; Wed, 8 Jul 2020 19:58:01 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B298T5jNkz3b1d; Wed, 8 Jul 2020 19:58:01 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A731225867; Wed, 8 Jul 2020 19:58:01 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068Jw1Qd018235; Wed, 8 Jul 2020 19:58:01 GMT (envelope-from gordon@FreeBSD.org) Received: (from gordon@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068Jw1E4018233; Wed, 8 Jul 2020 19:58:01 GMT (envelope-from gordon@FreeBSD.org) Message-Id: <202007081958.068Jw1E4018233@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gordon set sender to gordon@FreeBSD.org using -f From: Gordon Tetlow Date: Wed, 8 Jul 2020 19:58:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-releng@freebsd.org Subject: svn commit: r363024 - in releng: 11.3/sys/dev/mps 11.4/sys/dev/mps 12.1/sys/dev/mps X-SVN-Group: releng X-SVN-Commit-Author: gordon X-SVN-Commit-Paths: in releng: 11.3/sys/dev/mps 11.4/sys/dev/mps 12.1/sys/dev/mps X-SVN-Commit-Revision: 363024 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 19:58:01 -0000 Author: gordon Date: Wed Jul 8 19:58:00 2020 New Revision: 363024 URL: https://svnweb.freebsd.org/changeset/base/363024 Log: Fix kernel panic in mps(4) driver. Approved by: so Security: FreeBSD-EN-20:15.mps Modified: releng/11.3/sys/dev/mps/mps_user.c releng/11.4/sys/dev/mps/mps_user.c releng/12.1/sys/dev/mps/mps_user.c Modified: releng/11.3/sys/dev/mps/mps_user.c ============================================================================== --- releng/11.3/sys/dev/mps/mps_user.c Wed Jul 8 19:57:24 2020 (r363023) +++ releng/11.3/sys/dev/mps/mps_user.c Wed Jul 8 19:58:00 2020 (r363024) @@ -1045,10 +1045,12 @@ mps_user_pass_thru(struct mps_softc *sc, mps_pass_thru if (((MPI2_SCSI_IO_REPLY *)rpl)->SCSIState & MPI2_SCSI_STATE_AUTOSENSE_VALID) { sense_len = - MIN((le32toh(((MPI2_SCSI_IO_REPLY *)rpl)->SenseCount)), - sizeof(struct scsi_sense_data)); + MIN((le32toh(((MPI2_SCSI_IO_REPLY *)rpl)-> + SenseCount)), sizeof(struct + scsi_sense_data)); mps_unlock(sc); - copyout(cm->cm_sense, cm->cm_req + 64, sense_len); + copyout(cm->cm_sense, (PTRIN(data->PtrReply + + sizeof(MPI2_SCSI_IO_REPLY))), sense_len); mps_lock(sc); } } Modified: releng/11.4/sys/dev/mps/mps_user.c ============================================================================== --- releng/11.4/sys/dev/mps/mps_user.c Wed Jul 8 19:57:24 2020 (r363023) +++ releng/11.4/sys/dev/mps/mps_user.c Wed Jul 8 19:58:00 2020 (r363024) @@ -1036,10 +1036,12 @@ mps_user_pass_thru(struct mps_softc *sc, mps_pass_thru if (((MPI2_SCSI_IO_REPLY *)rpl)->SCSIState & MPI2_SCSI_STATE_AUTOSENSE_VALID) { sense_len = - MIN((le32toh(((MPI2_SCSI_IO_REPLY *)rpl)->SenseCount)), - sizeof(struct scsi_sense_data)); + MIN((le32toh(((MPI2_SCSI_IO_REPLY *)rpl)-> + SenseCount)), sizeof(struct + scsi_sense_data)); mps_unlock(sc); - copyout(cm->cm_sense, cm->cm_req + 64, sense_len); + copyout(cm->cm_sense, (PTRIN(data->PtrReply + + sizeof(MPI2_SCSI_IO_REPLY))), sense_len); mps_lock(sc); } } Modified: releng/12.1/sys/dev/mps/mps_user.c ============================================================================== --- releng/12.1/sys/dev/mps/mps_user.c Wed Jul 8 19:57:24 2020 (r363023) +++ releng/12.1/sys/dev/mps/mps_user.c Wed Jul 8 19:58:00 2020 (r363024) @@ -1045,10 +1045,12 @@ mps_user_pass_thru(struct mps_softc *sc, mps_pass_thru if (((MPI2_SCSI_IO_REPLY *)rpl)->SCSIState & MPI2_SCSI_STATE_AUTOSENSE_VALID) { sense_len = - MIN((le32toh(((MPI2_SCSI_IO_REPLY *)rpl)->SenseCount)), - sizeof(struct scsi_sense_data)); + MIN((le32toh(((MPI2_SCSI_IO_REPLY *)rpl)-> + SenseCount)), sizeof(struct + scsi_sense_data)); mps_unlock(sc); - copyout(cm->cm_sense, cm->cm_req + 64, sense_len); + copyout(cm->cm_sense, (PTRIN(data->PtrReply + + sizeof(MPI2_SCSI_IO_REPLY))), sense_len); mps_lock(sc); } } From owner-svn-src-all@freebsd.org Wed Jul 8 20:08:06 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7890936DAB1; Wed, 8 Jul 2020 20:08:06 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B29N62fk5z3bt6; Wed, 8 Jul 2020 20:08:06 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3E823256D6; Wed, 8 Jul 2020 20:08:06 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068K86OB024319; Wed, 8 Jul 2020 20:08:06 GMT (envelope-from gordon@FreeBSD.org) Received: (from gordon@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068K85vn024315; Wed, 8 Jul 2020 20:08:05 GMT (envelope-from gordon@FreeBSD.org) Message-Id: <202007082008.068K85vn024315@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gordon set sender to gordon@FreeBSD.org using -f From: Gordon Tetlow Date: Wed, 8 Jul 2020 20:08:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-releng@freebsd.org Subject: svn commit: r363025 - in releng/11.4/lib/libc: gen tests/gen X-SVN-Group: releng X-SVN-Commit-Author: gordon X-SVN-Commit-Paths: in releng/11.4/lib/libc: gen tests/gen X-SVN-Commit-Revision: 363025 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 20:08:06 -0000 Author: gordon Date: Wed Jul 8 20:08:05 2020 New Revision: 363025 URL: https://svnweb.freebsd.org/changeset/base/363025 Log: Fix posix_spawnp(3) buffer overflow. Approved by: so Security: FreeBSD-SA-20:18.posix_spawnp Security: CVE-2020-7458 Added: releng/11.4/lib/libc/tests/gen/spawnp_enoexec.sh (contents, props changed) Modified: releng/11.4/lib/libc/gen/exec.c releng/11.4/lib/libc/gen/posix_spawn.c releng/11.4/lib/libc/tests/gen/Makefile releng/11.4/lib/libc/tests/gen/posix_spawn_test.c Modified: releng/11.4/lib/libc/gen/exec.c ============================================================================== --- releng/11.4/lib/libc/gen/exec.c Wed Jul 8 19:58:00 2020 (r363024) +++ releng/11.4/lib/libc/gen/exec.c Wed Jul 8 20:08:05 2020 (r363025) @@ -49,6 +49,9 @@ __FBSDID("$FreeBSD$"); extern char **environ; +static const char execvPe_err_preamble[] = "execvP: "; +static const char execvPe_err_trailer[] = ": path too long\n"; + int execl(const char *name, const char *arg, ...) { @@ -149,8 +152,8 @@ execvPe(const char *name, const char *path, char * con const char **memp; size_t cnt, lp, ln; int eacces, save_errno; - char *cur, buf[MAXPATHLEN]; - const char *p, *bp; + char buf[MAXPATHLEN]; + const char *bp, *np, *op, *p; struct stat sb; eacces = 0; @@ -158,7 +161,7 @@ execvPe(const char *name, const char *path, char * con /* If it's an absolute or relative path name, it's easy. */ if (strchr(name, '/')) { bp = name; - cur = NULL; + op = NULL; goto retry; } bp = buf; @@ -169,34 +172,42 @@ execvPe(const char *name, const char *path, char * con return (-1); } - cur = alloca(strlen(path) + 1); - if (cur == NULL) { - errno = ENOMEM; - return (-1); - } - strcpy(cur, path); - while ((p = strsep(&cur, ":")) != NULL) { + op = path; + ln = strlen(name); + while (op != NULL) { + np = strchrnul(op, ':'); + /* * It's a SHELL path -- double, leading and trailing colons * mean the current directory. */ - if (*p == '\0') { + if (np == op) { + /* Empty component. */ p = "."; lp = 1; - } else - lp = strlen(p); - ln = strlen(name); + } else { + /* Non-empty component. */ + p = op; + lp = np - op; + } + /* Advance to the next component or terminate after this. */ + if (*np == '\0') + op = NULL; + else + op = np + 1; + /* * If the path is too long complain. This is a possible * security issue; given a way to make the path too long * the user may execute the wrong program. */ if (lp + ln + 2 > sizeof(buf)) { - (void)_write(STDERR_FILENO, "execvP: ", 8); + (void)_write(STDERR_FILENO, execvPe_err_preamble, + sizeof(execvPe_err_preamble) - 1); (void)_write(STDERR_FILENO, p, lp); - (void)_write(STDERR_FILENO, ": path too long\n", - 16); + (void)_write(STDERR_FILENO, execvPe_err_trailer, + sizeof(execvPe_err_trailer) - 1); continue; } bcopy(p, buf, lp); @@ -215,14 +226,28 @@ retry: (void)_execve(bp, argv, envp); case ENOEXEC: for (cnt = 0; argv[cnt]; ++cnt) ; - memp = alloca((cnt + 2) * sizeof(char *)); + + /* + * cnt may be 0 above; always allocate at least + * 3 entries so that we can at least fit "sh", bp, and + * the NULL terminator. We can rely on cnt to take into + * account the NULL terminator in all other scenarios, + * as we drop argv[0]. + */ + memp = alloca(MAX(3, cnt + 2) * sizeof(char *)); if (memp == NULL) { /* errno = ENOMEM; XXX override ENOEXEC? */ goto done; } - memp[0] = "sh"; - memp[1] = bp; - bcopy(argv + 1, memp + 2, cnt * sizeof(char *)); + if (cnt > 0) { + memp[0] = argv[0]; + memp[1] = bp; + bcopy(argv + 1, memp + 2, cnt * sizeof(char *)); + } else { + memp[0] = "sh"; + memp[1] = bp; + memp[2] = NULL; + } (void)_execve(_PATH_BSHELL, __DECONST(char **, memp), envp); goto done; Modified: releng/11.4/lib/libc/gen/posix_spawn.c ============================================================================== --- releng/11.4/lib/libc/gen/posix_spawn.c Wed Jul 8 19:58:00 2020 (r363024) +++ releng/11.4/lib/libc/gen/posix_spawn.c Wed Jul 8 20:08:05 2020 (r363025) @@ -28,6 +28,7 @@ __FBSDID("$FreeBSD$"); #include "namespace.h" +#include #include #include @@ -202,8 +203,20 @@ struct posix_spawn_args { volatile int error; }; +#define PSPAWN_STACK_ALIGNMENT 16 +#define PSPAWN_STACK_ALIGNBYTES (PSPAWN_STACK_ALIGNMENT - 1) +#define PSPAWN_STACK_ALIGN(sz) \ + (((sz) + PSPAWN_STACK_ALIGNBYTES) & ~PSPAWN_STACK_ALIGNBYTES) + #if defined(__i386__) || defined(__amd64__) +/* + * Below we'll assume that _RFORK_THREAD_STACK_SIZE is appropriately aligned for + * the posix_spawn() case where we do not end up calling _execvpe and won't ever + * try to allocate space on the stack for argv[]. + */ #define _RFORK_THREAD_STACK_SIZE 4096 +_Static_assert((_RFORK_THREAD_STACK_SIZE % PSPAWN_STACK_ALIGNMENT) == 0, + "Inappropriate stack size alignment"); #endif static int @@ -244,10 +257,36 @@ do_posix_spawn(pid_t *pid, const char *path, pid_t p; #ifdef _RFORK_THREAD_STACK_SIZE char *stack; + size_t cnt, stacksz; - stack = malloc(_RFORK_THREAD_STACK_SIZE); + stacksz = _RFORK_THREAD_STACK_SIZE; + if (use_env_path) { + /* + * We need to make sure we have enough room on the stack for the + * potential alloca() in execvPe if it gets kicked back an + * ENOEXEC from execve(2), plus the original buffer we gave + * ourselves; this protects us in the event that the caller + * intentionally or inadvertently supplies enough arguments to + * make us blow past the stack we've allocated from it. + */ + for (cnt = 0; argv[cnt] != NULL; ++cnt) + ; + stacksz += MAX(3, cnt + 2) * sizeof(char *); + stacksz = PSPAWN_STACK_ALIGN(stacksz); + } + + /* + * aligned_alloc is not safe to use here, because we can't guarantee + * that aligned_alloc and free will be provided by the same + * implementation. We've actively hit at least one application that + * will provide its own malloc/free but not aligned_alloc leading to + * a free by the wrong allocator. + */ + stack = malloc(stacksz); if (stack == NULL) return (ENOMEM); + stacksz = (((uintptr_t)stack + stacksz) & ~PSPAWN_STACK_ALIGNBYTES) - + (uintptr_t)stack; #endif psa.path = path; psa.fa = fa; @@ -271,8 +310,7 @@ do_posix_spawn(pid_t *pid, const char *path, * parent. Because of this, we must use rfork_thread instead while * almost every other arch stores the return address in a register. */ - p = rfork_thread(RFSPAWN, stack + _RFORK_THREAD_STACK_SIZE, - _posix_spawn_thr, &psa); + p = rfork_thread(RFSPAWN, stack + stacksz, _posix_spawn_thr, &psa); free(stack); #else p = rfork(RFSPAWN); Modified: releng/11.4/lib/libc/tests/gen/Makefile ============================================================================== --- releng/11.4/lib/libc/tests/gen/Makefile Wed Jul 8 19:58:00 2020 (r363024) +++ releng/11.4/lib/libc/tests/gen/Makefile Wed Jul 8 20:08:05 2020 (r363025) @@ -20,6 +20,15 @@ ATF_TESTS_C+= wordexp_test # TODO: t_siginfo (fixes require further inspection) # TODO: t_sethostname_test (consistently screws up the hostname) +FILESGROUPS+= posix_spawn_test_FILES + +posix_spawn_test_FILES= spawnp_enoexec.sh +posix_spawn_test_FILESDIR= ${TESTSDIR} +posix_spawn_test_FILESMODE= 0755 +posix_spawn_test_FILESOWN= root +posix_spawn_test_FILESGRP= wheel +posix_spawn_test_FILESPACKAGE= ${PACKAGE} + CFLAGS+= -DTEST_LONG_DOUBLE # Not sure why this isn't defined for all architectures, since most Modified: releng/11.4/lib/libc/tests/gen/posix_spawn_test.c ============================================================================== --- releng/11.4/lib/libc/tests/gen/posix_spawn_test.c Wed Jul 8 19:58:00 2020 (r363024) +++ releng/11.4/lib/libc/tests/gen/posix_spawn_test.c Wed Jul 8 20:08:05 2020 (r363025) @@ -93,11 +93,50 @@ ATF_TC_BODY(posix_spawn_no_such_command_negative_test, } } +ATF_TC_WITHOUT_HEAD(posix_spawnp_enoexec_fallback); +ATF_TC_BODY(posix_spawnp_enoexec_fallback, tc) +{ + char buf[FILENAME_MAX]; + char *myargs[2]; + int error, status; + pid_t pid, waitres; + + snprintf(buf, sizeof(buf), "%s/spawnp_enoexec.sh", + atf_tc_get_config_var(tc, "srcdir")); + myargs[0] = buf; + myargs[1] = NULL; + error = posix_spawnp(&pid, myargs[0], NULL, NULL, myargs, myenv); + ATF_REQUIRE(error == 0); + waitres = waitpid(pid, &status, 0); + ATF_REQUIRE(waitres == pid); + ATF_REQUIRE(WIFEXITED(status) && WEXITSTATUS(status) == 42); +} + +ATF_TC_WITHOUT_HEAD(posix_spawnp_enoexec_fallback_null_argv0); +ATF_TC_BODY(posix_spawnp_enoexec_fallback_null_argv0, tc) +{ + char buf[FILENAME_MAX]; + char *myargs[1]; + int error, status; + pid_t pid, waitres; + + snprintf(buf, sizeof(buf), "%s/spawnp_enoexec.sh", + atf_tc_get_config_var(tc, "srcdir")); + myargs[0] = NULL; + error = posix_spawnp(&pid, buf, NULL, NULL, myargs, myenv); + ATF_REQUIRE(error == 0); + waitres = waitpid(pid, &status, 0); + ATF_REQUIRE(waitres == pid); + ATF_REQUIRE(WIFEXITED(status) && WEXITSTATUS(status) == 42); +} + ATF_TP_ADD_TCS(tp) { ATF_TP_ADD_TC(tp, posix_spawn_simple_test); ATF_TP_ADD_TC(tp, posix_spawn_no_such_command_negative_test); + ATF_TP_ADD_TC(tp, posix_spawnp_enoexec_fallback); + ATF_TP_ADD_TC(tp, posix_spawnp_enoexec_fallback_null_argv0); return (atf_no_error()); } Added: releng/11.4/lib/libc/tests/gen/spawnp_enoexec.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ releng/11.4/lib/libc/tests/gen/spawnp_enoexec.sh Wed Jul 8 20:08:05 2020 (r363025) @@ -0,0 +1,4 @@ +# $FreeBSD$ +# Intentionally no interpreter + +exit 42 From owner-svn-src-all@freebsd.org Wed Jul 8 20:11:41 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id EDF4036DE6D; Wed, 8 Jul 2020 20:11:41 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B29SF62b9z3c90; Wed, 8 Jul 2020 20:11:41 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A581C25BA4; Wed, 8 Jul 2020 20:11:41 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068KBfmd029382; Wed, 8 Jul 2020 20:11:41 GMT (envelope-from gordon@FreeBSD.org) Received: (from gordon@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068KBejP029378; Wed, 8 Jul 2020 20:11:40 GMT (envelope-from gordon@FreeBSD.org) Message-Id: <202007082011.068KBejP029378@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gordon set sender to gordon@FreeBSD.org using -f From: Gordon Tetlow Date: Wed, 8 Jul 2020 20:11:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-releng@freebsd.org Subject: svn commit: r363026 - in releng: 11.3/sys/netinet6 11.4/sys/netinet6 12.1/sys/netinet6 X-SVN-Group: releng X-SVN-Commit-Author: gordon X-SVN-Commit-Paths: in releng: 11.3/sys/netinet6 11.4/sys/netinet6 12.1/sys/netinet6 X-SVN-Commit-Revision: 363026 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 20:11:42 -0000 Author: gordon Date: Wed Jul 8 20:11:40 2020 New Revision: 363026 URL: https://svnweb.freebsd.org/changeset/base/363026 Log: Fix IPv6 socket option race condition and use after free. Approved by: so Security: FreeBSD-SA-20:20.ipv6 Security: CVE-2020-7457 Modified: releng/11.3/sys/netinet6/ip6_output.c releng/11.4/sys/netinet6/ip6_output.c releng/12.1/sys/netinet6/ip6_output.c Modified: releng/11.3/sys/netinet6/ip6_output.c ============================================================================== --- releng/11.3/sys/netinet6/ip6_output.c Wed Jul 8 20:08:05 2020 (r363025) +++ releng/11.3/sys/netinet6/ip6_output.c Wed Jul 8 20:11:40 2020 (r363026) @@ -1498,8 +1498,10 @@ ip6_ctloutput(struct socket *so, struct sockopt *sopt) error = soopt_mcopyin(sopt, m); /* XXX */ if (error != 0) break; + INP_WLOCK(in6p); error = ip6_pcbopts(&in6p->in6p_outputopts, m, so, sopt); + INP_WUNLOCK(in6p); m_freem(m); /* XXX */ break; } @@ -2244,8 +2246,11 @@ ip6_pcbopts(struct ip6_pktopts **pktopt, struct mbuf * printf("ip6_pcbopts: all specified options are cleared.\n"); #endif ip6_clearpktopts(opt, -1); - } else - opt = malloc(sizeof(*opt), M_IP6OPT, M_WAITOK); + } else { + opt = malloc(sizeof(*opt), M_IP6OPT, M_NOWAIT); + if (opt == NULL) + return (ENOMEM); + } *pktopt = NULL; if (!m || m->m_len == 0) { Modified: releng/11.4/sys/netinet6/ip6_output.c ============================================================================== --- releng/11.4/sys/netinet6/ip6_output.c Wed Jul 8 20:08:05 2020 (r363025) +++ releng/11.4/sys/netinet6/ip6_output.c Wed Jul 8 20:11:40 2020 (r363026) @@ -1514,8 +1514,10 @@ ip6_ctloutput(struct socket *so, struct sockopt *sopt) error = soopt_mcopyin(sopt, m); /* XXX */ if (error != 0) break; + INP_WLOCK(in6p); error = ip6_pcbopts(&in6p->in6p_outputopts, m, so, sopt); + INP_WUNLOCK(in6p); m_freem(m); /* XXX */ break; } @@ -2260,8 +2262,11 @@ ip6_pcbopts(struct ip6_pktopts **pktopt, struct mbuf * printf("ip6_pcbopts: all specified options are cleared.\n"); #endif ip6_clearpktopts(opt, -1); - } else - opt = malloc(sizeof(*opt), M_IP6OPT, M_WAITOK); + } else { + opt = malloc(sizeof(*opt), M_IP6OPT, M_NOWAIT); + if (opt == NULL) + return (ENOMEM); + } *pktopt = NULL; if (!m || m->m_len == 0) { Modified: releng/12.1/sys/netinet6/ip6_output.c ============================================================================== --- releng/12.1/sys/netinet6/ip6_output.c Wed Jul 8 20:08:05 2020 (r363025) +++ releng/12.1/sys/netinet6/ip6_output.c Wed Jul 8 20:11:40 2020 (r363026) @@ -1544,8 +1544,10 @@ ip6_ctloutput(struct socket *so, struct sockopt *sopt) error = soopt_mcopyin(sopt, m); /* XXX */ if (error != 0) break; + INP_WLOCK(in6p); error = ip6_pcbopts(&in6p->in6p_outputopts, m, so, sopt); + INP_WUNLOCK(in6p); m_freem(m); /* XXX */ break; } @@ -2305,8 +2307,11 @@ ip6_pcbopts(struct ip6_pktopts **pktopt, struct mbuf * printf("ip6_pcbopts: all specified options are cleared.\n"); #endif ip6_clearpktopts(opt, -1); - } else - opt = malloc(sizeof(*opt), M_IP6OPT, M_WAITOK); + } else { + opt = malloc(sizeof(*opt), M_IP6OPT, M_NOWAIT); + if (opt == NULL) + return (ENOMEM); + } *pktopt = NULL; if (!m || m->m_len == 0) { From owner-svn-src-all@freebsd.org Wed Jul 8 20:21:01 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2F48736E390; Wed, 8 Jul 2020 20:21:01 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B29g10cxbz3cln; Wed, 8 Jul 2020 20:21:01 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id ED87125C98; Wed, 8 Jul 2020 20:21:00 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068KL0cN031841; Wed, 8 Jul 2020 20:21:00 GMT (envelope-from gordon@FreeBSD.org) Received: (from gordon@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068KL0FR031836; Wed, 8 Jul 2020 20:21:00 GMT (envelope-from gordon@FreeBSD.org) Message-Id: <202007082021.068KL0FR031836@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gordon set sender to gordon@FreeBSD.org using -f From: Gordon Tetlow Date: Wed, 8 Jul 2020 20:21:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-releng@freebsd.org Subject: svn commit: r363027 - in releng/11.3: . contrib/unbound contrib/unbound/.github contrib/unbound/cachedb contrib/unbound/compat contrib/unbound/contrib contrib/unbound/daemon contrib/unbound/dns64 c... X-SVN-Group: releng X-SVN-Commit-Author: gordon X-SVN-Commit-Paths: in releng/11.3: . contrib/unbound contrib/unbound/.github contrib/unbound/cachedb contrib/unbound/compat contrib/unbound/contrib contrib/unbound/daemon contrib/unbound/dns64 contrib/unbound/dnscrypt c... X-SVN-Commit-Revision: 363027 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 20:21:01 -0000 Author: gordon Date: Wed Jul 8 20:20:59 2020 New Revision: 363027 URL: https://svnweb.freebsd.org/changeset/base/363027 Log: Fix multiple vulnerabilities in unbound. Approved by: so Security: FreeBSD-SA-20:19.unbound Security: CVE-2020-12662 Security: CVE-2020-12663 Added: releng/11.3/contrib/unbound/.gitattributes releng/11.3/contrib/unbound/.github/ releng/11.3/contrib/unbound/.github/FUNDING.yml releng/11.3/contrib/unbound/.travis.yml releng/11.3/contrib/unbound/README.md releng/11.3/contrib/unbound/cachedb/redis.c releng/11.3/contrib/unbound/cachedb/redis.h releng/11.3/contrib/unbound/compat/getentropy_freebsd.c releng/11.3/contrib/unbound/contrib/drop-tld.diff releng/11.3/contrib/unbound/contrib/drop2rpz releng/11.3/contrib/unbound/contrib/fastrpz.patch releng/11.3/contrib/unbound/contrib/libunbound.so.conf releng/11.3/contrib/unbound/contrib/redirect-bogus.patch releng/11.3/contrib/unbound/contrib/unbound-fuzzme.patch releng/11.3/contrib/unbound/contrib/unbound-querycachedb.py releng/11.3/contrib/unbound/contrib/unbound.service.in releng/11.3/contrib/unbound/contrib/unbound.socket.in releng/11.3/contrib/unbound/contrib/unbound_portable.service.in releng/11.3/contrib/unbound/dnscrypt/ releng/11.3/contrib/unbound/dnscrypt/cert.h releng/11.3/contrib/unbound/dnscrypt/dnscrypt.c releng/11.3/contrib/unbound/dnscrypt/dnscrypt.h releng/11.3/contrib/unbound/dnscrypt/dnscrypt.m4 releng/11.3/contrib/unbound/dnscrypt/dnscrypt_config.h releng/11.3/contrib/unbound/dnscrypt/dnscrypt_config.h.in releng/11.3/contrib/unbound/doc/README.ipset.md releng/11.3/contrib/unbound/edns-subnet/ releng/11.3/contrib/unbound/edns-subnet/addrtree.c releng/11.3/contrib/unbound/edns-subnet/addrtree.h releng/11.3/contrib/unbound/edns-subnet/edns-subnet.c releng/11.3/contrib/unbound/edns-subnet/edns-subnet.h releng/11.3/contrib/unbound/edns-subnet/subnet-whitelist.c releng/11.3/contrib/unbound/edns-subnet/subnet-whitelist.h releng/11.3/contrib/unbound/edns-subnet/subnetmod.c releng/11.3/contrib/unbound/edns-subnet/subnetmod.h releng/11.3/contrib/unbound/ipsecmod/ releng/11.3/contrib/unbound/ipsecmod/ipsecmod-whitelist.c releng/11.3/contrib/unbound/ipsecmod/ipsecmod-whitelist.h releng/11.3/contrib/unbound/ipsecmod/ipsecmod.c releng/11.3/contrib/unbound/ipsecmod/ipsecmod.h releng/11.3/contrib/unbound/ipset/ releng/11.3/contrib/unbound/ipset/ipset.c releng/11.3/contrib/unbound/ipset/ipset.h releng/11.3/contrib/unbound/respip/ releng/11.3/contrib/unbound/respip/respip.c releng/11.3/contrib/unbound/respip/respip.h releng/11.3/contrib/unbound/services/authzone.c releng/11.3/contrib/unbound/services/authzone.h releng/11.3/contrib/unbound/services/rpz.c releng/11.3/contrib/unbound/services/rpz.h releng/11.3/contrib/unbound/services/view.c releng/11.3/contrib/unbound/services/view.h releng/11.3/contrib/unbound/systemd.m4 releng/11.3/contrib/unbound/util/edns.c releng/11.3/contrib/unbound/util/edns.h releng/11.3/contrib/unbound/util/shm_side/ releng/11.3/contrib/unbound/util/shm_side/shm_main.c releng/11.3/contrib/unbound/util/shm_side/shm_main.h releng/11.3/contrib/unbound/util/tcp_conn_limit.c releng/11.3/contrib/unbound/util/tcp_conn_limit.h releng/11.3/usr.sbin/unbound/config.h (contents, props changed) releng/11.3/usr.sbin/unbound/setup/ releng/11.3/usr.sbin/unbound/setup/Makefile (contents, props changed) releng/11.3/usr.sbin/unbound/setup/Makefile.depend (contents, props changed) releng/11.3/usr.sbin/unbound/setup/local-unbound-setup.sh (contents, props changed) Deleted: releng/11.3/contrib/unbound/config.h releng/11.3/contrib/unbound/libunbound/python/ releng/11.3/usr.sbin/unbound/local-setup/ Modified: releng/11.3/ObsoleteFiles.inc releng/11.3/contrib/unbound/Makefile.in releng/11.3/contrib/unbound/ac_pkg_swig.m4 releng/11.3/contrib/unbound/aclocal.m4 releng/11.3/contrib/unbound/acx_nlnetlabs.m4 releng/11.3/contrib/unbound/acx_python.m4 releng/11.3/contrib/unbound/cachedb/cachedb.c releng/11.3/contrib/unbound/cachedb/cachedb.h releng/11.3/contrib/unbound/compat/arc4_lock.c releng/11.3/contrib/unbound/compat/arc4random.c releng/11.3/contrib/unbound/compat/ctime_r.c releng/11.3/contrib/unbound/compat/getentropy_linux.c releng/11.3/contrib/unbound/compat/getentropy_osx.c releng/11.3/contrib/unbound/compat/getentropy_solaris.c releng/11.3/contrib/unbound/compat/getentropy_win.c releng/11.3/contrib/unbound/compat/malloc.c releng/11.3/contrib/unbound/compat/snprintf.c releng/11.3/contrib/unbound/config.guess releng/11.3/contrib/unbound/config.h.in releng/11.3/contrib/unbound/config.sub releng/11.3/contrib/unbound/configure releng/11.3/contrib/unbound/configure.ac releng/11.3/contrib/unbound/contrib/README releng/11.3/contrib/unbound/contrib/aaaa-filter-iterator.patch releng/11.3/contrib/unbound/contrib/create_unbound_ad_servers.sh releng/11.3/contrib/unbound/contrib/libunbound.pc.in releng/11.3/contrib/unbound/contrib/parseunbound.pl releng/11.3/contrib/unbound/contrib/unbound.init releng/11.3/contrib/unbound/contrib/unbound.init_fedora releng/11.3/contrib/unbound/contrib/unbound_munin_ releng/11.3/contrib/unbound/daemon/acl_list.c releng/11.3/contrib/unbound/daemon/acl_list.h releng/11.3/contrib/unbound/daemon/cachedump.c releng/11.3/contrib/unbound/daemon/cachedump.h releng/11.3/contrib/unbound/daemon/daemon.c releng/11.3/contrib/unbound/daemon/daemon.h releng/11.3/contrib/unbound/daemon/remote.c releng/11.3/contrib/unbound/daemon/remote.h releng/11.3/contrib/unbound/daemon/stats.c releng/11.3/contrib/unbound/daemon/stats.h releng/11.3/contrib/unbound/daemon/unbound.c releng/11.3/contrib/unbound/daemon/worker.c releng/11.3/contrib/unbound/daemon/worker.h releng/11.3/contrib/unbound/dns64/dns64.c releng/11.3/contrib/unbound/dnstap/dnstap.c releng/11.3/contrib/unbound/dnstap/dnstap.proto releng/11.3/contrib/unbound/doc/Changelog releng/11.3/contrib/unbound/doc/README releng/11.3/contrib/unbound/doc/TODO releng/11.3/contrib/unbound/doc/example.conf releng/11.3/contrib/unbound/doc/example.conf.in releng/11.3/contrib/unbound/doc/libunbound.3 releng/11.3/contrib/unbound/doc/libunbound.3.in releng/11.3/contrib/unbound/doc/requirements.txt releng/11.3/contrib/unbound/doc/unbound-anchor.8 releng/11.3/contrib/unbound/doc/unbound-anchor.8.in releng/11.3/contrib/unbound/doc/unbound-checkconf.8 releng/11.3/contrib/unbound/doc/unbound-checkconf.8.in releng/11.3/contrib/unbound/doc/unbound-control.8 releng/11.3/contrib/unbound/doc/unbound-control.8.in releng/11.3/contrib/unbound/doc/unbound-host.1 releng/11.3/contrib/unbound/doc/unbound-host.1.in releng/11.3/contrib/unbound/doc/unbound.8 releng/11.3/contrib/unbound/doc/unbound.8.in releng/11.3/contrib/unbound/doc/unbound.conf.5 releng/11.3/contrib/unbound/doc/unbound.conf.5.in releng/11.3/contrib/unbound/doc/unbound.doxygen releng/11.3/contrib/unbound/freebsd-configure.sh releng/11.3/contrib/unbound/install-sh releng/11.3/contrib/unbound/iterator/iter_delegpt.c releng/11.3/contrib/unbound/iterator/iter_delegpt.h releng/11.3/contrib/unbound/iterator/iter_donotq.h releng/11.3/contrib/unbound/iterator/iter_fwd.c releng/11.3/contrib/unbound/iterator/iter_fwd.h releng/11.3/contrib/unbound/iterator/iter_hints.c releng/11.3/contrib/unbound/iterator/iter_hints.h releng/11.3/contrib/unbound/iterator/iter_priv.h releng/11.3/contrib/unbound/iterator/iter_scrub.c releng/11.3/contrib/unbound/iterator/iter_utils.c releng/11.3/contrib/unbound/iterator/iter_utils.h releng/11.3/contrib/unbound/iterator/iterator.c releng/11.3/contrib/unbound/iterator/iterator.h releng/11.3/contrib/unbound/libunbound/context.c releng/11.3/contrib/unbound/libunbound/context.h releng/11.3/contrib/unbound/libunbound/libunbound.c releng/11.3/contrib/unbound/libunbound/libworker.c releng/11.3/contrib/unbound/libunbound/libworker.h releng/11.3/contrib/unbound/libunbound/ubsyms.def releng/11.3/contrib/unbound/libunbound/unbound-event.h releng/11.3/contrib/unbound/libunbound/unbound.h releng/11.3/contrib/unbound/libunbound/worker.h releng/11.3/contrib/unbound/ltmain.sh releng/11.3/contrib/unbound/services/cache/dns.c releng/11.3/contrib/unbound/services/cache/dns.h releng/11.3/contrib/unbound/services/cache/infra.c releng/11.3/contrib/unbound/services/cache/infra.h releng/11.3/contrib/unbound/services/cache/rrset.c releng/11.3/contrib/unbound/services/cache/rrset.h releng/11.3/contrib/unbound/services/listen_dnsport.c releng/11.3/contrib/unbound/services/listen_dnsport.h releng/11.3/contrib/unbound/services/localzone.c releng/11.3/contrib/unbound/services/localzone.h releng/11.3/contrib/unbound/services/mesh.c releng/11.3/contrib/unbound/services/mesh.h releng/11.3/contrib/unbound/services/modstack.c releng/11.3/contrib/unbound/services/modstack.h releng/11.3/contrib/unbound/services/outside_network.c releng/11.3/contrib/unbound/services/outside_network.h releng/11.3/contrib/unbound/sldns/keyraw.c releng/11.3/contrib/unbound/sldns/keyraw.h releng/11.3/contrib/unbound/sldns/parse.c releng/11.3/contrib/unbound/sldns/parse.h releng/11.3/contrib/unbound/sldns/parseutil.c releng/11.3/contrib/unbound/sldns/parseutil.h releng/11.3/contrib/unbound/sldns/rrdef.c releng/11.3/contrib/unbound/sldns/rrdef.h releng/11.3/contrib/unbound/sldns/sbuffer.c releng/11.3/contrib/unbound/sldns/sbuffer.h releng/11.3/contrib/unbound/sldns/str2wire.c releng/11.3/contrib/unbound/sldns/str2wire.h releng/11.3/contrib/unbound/sldns/wire2str.c releng/11.3/contrib/unbound/sldns/wire2str.h releng/11.3/contrib/unbound/smallapp/unbound-anchor.c releng/11.3/contrib/unbound/smallapp/unbound-checkconf.c releng/11.3/contrib/unbound/smallapp/unbound-control-setup.sh releng/11.3/contrib/unbound/smallapp/unbound-control-setup.sh.in releng/11.3/contrib/unbound/smallapp/unbound-control.c releng/11.3/contrib/unbound/smallapp/unbound-host.c releng/11.3/contrib/unbound/smallapp/worker_cb.c releng/11.3/contrib/unbound/util/alloc.c releng/11.3/contrib/unbound/util/alloc.h releng/11.3/contrib/unbound/util/config_file.c releng/11.3/contrib/unbound/util/config_file.h releng/11.3/contrib/unbound/util/configlexer.lex releng/11.3/contrib/unbound/util/configparser.y releng/11.3/contrib/unbound/util/data/dname.c releng/11.3/contrib/unbound/util/data/dname.h releng/11.3/contrib/unbound/util/data/msgencode.c releng/11.3/contrib/unbound/util/data/msgencode.h releng/11.3/contrib/unbound/util/data/msgparse.c releng/11.3/contrib/unbound/util/data/msgparse.h releng/11.3/contrib/unbound/util/data/msgreply.c releng/11.3/contrib/unbound/util/data/msgreply.h releng/11.3/contrib/unbound/util/data/packed_rrset.c releng/11.3/contrib/unbound/util/data/packed_rrset.h releng/11.3/contrib/unbound/util/fptr_wlist.c releng/11.3/contrib/unbound/util/fptr_wlist.h releng/11.3/contrib/unbound/util/iana_ports.inc releng/11.3/contrib/unbound/util/locks.c releng/11.3/contrib/unbound/util/locks.h releng/11.3/contrib/unbound/util/log.c releng/11.3/contrib/unbound/util/log.h releng/11.3/contrib/unbound/util/mini_event.c releng/11.3/contrib/unbound/util/mini_event.h releng/11.3/contrib/unbound/util/module.c releng/11.3/contrib/unbound/util/module.h releng/11.3/contrib/unbound/util/net_help.c releng/11.3/contrib/unbound/util/net_help.h releng/11.3/contrib/unbound/util/netevent.c releng/11.3/contrib/unbound/util/netevent.h releng/11.3/contrib/unbound/util/random.c releng/11.3/contrib/unbound/util/random.h releng/11.3/contrib/unbound/util/rbtree.c releng/11.3/contrib/unbound/util/rbtree.h releng/11.3/contrib/unbound/util/regional.c releng/11.3/contrib/unbound/util/rtt.c releng/11.3/contrib/unbound/util/storage/dnstree.c releng/11.3/contrib/unbound/util/storage/dnstree.h releng/11.3/contrib/unbound/util/storage/lookup3.c releng/11.3/contrib/unbound/util/storage/lruhash.c releng/11.3/contrib/unbound/util/storage/lruhash.h releng/11.3/contrib/unbound/util/storage/slabhash.c releng/11.3/contrib/unbound/util/storage/slabhash.h releng/11.3/contrib/unbound/util/timehist.c releng/11.3/contrib/unbound/util/timehist.h releng/11.3/contrib/unbound/util/tube.c releng/11.3/contrib/unbound/util/tube.h releng/11.3/contrib/unbound/util/ub_event.c releng/11.3/contrib/unbound/util/ub_event.h releng/11.3/contrib/unbound/util/ub_event_pluggable.c releng/11.3/contrib/unbound/util/winsock_event.c releng/11.3/contrib/unbound/util/winsock_event.h releng/11.3/contrib/unbound/validator/autotrust.c releng/11.3/contrib/unbound/validator/autotrust.h releng/11.3/contrib/unbound/validator/val_anchor.c releng/11.3/contrib/unbound/validator/val_anchor.h releng/11.3/contrib/unbound/validator/val_kcache.c releng/11.3/contrib/unbound/validator/val_neg.c releng/11.3/contrib/unbound/validator/val_neg.h releng/11.3/contrib/unbound/validator/val_nsec.c releng/11.3/contrib/unbound/validator/val_nsec.h releng/11.3/contrib/unbound/validator/val_nsec3.c releng/11.3/contrib/unbound/validator/val_nsec3.h releng/11.3/contrib/unbound/validator/val_secalgo.c releng/11.3/contrib/unbound/validator/val_sigcrypt.c releng/11.3/contrib/unbound/validator/val_sigcrypt.h releng/11.3/contrib/unbound/validator/val_utils.c releng/11.3/contrib/unbound/validator/val_utils.h releng/11.3/contrib/unbound/validator/validator.c releng/11.3/contrib/unbound/validator/validator.h releng/11.3/etc/rc.d/local_unbound releng/11.3/lib/libunbound/Makefile releng/11.3/tools/build/mk/OptionalObsoleteFiles.inc releng/11.3/usr.sbin/unbound/Makefile releng/11.3/usr.sbin/unbound/Makefile.inc releng/11.3/usr.sbin/unbound/anchor/Makefile releng/11.3/usr.sbin/unbound/checkconf/Makefile releng/11.3/usr.sbin/unbound/control/Makefile releng/11.3/usr.sbin/unbound/daemon/Makefile Modified: releng/11.3/ObsoleteFiles.inc ============================================================================== --- releng/11.3/ObsoleteFiles.inc Wed Jul 8 20:11:40 2020 (r363026) +++ releng/11.3/ObsoleteFiles.inc Wed Jul 8 20:20:59 2020 (r363027) @@ -474,6 +474,16 @@ OLD_FILES+=usr/include/c++/v1/tr1/__undef_min_max OLD_FILES+=usr/share/dtrace/watch_execve OLD_FILES+=usr/share/dtrace/watch_kill OLD_FILES+=usr/share/dtrace/watch_vop_remove +# 20180512: Rename Unbound tools +OLD_FILES+=usr/sbin/unbound +OLD_FILES+=usr/sbin/unbound-anchor +OLD_FILES+=usr/sbin/unbound-checkconf +OLD_FILES+=usr/sbin/unbound-control +OLD_FILES+=usr/share/man/man5/unbound.conf.5.gz +OLD_FILES+=usr/share/man/man8/unbound-anchor.8.gz +OLD_FILES+=usr/share/man/man8/unbound-checkconf.8.gz +OLD_FILES+=usr/share/man/man8/unbound-control.8.gz +OLD_FILES+=usr/share/man/man8/unbound.8.gz # 20180331: new clang import which bumps version from 5.0.1 to 6.0.0. OLD_FILES+=usr/lib/clang/5.0.1/include/sanitizer/allocator_interface.h OLD_FILES+=usr/lib/clang/5.0.1/include/sanitizer/asan_interface.h Added: releng/11.3/contrib/unbound/.gitattributes ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ releng/11.3/contrib/unbound/.gitattributes Wed Jul 8 20:20:59 2020 (r363027) @@ -0,0 +1 @@ +testdata/*.[0-9] linguist-documentation Added: releng/11.3/contrib/unbound/.github/FUNDING.yml ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ releng/11.3/contrib/unbound/.github/FUNDING.yml Wed Jul 8 20:20:59 2020 (r363027) @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: ['https://nlnetlabs.nl/funding/'] Added: releng/11.3/contrib/unbound/.travis.yml ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ releng/11.3/contrib/unbound/.travis.yml Wed Jul 8 20:20:59 2020 (r363027) @@ -0,0 +1,16 @@ +sudo: false +language: c +compiler: + - gcc +addons: + apt: + packages: + - libssl-dev + - libevent-dev + - libexpat-dev + - clang +script: + - ./configure --enable-debug --disable-flto + - make + - make test + - (cd testdata/clang-analysis.tdir; bash clang-analysis.test) Modified: releng/11.3/contrib/unbound/Makefile.in ============================================================================== --- releng/11.3/contrib/unbound/Makefile.in Wed Jul 8 20:11:40 2020 (r363026) +++ releng/11.3/contrib/unbound/Makefile.in Wed Jul 8 20:20:59 2020 (r363027) @@ -23,6 +23,8 @@ CHECKLOCK_SRC=testcode/checklocks.c CHECKLOCK_OBJ=@CHECKLOCK_OBJ@ DNSTAP_SRC=@DNSTAP_SRC@ DNSTAP_OBJ=@DNSTAP_OBJ@ +DNSCRYPT_SRC=@DNSCRYPT_SRC@ +DNSCRYPT_OBJ=@DNSCRYPT_OBJ@ WITH_PYTHONMODULE=@WITH_PYTHONMODULE@ WITH_PYUNBOUND=@WITH_PYUNBOUND@ PY_MAJOR_VERSION=@PY_MAJOR_VERSION@ @@ -55,7 +57,7 @@ STRIP=@STRIP@ CC=@CC@ CPPFLAGS=-I. @CPPFLAGS@ PYTHON_CPPFLAGS=-I. @PYTHON_CPPFLAGS@ -CFLAGS=@CFLAGS@ +CFLAGS=-DSRCDIR=$(srcdir) @CFLAGS@ LDFLAGS=@LDFLAGS@ LIBS=@LIBS@ LIBOBJS=@LIBOBJS@ @@ -81,7 +83,7 @@ LINTFLAGS+=@NETBSD_LINTFLAGS@ # compat with OpenBSD LINTFLAGS+="-Dsigset_t=long" # FreeBSD -LINTFLAGS+="-D__uint16_t=uint16_t" "-DEVP_PKEY_ASN1_METHOD=int" "-D_RuneLocale=int" "-D__va_list=va_list" "-D__uint32_t=uint32_t" +LINTFLAGS+="-D__uint16_t=uint16_t" "-DEVP_PKEY_ASN1_METHOD=int" "-D_RuneLocale=int" "-D__va_list=va_list" "-D__uint32_t=uint32_t" "-D_Alignof(x)=x" "-D__aligned(x)=" "-D__requires_exclusive(x)=" "-D__requires_unlocked(x)=" "-D__locks_exclusive(x)=" "-D__trylocks_exclusive(x)=" "-D__unlocks(x)=" "-D__locks_shared(x)=" "-D__trylocks_shared(x)=" INSTALL=$(SHELL) $(srcdir)/install-sh @@ -95,36 +97,50 @@ PYTHONMOD_HEADER=@PYTHONMOD_HEADER@ PYUNBOUND_SRC= # libunbound_wrap.lo if python libunbound wrapper enabled. PYUNBOUND_OBJ=@PYUNBOUND_OBJ@ +SUBNET_SRC=edns-subnet/edns-subnet.c edns-subnet/subnetmod.c edns-subnet/addrtree.c edns-subnet/subnet-whitelist.c +SUBNET_OBJ=@SUBNET_OBJ@ +SUBNET_HEADER=@SUBNET_HEADER@ +IPSECMOD_SRC=ipsecmod/ipsecmod.c ipsecmod/ipsecmod-whitelist.c +IPSECMOD_OBJ=@IPSECMOD_OBJ@ +IPSECMOD_HEADER=@IPSECMOD_HEADER@ COMMON_SRC=services/cache/dns.c services/cache/infra.c services/cache/rrset.c \ util/as112.c util/data/dname.c util/data/msgencode.c util/data/msgparse.c \ util/data/msgreply.c util/data/packed_rrset.c iterator/iterator.c \ iterator/iter_delegpt.c iterator/iter_donotq.c iterator/iter_fwd.c \ iterator/iter_hints.c iterator/iter_priv.c iterator/iter_resptype.c \ iterator/iter_scrub.c iterator/iter_utils.c services/listen_dnsport.c \ -services/localzone.c services/mesh.c services/modstack.c \ +services/localzone.c services/mesh.c services/modstack.c services/view.c \ +services/rpz.c \ services/outbound_list.c services/outside_network.c util/alloc.c \ util/config_file.c util/configlexer.c util/configparser.c \ +util/shm_side/shm_main.c services/authzone.c \ util/fptr_wlist.c util/locks.c util/log.c util/mini_event.c util/module.c \ util/netevent.c util/net_help.c util/random.c util/rbtree.c util/regional.c \ -util/rtt.c util/storage/dnstree.c util/storage/lookup3.c \ -util/storage/lruhash.c util/storage/slabhash.c util/timehist.c util/tube.c \ +util/rtt.c util/edns.c util/storage/dnstree.c util/storage/lookup3.c \ +util/storage/lruhash.c util/storage/slabhash.c util/tcp_conn_limit.c \ +util/timehist.c util/tube.c \ util/ub_event.c util/ub_event_pluggable.c util/winsock_event.c \ validator/autotrust.c validator/val_anchor.c validator/validator.c \ validator/val_kcache.c validator/val_kentry.c validator/val_neg.c \ validator/val_nsec3.c validator/val_nsec.c validator/val_secalgo.c \ -validator/val_sigcrypt.c validator/val_utils.c dns64/dns64.c cachedb/cachedb.c $(CHECKLOCK_SRC) \ -$(DNSTAP_SRC) +validator/val_sigcrypt.c validator/val_utils.c dns64/dns64.c \ +edns-subnet/edns-subnet.c edns-subnet/subnetmod.c \ +edns-subnet/addrtree.c edns-subnet/subnet-whitelist.c \ +cachedb/cachedb.c cachedb/redis.c respip/respip.c $(CHECKLOCK_SRC) \ +$(DNSTAP_SRC) $(DNSCRYPT_SRC) $(IPSECMOD_SRC) $(IPSET_SRC) COMMON_OBJ_WITHOUT_NETCALL=dns.lo infra.lo rrset.lo dname.lo msgencode.lo \ as112.lo msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \ iter_donotq.lo iter_fwd.lo iter_hints.lo iter_priv.lo iter_resptype.lo \ -iter_scrub.lo iter_utils.lo localzone.lo mesh.lo modstack.lo \ +iter_scrub.lo iter_utils.lo localzone.lo mesh.lo modstack.lo view.lo \ outbound_list.lo alloc.lo config_file.lo configlexer.lo configparser.lo \ -fptr_wlist.lo locks.lo log.lo mini_event.lo module.lo net_help.lo \ +fptr_wlist.lo edns.lo locks.lo log.lo mini_event.lo module.lo net_help.lo \ random.lo rbtree.lo regional.lo rtt.lo dnstree.lo lookup3.lo lruhash.lo \ -slabhash.lo timehist.lo tube.lo winsock_event.lo autotrust.lo val_anchor.lo \ +slabhash.lo tcp_conn_limit.lo timehist.lo tube.lo winsock_event.lo \ +autotrust.lo val_anchor.lo rpz.lo \ validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \ -val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo \ -$(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) +val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo redis.lo authzone.lo \ +$(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \ +$(IPSECMOD_OBJ) $(IPSET_OBJ) respip.lo COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \ outside_network.lo COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo @@ -133,7 +149,7 @@ COMMON_OBJ_ALL_SYMBOLS=@COMMON_OBJ_ALL_SYMBOLS@ COMPAT_SRC=compat/ctime_r.c compat/fake-rfc2553.c compat/gmtime_r.c \ compat/inet_aton.c compat/inet_ntop.c compat/inet_pton.c compat/malloc.c \ compat/memcmp.c compat/memmove.c compat/snprintf.c compat/strlcat.c \ -compat/strlcpy.c compat/strptime.c compat/getentropy_linux.c \ +compat/strlcpy.c compat/strptime.c compat/getentropy_freebsd.c compat/getentropy_linux.c \ compat/getentropy_osx.c compat/getentropy_solaris.c compat/getentropy_win.c \ compat/explicit_bzero.c compat/arc4random.c compat/arc4random_uniform.c \ compat/arc4_lock.c compat/sha512.c compat/reallocarray.c compat/isblank.c \ @@ -145,18 +161,21 @@ SLDNS_SRC=sldns/keyraw.c sldns/sbuffer.c sldns/wire2st sldns/parseutil.c sldns/rrdef.c sldns/str2wire.c SLDNS_OBJ=keyraw.lo sbuffer.lo wire2str.lo parse.lo parseutil.lo rrdef.lo \ str2wire.lo +SLDNS_ALLOCCHECK_EXTRA_OBJ=@SLDNS_ALLOCCHECK_EXTRA_OBJ@ UNITTEST_SRC=testcode/unitanchor.c testcode/unitdname.c \ testcode/unitlruhash.c testcode/unitmain.c testcode/unitmsgparse.c \ testcode/unitneg.c testcode/unitregional.c testcode/unitslabhash.c \ -testcode/unitverify.c testcode/readhex.c testcode/testpkts.c testcode/unitldns.c +testcode/unitverify.c testcode/readhex.c testcode/testpkts.c testcode/unitldns.c \ +testcode/unitecs.c testcode/unitauth.c UNITTEST_OBJ=unitanchor.lo unitdname.lo unitlruhash.lo unitmain.lo \ unitmsgparse.lo unitneg.lo unitregional.lo unitslabhash.lo unitverify.lo \ -readhex.lo testpkts.lo unitldns.lo +readhex.lo testpkts.lo unitldns.lo unitecs.lo unitauth.lo UNITTEST_OBJ_LINK=$(UNITTEST_OBJ) worker_cb.lo $(COMMON_OBJ) $(SLDNS_OBJ) \ $(COMPAT_OBJ) DAEMON_SRC=daemon/acl_list.c daemon/cachedump.c daemon/daemon.c \ daemon/remote.c daemon/stats.c daemon/unbound.c daemon/worker.c @WIN_DAEMON_SRC@ -DAEMON_OBJ=acl_list.lo cachedump.lo daemon.lo remote.lo stats.lo unbound.lo \ +DAEMON_OBJ=acl_list.lo cachedump.lo daemon.lo \ +shm_main.lo remote.lo stats.lo unbound.lo \ worker.lo @WIN_DAEMON_OBJ@ DAEMON_OBJ_LINK=$(DAEMON_OBJ) $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \ $(COMPAT_OBJ) @WIN_DAEMON_OBJ_LINK@ @@ -170,17 +189,18 @@ CONTROL_OBJ_LINK=$(CONTROL_OBJ) worker_cb.lo $(COMMON_ $(SLDNS_OBJ) $(COMPAT_OBJ) @WIN_CONTROL_OBJ_LINK@ HOST_SRC=smallapp/unbound-host.c HOST_OBJ=unbound-host.lo -HOST_OBJ_LINK=$(HOST_OBJ) $(SLDNS_OBJ) $(COMPAT_OBJ_WITHOUT_CTIMEARC4) @WIN_HOST_OBJ_LINK@ +HOST_OBJ_LINK=$(HOST_OBJ) $(SLDNS_OBJ) $(COMPAT_OBJ_WITHOUT_CTIMEARC4) $(SLDNS_ALLOCCHECK_EXTRA_OBJ) @WIN_HOST_OBJ_LINK@ UBANCHOR_SRC=smallapp/unbound-anchor.c UBANCHOR_OBJ=unbound-anchor.lo UBANCHOR_OBJ_LINK=$(UBANCHOR_OBJ) parseutil.lo \ -$(COMPAT_OBJ_WITHOUT_CTIME) @WIN_UBANCHOR_OBJ_LINK@ +$(COMPAT_OBJ_WITHOUT_CTIME) $(SLDNS_ALLOCCHECK_EXTRA_OBJ) @WIN_UBANCHOR_OBJ_LINK@ TESTBOUND_SRC=testcode/testbound.c testcode/testpkts.c \ -daemon/worker.c daemon/acl_list.c daemon/daemon.c daemon/stats.c \ +daemon/worker.c daemon/acl_list.c \ +daemon/daemon.c daemon/stats.c \ testcode/replay.c testcode/fake_event.c TESTBOUND_OBJ=testbound.lo replay.lo fake_event.lo TESTBOUND_OBJ_LINK=$(TESTBOUND_OBJ) testpkts.lo worker.lo acl_list.lo \ -daemon.lo stats.lo $(COMMON_OBJ_WITHOUT_NETCALL) ub_event.lo $(SLDNS_OBJ) \ +daemon.lo stats.lo shm_main.lo $(COMMON_OBJ_WITHOUT_NETCALL) ub_event.lo $(SLDNS_OBJ) \ $(COMPAT_OBJ) LOCKVERIFY_SRC=testcode/lock_verify.c LOCKVERIFY_OBJ=lock_verify.lo @@ -199,7 +219,7 @@ MEMSTATS_OBJ_LINK=$(MEMSTATS_OBJ) worker_cb.lo $(COMMO $(SLDNS_OBJ) ASYNCLOOK_SRC=testcode/asynclook.c ASYNCLOOK_OBJ=asynclook.lo -ASYNCLOOK_OBJ_LINK=$(ASYNCLOOK_OBJ) log.lo locks.lo $(COMPAT_OBJ) +ASYNCLOOK_OBJ_LINK=$(ASYNCLOOK_OBJ) log.lo locks.lo $(COMPAT_OBJ) @ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ@ STREAMTCP_SRC=testcode/streamtcp.c STREAMTCP_OBJ=streamtcp.lo STREAMTCP_OBJ_LINK=$(STREAMTCP_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \ @@ -211,6 +231,8 @@ DELAYER_SRC=testcode/delayer.c DELAYER_OBJ=delayer.lo DELAYER_OBJ_LINK=$(DELAYER_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \ $(SLDNS_OBJ) +IPSET_SRC=@IPSET_SRC@ +IPSET_OBJ=@IPSET_OBJ@ LIBUNBOUND_SRC=libunbound/context.c libunbound/libunbound.c \ libunbound/libworker.c LIBUNBOUND_OBJ=context.lo libunbound.lo libworker.lo ub_event_pluggable.lo @@ -238,8 +260,9 @@ ALL_SRC=$(COMMON_SRC) $(UNITTEST_SRC) $(DAEMON_SRC) \ $(MEMSTATS_SRC) $(CHECKCONF_SRC) $(LIBUNBOUND_SRC) $(HOST_SRC) \ $(ASYNCLOOK_SRC) $(STREAMTCP_SRC) $(PERF_SRC) $(DELAYER_SRC) \ $(CONTROL_SRC) $(UBANCHOR_SRC) $(PETAL_SRC) \ - $(PYTHONMOD_SRC) $(PYUNBOUND_SRC) $(WIN_DAEMON_THE_SRC)\ + $(PYTHONMOD_SRC) $(PYUNBOUND_SRC) $(WIN_DAEMON_THE_SRC) \ $(SVCINST_SRC) $(SVCUNINST_SRC) $(ANCHORUPD_SRC) $(SLDNS_SRC) + ALL_OBJ=$(COMMON_OBJ) $(UNITTEST_OBJ) $(DAEMON_OBJ) \ $(TESTBOUND_OBJ) $(LOCKVERIFY_OBJ) $(PKTVIEW_OBJ) \ $(MEMSTATS_OBJ) $(CHECKCONF_OBJ) $(LIBUNBOUND_OBJ) $(HOST_OBJ) \ @@ -250,7 +273,7 @@ ALL_OBJ=$(COMMON_OBJ) $(UNITTEST_OBJ) $(DAEMON_OBJ) \ COMPILE=$(LIBTOOL) --tag=CC --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) @PTHREAD_CFLAGS_ONLY@ LINK=$(LIBTOOL) --tag=CC --mode=link $(CC) $(staticexe) $(RUNTIME_PATH) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -LINK_LIB=$(LIBTOOL) --tag=CC --mode=link $(CC) $(RUNTIME_PATH) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(staticexe) -version-info @LIBUNBOUND_CURRENT@:@LIBUNBOUND_REVISION@:@LIBUNBOUND_AGE@ -no-undefined +LINK_LIB=$(LIBTOOL) --tag=CC --mode=link $(CC) $(RUNTIME_PATH) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -version-info @LIBUNBOUND_CURRENT@:@LIBUNBOUND_REVISION@:@LIBUNBOUND_AGE@ -no-undefined .PHONY: clean realclean doc lint all install uninstall tests test strip lib longtest longcheck check alltargets @@ -292,10 +315,11 @@ longcheck: longtest test: unittest$(EXEEXT) testbound$(EXEEXT) ./unittest$(EXEEXT) ./testbound$(EXEEXT) -s - for x in testdata/*.rpl; do echo -n "$$x "; if ./testbound$(EXEEXT) -p $$x >/dev/null 2>&1; then echo OK; else echo failed; exit 1; fi done + for x in $(srcdir)/testdata/*.rpl; do echo -n "$$x "; if ./testbound$(EXEEXT) -p $$x >/dev/null 2>&1; then echo OK; else echo failed; exit 1; fi done @echo test OK longtest: tests + if test ! $(srcdir)/testdata -ef ./testdata; then rm -rf testcode testdata; mkdir testcode testdata; cp -R $(srcdir)/testdata/*.sh $(srcdir)/testdata/*.tdir $(srcdir)/testdata/*.rpl $(srcdir)/testdata/*.crpl testdata; cp $(srcdir)/testcode/*.sh testcode; if test ! -d util; then mkdir util; fi; cp $(srcdir)/util/iana_ports.inc util; fi if test -x "`which bash`"; then bash testcode/do-tests.sh; else sh testcode/do-tests.sh; fi lib: libunbound.la unbound.h @@ -313,7 +337,7 @@ unbound-control$(EXEEXT): $(CONTROL_OBJ_LINK) libunbou $(LINK) -o $@ $(CONTROL_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) unbound-host$(EXEEXT): $(HOST_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(HOST_OBJ_LINK) -L. -L.libs -lunbound $(LIBS) + $(LINK) -o $@ $(HOST_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS) unbound-anchor$(EXEEXT): $(UBANCHOR_OBJ_LINK) libunbound.la $(LINK) -o $@ $(UBANCHOR_OBJ_LINK) -L. -L.libs -lunbound -lexpat $(SSLLIB) $(LIBS) @@ -346,7 +370,7 @@ memstats$(EXEEXT): $(MEMSTATS_OBJ_LINK) $(LINK) -o $@ $(MEMSTATS_OBJ_LINK) $(SSLLIB) $(LIBS) asynclook$(EXEEXT): $(ASYNCLOOK_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(ASYNCLOOK_OBJ_LINK) $(LIBS) -L. -L.libs -lunbound + $(LINK) -o $@ $(ASYNCLOOK_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS) streamtcp$(EXEEXT): $(STREAMTCP_OBJ_LINK) $(LINK) -o $@ $(STREAMTCP_OBJ_LINK) $(SSLLIB) $(LIBS) @@ -375,10 +399,17 @@ dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h: $(srcdir)/dnstap/dnstap.proto @-if test ! -d dnstap; then $(INSTALL) -d dnstap; fi - $(PROTOC_C) --c_out=. $(srcdir)/dnstap/dnstap.proto + $(PROTOC_C) --c_out=. --proto_path=$(srcdir) $(srcdir)/dnstap/dnstap.proto dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h +# dnscrypt +dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h \ + dnscrypt/dnscrypt_config.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/log.h \ + $(srcdir)/util/netevent.h + # Python Module pythonmod.lo pythonmod.o: $(srcdir)/pythonmod/pythonmod.c config.h \ pythonmod/interface.h \ @@ -404,7 +435,7 @@ libunbound/python/libunbound_wrap.c: $(srcdir)/libunbo # Pyunbound python unbound wrapper _unbound.la: libunbound_wrap.lo libunbound.la - $(LIBTOOL) --tag=CC --mode=link $(CC) $(RUNTIME_PATH) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -module -avoid-version -no-undefined -shared -o $@ libunbound_wrap.lo -rpath $(PYTHON_SITE_PKG) L. -L.libs -lunbound + $(LIBTOOL) --tag=CC --mode=link $(CC) $(RUNTIME_PATH) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -module -avoid-version -no-undefined -shared -o $@ libunbound_wrap.lo -rpath $(PYTHON_SITE_PKG) -L. -L.libs -lunbound util/config_file.c: util/configparser.h util/configlexer.c: $(srcdir)/util/configlexer.lex util/configparser.h @@ -426,14 +457,19 @@ clean: rm -f _unbound.la libunbound/python/libunbound_wrap.c libunbound/python/unbound.py pythonmod/interface.h pythonmod/unboundmodule.py rm -rf autom4te.cache .libs build doc/html doc/xml -realclean: clean - rm -f config.status config.log config.h.in config.h - rm -f configure config.sub config.guess ltmain.sh aclocal.m4 libtool - rm -f util/configlexer.c util/configparser.c util/configparser.h - rm -f doc/example.conf doc/libunbound.3 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound-control.8 doc/unbound.8 doc/unbound.conf.5 +distclean: clean + rm -f config.status config.log config.h + rm -f doc/example.conf doc/libunbound.3 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound-control.8 doc/unbound.8 doc/unbound.conf.5 doc/unbound-host.1 + rm -f smallapp/unbound-control-setup.sh dnstap/dnstap_config.h dnscrypt/dnscrypt_config.h contrib/libunbound.pc contrib/unbound.socket contrib/unbound.service rm -f $(TEST_BIN) rm -f Makefile +maintainer-clean: distclean + rm -f util/configlexer.c util/configparser.c util/configparser.h + +realclean: maintainer-clean + rm -f configure config.h.in config.sub config.guess ltmain.sh aclocal.m4 libtool + .SUFFIXES: .lint .c.lint: $(LINT) $(LINTFLAGS) -I. -I$(srcdir) $< @@ -456,9 +492,9 @@ doc: if test -n "$(doxygen)"; then \ $(doxygen) $(srcdir)/doc/unbound.doxygen; fi if test "$(WITH_PYUNBOUND)" = "yes" -o "$(WITH_PYTHONMODULE)" = "yes"; \ - then if test -x "`which sphinx-build 2>&1`"; then \ - sphinx-build -b html pythonmod/doc doc/html/pythonmod; \ - sphinx-build -b html libunbound/python/doc doc/html/pyunbound;\ + then if test -x "`which sphinx-build-$(PY_MAJOR_VERSION) 2>&1`"; then \ + sphinx-build-$(PY_MAJOR_VERSION) -b html pythonmod/doc doc/html/pythonmod; \ + sphinx-build-$(PY_MAJOR_VERSION) -b html libunbound/python/doc doc/html/pyunbound;\ fi ;\ fi @@ -511,6 +547,8 @@ install-all: all $(PYTHONMOD_INSTALL) $(PYUNBOUND_INST $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man8 $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man5 $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man1 + $(INSTALL) -m 755 -d $(DESTDIR)$(libdir)/pkgconfig + $(INSTALL) -m 644 contrib/libunbound.pc $(DESTDIR)$(libdir)/pkgconfig $(LIBTOOL) --mode=install cp -f unbound$(EXEEXT) $(DESTDIR)$(sbindir)/unbound$(EXEEXT) $(LIBTOOL) --mode=install cp -f unbound-checkconf$(EXEEXT) $(DESTDIR)$(sbindir)/unbound-checkconf$(EXEEXT) $(LIBTOOL) --mode=install cp -f unbound-control$(EXEEXT) $(DESTDIR)$(sbindir)/unbound-control$(EXEEXT) @@ -564,7 +602,7 @@ iana_update: DEPEND_TMP=depend1073.tmp DEPEND_TMP2=depend1074.tmp DEPEND_TARGET=Makefile -DEPEND_TARGET2=Makefile.in +DEPEND_TARGET2=$(srcdir)/Makefile.in # actions: generate deplines from gcc, # then, filter out home/xx, /usr/xx and /opt/xx lines (some cc already do this) # then, remove empty " \" lines @@ -572,7 +610,8 @@ DEPEND_TARGET2=Makefile.in # then, remove srcdir from the (generated) parser and lexer. # and mention the .lo depend: - (cd $(srcdir) ; $(CC) $(DEPFLAG) $(CPPFLAGS) $(CFLAGS) @PTHREAD_CFLAGS_ONLY@ $(ALL_SRC) $(COMPAT_SRC)) | \ + (BUILDDIR=$$PWD; cd $(srcdir) ; $(CC) $(DEPFLAG) $(CPPFLAGS) $(CFLAGS) -I$$BUILDDIR @PTHREAD_CFLAGS_ONLY@ $(ALL_SRC) $(COMPAT_SRC)) | \ + sed -e 's?'$$PWD'/config.h?config.h?g' | \ sed -e 's!'$$HOME'[^ ]* !!g' -e 's!'$$HOME'[^ ]*$$!!g' \ -e 's!/usr[^ ]* !!g' -e 's!/usr[^ ]*$$!!g' \ -e 's!/opt[^ ]* !!g' -e 's!/opt[^ ]*$$!!g' | \ @@ -584,7 +623,12 @@ depend: -e 's?$$(srcdir)/util/configparser.c?util/configparser.c?g' \ -e 's?$$(srcdir)/util/configparser.h?util/configparser.h?g' \ -e 's?$$(srcdir)/dnstap/dnstap_config.h??g' \ + -e 's?$$(srcdir)/dnstap/dnstap.pb-c.c?dnstap/dnstap.pb-c.c?g' \ + -e 's?$$(srcdir)/dnstap/dnstap.pb-c.h?dnstap/dnstap.pb-c.h?g' \ + -e 's?$$(srcdir)/dnscrypt/dnscrypt_config.h??g' \ -e 's?$$(srcdir)/pythonmod/pythonmod.h?$$(PYTHONMOD_HEADER)?g' \ + -e 's?$$(srcdir)/edns-subnet/subnetmod.h $$(srcdir)/edns-subnet/subnet-whitelist.h $$(srcdir)/edns-subnet/edns-subnet.h $$(srcdir)/edns-subnet/addrtree.h?$$(SUBNET_HEADER)?g' \ + -e 's?$$(srcdir)/ipsecmod/ipsecmod.h $$(srcdir)/ipsecmod/ipsecmod-whitelist.h?$$(IPSECMOD_HEADER)?g' \ -e 's!\(.*\)\.o[ :]*!\1.lo \1.o: !g' \ > $(DEPEND_TMP) cp $(DEPEND_TARGET) $(DEPEND_TMP2) @@ -599,24 +643,30 @@ depend: fi rm -f $(DEPEND_TMP) $(DEPEND_TMP2) +# build rules +ipset.lo ipset.o: $(srcdir)/ipset/ipset.c + # Dependencies dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \ - $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/services/cache/dns.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h $(srcdir)/validator/val_nsec.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/services/cache/dns.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h infra.lo infra.o: $(srcdir)/services/cache/infra.c config.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/util/storage/lookup3.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/config_file.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h + $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h rrset.lo rrset.o: $(srcdir)/services/cache/rrset.c config.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/regional.h $(srcdir)/util/alloc.h + $(srcdir)/util/data/msgreply.h $(srcdir)/util/regional.h $(srcdir)/util/alloc.h $(srcdir)/util/net_help.h as112.lo as112.o: $(srcdir)/util/as112.c $(srcdir)/util/as112.h dname.lo dname.o: $(srcdir)/util/data/dname.c config.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgparse.h \ @@ -625,7 +675,8 @@ msgencode.lo msgencode.o: $(srcdir)/util/data/msgencod $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/dname.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ - $(srcdir)/sldns/sbuffer.h + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h $(srcdir)/services/view.h msgparse.lo msgparse.o: $(srcdir)/util/data/msgparse.c config.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ @@ -633,9 +684,15 @@ msgparse.lo msgparse.o: $(srcdir)/util/data/msgparse.c $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h msgreply.lo msgreply.o: $(srcdir)/util/data/msgreply.c config.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/netevent.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h + $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/data/msgencode.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/module.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/respip/respip.h packed_rrset.lo packed_rrset.o: $(srcdir)/util/data/packed_rrset.c config.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/regional.h \ @@ -648,10 +705,13 @@ iterator.lo iterator.o: $(srcdir)/iterator/iterator.c $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_donotq.h \ $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_scrub.h $(srcdir)/iterator/iter_priv.h \ $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ + $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/util/config_file.h $(srcdir)/util/random.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/random.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/parseutil.h iter_delegpt.lo iter_delegpt.o: $(srcdir)/iterator/iter_delegpt.c config.h $(srcdir)/iterator/iter_delegpt.h \ $(srcdir)/util/log.h $(srcdir)/services/cache/dns.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h \ @@ -692,152 +752,267 @@ iter_utils.lo iter_utils.o: $(srcdir)/iterator/iter_ut $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/iterator/iter_hints.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/iterator/iter_donotq.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_priv.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/dns.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/util/random.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ - $(srcdir)/services/modstack.h $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_kcache.h \ - $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_sigcrypt.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h + $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ + $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_kentry.h \ + $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/sldns/str2wire.h listen_dnsport.lo listen_dnsport.o: $(srcdir)/services/listen_dnsport.c config.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/services/outside_network.h \ - $(srcdir)/util/rbtree.h $(srcdir)/util/log.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/net_help.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/services/localzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/regional.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/netevent.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/util/as112.h + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h \ + $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/data/msgencode.h $(srcdir)/util/net_help.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/as112.h mesh.lo mesh.o: $(srcdir)/services/mesh.c config.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/netevent.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/dns.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/regional.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/timehist.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/tube.h $(srcdir)/util/alloc.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/regional.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ + $(srcdir)/util/alloc.h $(srcdir)/util/edns.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/data/dname.h \ + $(srcdir)/services/listen_dnsport.h modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/services/modstack.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/dns64/dns64.h \ - $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h \ - $(srcdir)/validator/val_utils.h $(PYTHONMOD_HEADER) $(srcdir)/cachedb/cachedb.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h +view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h +rpz.lo rpz.o: $(srcdir)/services/rpz.c config.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/str2wire.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h outbound_list.lo outbound_list.o: $(srcdir)/services/outbound_list.c config.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/netevent.h + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + outside_network.lo outside_network.o: $(srcdir)/services/outside_network.c config.h \ $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/util/rtt.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/module.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/dnstap/dnstap.h + $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ + $(srcdir)/dnstap/dnstap.h alloc.lo alloc.o: $(srcdir)/util/alloc.c config.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/regional.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h config_file.lo config_file.o: $(srcdir)/util/config_file.c config.h $(srcdir)/util/log.h \ $(srcdir)/util/configyyrename.h $(srcdir)/util/config_file.h util/configparser.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/netevent.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/data/dname.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h \ - $(srcdir)/util/iana_ports.inc + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/cache/infra.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h \ + $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/util/iana_ports.inc configlexer.lo configlexer.o: util/configlexer.c config.h $(srcdir)/util/configyyrename.h \ $(srcdir)/util/config_file.h util/configparser.h configparser.lo configparser.o: util/configparser.c config.h $(srcdir)/util/configyyrename.h \ $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h +shm_main.lo shm_main.o: $(srcdir)/util/shm_side/shm_main.c config.h $(srcdir)/util/shm_side/shm_main.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/services/mesh.h \ + $(srcdir)/util/rbtree.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/respip/respip.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/tube.h +authzone.lo authzone.o: $(srcdir)/services/authzone.c config.h $(srcdir)/services/authzone.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/data/msgencode.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/random.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/outside_network.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/keyraw.h $(srcdir)/validator/val_nsec3.h \ + $(srcdir)/validator/val_secalgo.h fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/netevent.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h \ - $(srcdir)/util/rbtree.h $(srcdir)/services/outside_network.h \ - $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h \ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h \ $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/validator/val_neg.h $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h \ - $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h \ - $(PYTHONMOD_HEADER) $(srcdir)/cachedb/cachedb.h + $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound-event.h \ + $(srcdir)/libunbound/worker.h locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h module.lo module.o: $(srcdir)/util/module.c config.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h -netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/netevent.h $(srcdir)/util/ub_event.h \ - $(srcdir)/util/log.h $(srcdir)/util/net_help.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/dnstap/dnstap.h + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h +netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/ub_event.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/tcp_conn_limit.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/sldns/str2wire.h \ + $(srcdir)/dnstap/dnstap.h $(srcdir)/services/listen_dnsport.h net_help.lo net_help.o: $(srcdir)/util/net_help.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/sldns/parseutil.h \ - $(srcdir)/sldns/wire2str.h + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ + $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h random.lo random.o: $(srcdir)/util/random.c config.h $(srcdir)/util/random.h $(srcdir)/util/log.h rbtree.lo rbtree.o: $(srcdir)/util/rbtree.c config.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/netevent.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h regional.lo regional.o: $(srcdir)/util/regional.c config.h $(srcdir)/util/log.h $(srcdir)/util/regional.h -rtt.lo rtt.o: $(srcdir)/util/rtt.c config.h $(srcdir)/util/rtt.h +rtt.lo rtt.o: $(srcdir)/util/rtt.c config.h $(srcdir)/util/rtt.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h +edns.lo edns.o: $(srcdir)/util/edns.c config.h $(srcdir)/util/edns.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h dnstree.lo dnstree.o: $(srcdir)/util/storage/dnstree.c config.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/net_help.h lookup3.lo lookup3.o: $(srcdir)/util/storage/lookup3.c config.h $(srcdir)/util/storage/lookup3.h lruhash.lo lruhash.o: $(srcdir)/util/storage/lruhash.c config.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/util/module.h \ + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h slabhash.lo slabhash.o: $(srcdir)/util/storage/slabhash.c config.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h +tcp_conn_limit.lo tcp_conn_limit.o: $(srcdir)/util/tcp_conn_limit.c config.h $(srcdir)/util/regional.h \ + $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/tcp_conn_limit.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h timehist.lo timehist.o: $(srcdir)/util/timehist.c config.h $(srcdir)/util/timehist.h $(srcdir)/util/log.h tube.lo tube.o: $(srcdir)/util/tube.c config.h $(srcdir)/util/tube.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/netevent.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/mesh.h \ - $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/ub_event.h + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/ub_event.h ub_event.lo ub_event.o: $(srcdir)/util/ub_event.c config.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \ - $(srcdir)/util/netevent.h $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c config.h $(srcdir)/util/ub_event.h \ - $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h winsock_event.lo winsock_event.o: $(srcdir)/util/winsock_event.c config.h autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/validator/autotrust.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_utils.h \ - $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/dname.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/random.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/services/modstack.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/validator/val_kcache.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/keyraw.h + $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/dname.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/random.h $(srcdir)/services/mesh.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/respip/respip.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ + $(srcdir)/validator/val_kcache.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/keyraw.h val_anchor.lo val_anchor.o: $(srcdir)/validator/val_anchor.c config.h $(srcdir)/validator/val_anchor.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_sigcrypt.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/validator/autotrust.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/util/as112.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/validator/autotrust.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/as112.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/sldns/str2wire.h validator.lo validator.o: $(srcdir)/validator/validator.c config.h $(srcdir)/validator/validator.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ @@ -845,10 +1020,14 @@ validator.lo validator.o: $(srcdir)/validator/validato $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/validator/val_kcache.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_nsec.h \ $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_neg.h $(srcdir)/validator/val_sigcrypt.h \ - $(srcdir)/validator/autotrust.h $(srcdir)/services/cache/dns.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/netevent.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h \ - $(srcdir)/sldns/wire2str.h + $(srcdir)/validator/autotrust.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/respip/respip.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h val_kcache.lo val_kcache.o: $(srcdir)/validator/val_kcache.c config.h $(srcdir)/validator/val_kcache.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/validator/val_kentry.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ @@ -861,7 +1040,7 @@ val_kentry.lo val_kentry.o: $(srcdir)/validator/val_ke val_neg.lo val_neg.o: $(srcdir)/validator/val_neg.c config.h $(srcdir)/validator/val_neg.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/rbtree.h $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_utils.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/services/cache/dns.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h val_nsec3.lo val_nsec3.o: $(srcdir)/validator/val_nsec3.c config.h $(srcdir)/validator/val_nsec3.h \ @@ -873,8 +1052,8 @@ val_nsec3.lo val_nsec3.o: $(srcdir)/validator/val_nsec $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/validator/val_nsec.h $(srcdir)/sldns/sbuffer.h val_nsec.lo val_nsec.o: $(srcdir)/validator/val_nsec.c config.h $(srcdir)/validator/val_nsec.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/net_help.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h val_secalgo.lo val_secalgo.o: $(srcdir)/validator/val_secalgo.c config.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_secalgo.h \ @@ -882,36 +1061,55 @@ val_secalgo.lo val_secalgo.o: $(srcdir)/validator/val_ $(srcdir)/sldns/sbuffer.h val_sigcrypt.lo val_sigcrypt.o: $(srcdir)/validator/val_sigcrypt.c config.h \ $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_secalgo.h $(srcdir)/validator/validator.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h $(srcdir)/util/data/dname.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/sldns/keyraw.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/val_secalgo.h \ + $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/rbtree.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ + $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h \ + $(srcdir)/sldns/wire2str.h val_utils.lo val_utils.o: $(srcdir)/validator/val_utils.c config.h $(srcdir)/validator/val_utils.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_kentry.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h \ $(srcdir)/validator/val_nsec.h $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h + $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/parseutil.h dns64.lo dns64.o: $(srcdir)/dns64/dns64.c config.h $(srcdir)/dns64/dns64.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/netevent.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h -cachedb.lo cachedb.o: $(srcdir)/cachedb/cachedb.c config.h $(srcdir)/cachedb/cachedb.h $(srcdir)/util/module.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/data/msgencode.h $(srcdir)/services/cache/dns.h $(srcdir)/validator/val_neg.h \ - $(srcdir)/util/rbtree.h $(srcdir)/validator/val_secalgo.h $(srcdir)/iterator/iter_utils.h \ - $(srcdir)/iterator/iter_resptype.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \ - $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h +edns-subnet.lo edns-subnet.o: $(srcdir)/edns-subnet/edns-subnet.c config.h +subnetmod.lo subnetmod.o: $(srcdir)/edns-subnet/subnetmod.c config.h +addrtree.lo addrtree.o: $(srcdir)/edns-subnet/addrtree.c config.h $(srcdir)/util/log.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/edns-subnet/addrtree.h +subnet-whitelist.lo subnet-whitelist.o: $(srcdir)/edns-subnet/subnet-whitelist.c config.h +cachedb.lo cachedb.o: $(srcdir)/cachedb/cachedb.c config.h +redis.lo redis.o: $(srcdir)/cachedb/redis.c config.h +respip.lo respip.o: $(srcdir)/respip/respip.c config.h $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/services/cache/dns.h \ + $(srcdir)/sldns/str2wire.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/regional.h checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/testcode/checklocks.h +ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h +ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h unitanchor.lo unitanchor.o: $(srcdir)/testcode/unitanchor.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h @@ -922,9 +1120,13 @@ unitlruhash.lo unitlruhash.o: $(srcdir)/testcode/unitl $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/storage/slabhash.h unitmain.lo unitmain.o: $(srcdir)/testcode/unitmain.c config.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/random.h + $(srcdir)/util/config_file.h $(srcdir)/util/rtt.h $(srcdir)/util/timehist.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/libunbound/unbound.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/random.h $(srcdir)/respip/respip.h \ + $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h unitmsgparse.lo unitmsgparse.o: $(srcdir)/testcode/unitmsgparse.c config.h $(srcdir)/util/log.h \ $(srcdir)/testcode/unitmain.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ @@ -941,10 +1143,10 @@ unitslabhash.lo unitslabhash.o: $(srcdir)/testcode/uni $(srcdir)/util/log.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h unitverify.lo unitverify.o: $(srcdir)/testcode/unitverify.c config.h $(srcdir)/util/log.h \ $(srcdir)/testcode/unitmain.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/validator/val_secalgo.h \ - $(srcdir)/validator/val_nsec.h $(srcdir)/validator/val_nsec3.h $(srcdir)/util/rbtree.h \ - $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/validator/val_secalgo.h $(srcdir)/validator/val_nsec.h $(srcdir)/validator/val_nsec3.h \ + $(srcdir)/util/rbtree.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \ $(srcdir)/testcode/testpkts.h $(srcdir)/util/data/dname.h $(srcdir)/util/regional.h $(srcdir)/util/alloc.h \ $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/keyraw.h \ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h @@ -955,15 +1157,29 @@ testpkts.lo testpkts.o: $(srcdir)/testcode/testpkts.c $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h unitldns.lo unitldns.o: $(srcdir)/testcode/unitldns.c config.h $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h +unitecs.lo unitecs.o: $(srcdir)/testcode/unitecs.c config.h +unitauth.lo unitauth.o: $(srcdir)/testcode/unitauth.c config.h $(srcdir)/services/authzone.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/testcode/unitmain.h \ + $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h \ + $(srcdir)/sldns/wire2str.h acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/regional.h $(srcdir)/util/log.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/services/localzone.h $(srcdir)/util/locks.h \ - $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ + $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c config.h $(srcdir)/daemon/cachedump.h \ $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/netevent.h $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h \ $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h \ @@ -973,25 +1189,30 @@ cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@freebsd.org Wed Jul 8 20:22:39 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0CB0A36E51D; Wed, 8 Jul 2020 20:22:39 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B29ht6jc5z3dDG; Wed, 8 Jul 2020 20:22:38 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B16E626060; Wed, 8 Jul 2020 20:22:38 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068KMcxN036714; Wed, 8 Jul 2020 20:22:38 GMT (envelope-from gordon@FreeBSD.org) Received: (from gordon@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068KMchH036712; Wed, 8 Jul 2020 20:22:38 GMT (envelope-from gordon@FreeBSD.org) Message-Id: <202007082022.068KMchH036712@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gordon set sender to gordon@FreeBSD.org using -f From: Gordon Tetlow Date: Wed, 8 Jul 2020 20:22:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-releng@freebsd.org Subject: svn commit: r363028 - in releng/11.4: contrib/unbound contrib/unbound/.github contrib/unbound/cachedb contrib/unbound/compat contrib/unbound/contrib contrib/unbound/daemon contrib/unbound/doc contr... X-SVN-Group: releng X-SVN-Commit-Author: gordon X-SVN-Commit-Paths: in releng/11.4: contrib/unbound contrib/unbound/.github contrib/unbound/cachedb contrib/unbound/compat contrib/unbound/contrib contrib/unbound/daemon contrib/unbound/doc contrib/unbound/edns-subnet co... X-SVN-Commit-Revision: 363028 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 20:22:39 -0000 Author: gordon Date: Wed Jul 8 20:22:38 2020 New Revision: 363028 URL: https://svnweb.freebsd.org/changeset/base/363028 Log: Fix multiple vulnerabilities in unbound. Approved by: so Security: FreeBSD-SA-20:19.unbound Security: CVE-2020-12662 Security: CVE-2020-12663 Added: releng/11.4/contrib/unbound/.github/ releng/11.4/contrib/unbound/.github/FUNDING.yml releng/11.4/contrib/unbound/contrib/drop2rpz releng/11.4/contrib/unbound/contrib/unbound_portable.service.in releng/11.4/contrib/unbound/services/rpz.c releng/11.4/contrib/unbound/services/rpz.h Modified: releng/11.4/contrib/unbound/Makefile.in releng/11.4/contrib/unbound/README.md releng/11.4/contrib/unbound/aclocal.m4 releng/11.4/contrib/unbound/cachedb/cachedb.c releng/11.4/contrib/unbound/compat/getentropy_solaris.c releng/11.4/contrib/unbound/config.guess releng/11.4/contrib/unbound/config.h.in releng/11.4/contrib/unbound/config.sub releng/11.4/contrib/unbound/configure releng/11.4/contrib/unbound/configure.ac releng/11.4/contrib/unbound/contrib/README releng/11.4/contrib/unbound/contrib/fastrpz.patch releng/11.4/contrib/unbound/contrib/libunbound.pc.in releng/11.4/contrib/unbound/contrib/unbound.service.in releng/11.4/contrib/unbound/contrib/unbound_munin_ releng/11.4/contrib/unbound/daemon/daemon.c releng/11.4/contrib/unbound/daemon/daemon.h releng/11.4/contrib/unbound/daemon/remote.c releng/11.4/contrib/unbound/daemon/stats.c releng/11.4/contrib/unbound/daemon/unbound.c releng/11.4/contrib/unbound/daemon/worker.c releng/11.4/contrib/unbound/doc/Changelog releng/11.4/contrib/unbound/doc/README releng/11.4/contrib/unbound/doc/example.conf.in releng/11.4/contrib/unbound/doc/libunbound.3.in releng/11.4/contrib/unbound/doc/unbound-anchor.8.in releng/11.4/contrib/unbound/doc/unbound-checkconf.8.in releng/11.4/contrib/unbound/doc/unbound-control.8.in releng/11.4/contrib/unbound/doc/unbound-host.1.in releng/11.4/contrib/unbound/doc/unbound.8.in releng/11.4/contrib/unbound/doc/unbound.conf.5.in releng/11.4/contrib/unbound/edns-subnet/subnetmod.c releng/11.4/contrib/unbound/install-sh releng/11.4/contrib/unbound/iterator/iter_delegpt.c releng/11.4/contrib/unbound/iterator/iter_delegpt.h releng/11.4/contrib/unbound/iterator/iter_scrub.c releng/11.4/contrib/unbound/iterator/iter_utils.c releng/11.4/contrib/unbound/iterator/iterator.c releng/11.4/contrib/unbound/iterator/iterator.h releng/11.4/contrib/unbound/libunbound/context.c releng/11.4/contrib/unbound/libunbound/libworker.c releng/11.4/contrib/unbound/libunbound/unbound.h releng/11.4/contrib/unbound/respip/respip.c releng/11.4/contrib/unbound/respip/respip.h releng/11.4/contrib/unbound/services/authzone.c releng/11.4/contrib/unbound/services/authzone.h releng/11.4/contrib/unbound/services/cache/dns.c releng/11.4/contrib/unbound/services/cache/dns.h releng/11.4/contrib/unbound/services/localzone.c releng/11.4/contrib/unbound/services/localzone.h releng/11.4/contrib/unbound/services/mesh.c releng/11.4/contrib/unbound/services/mesh.h releng/11.4/contrib/unbound/services/outside_network.c releng/11.4/contrib/unbound/services/view.c releng/11.4/contrib/unbound/sldns/parse.c releng/11.4/contrib/unbound/sldns/str2wire.c releng/11.4/contrib/unbound/smallapp/unbound-checkconf.c releng/11.4/contrib/unbound/smallapp/unbound-control.c releng/11.4/contrib/unbound/util/config_file.c releng/11.4/contrib/unbound/util/config_file.h releng/11.4/contrib/unbound/util/configlexer.lex releng/11.4/contrib/unbound/util/configparser.y releng/11.4/contrib/unbound/util/data/dname.c releng/11.4/contrib/unbound/util/data/dname.h releng/11.4/contrib/unbound/util/data/msgencode.c releng/11.4/contrib/unbound/util/data/msgparse.c releng/11.4/contrib/unbound/util/data/msgparse.h releng/11.4/contrib/unbound/util/data/msgreply.c releng/11.4/contrib/unbound/util/data/packed_rrset.c releng/11.4/contrib/unbound/util/data/packed_rrset.h releng/11.4/contrib/unbound/util/fptr_wlist.c releng/11.4/contrib/unbound/util/fptr_wlist.h releng/11.4/contrib/unbound/util/iana_ports.inc releng/11.4/contrib/unbound/util/log.c releng/11.4/contrib/unbound/util/log.h releng/11.4/contrib/unbound/util/module.h releng/11.4/contrib/unbound/util/net_help.c releng/11.4/contrib/unbound/util/net_help.h releng/11.4/contrib/unbound/util/netevent.c releng/11.4/contrib/unbound/util/random.c releng/11.4/contrib/unbound/util/storage/dnstree.c releng/11.4/contrib/unbound/util/storage/dnstree.h releng/11.4/contrib/unbound/validator/val_secalgo.c releng/11.4/contrib/unbound/validator/validator.c releng/11.4/lib/libunbound/Makefile releng/11.4/usr.sbin/unbound/config.h Added: releng/11.4/contrib/unbound/.github/FUNDING.yml ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ releng/11.4/contrib/unbound/.github/FUNDING.yml Wed Jul 8 20:22:38 2020 (r363028) @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: ['https://nlnetlabs.nl/funding/'] Modified: releng/11.4/contrib/unbound/Makefile.in ============================================================================== --- releng/11.4/contrib/unbound/Makefile.in Wed Jul 8 20:20:59 2020 (r363027) +++ releng/11.4/contrib/unbound/Makefile.in Wed Jul 8 20:22:38 2020 (r363028) @@ -110,6 +110,7 @@ iterator/iter_delegpt.c iterator/iter_donotq.c iterato iterator/iter_hints.c iterator/iter_priv.c iterator/iter_resptype.c \ iterator/iter_scrub.c iterator/iter_utils.c services/listen_dnsport.c \ services/localzone.c services/mesh.c services/modstack.c services/view.c \ +services/rpz.c \ services/outbound_list.c services/outside_network.c util/alloc.c \ util/config_file.c util/configlexer.c util/configparser.c \ util/shm_side/shm_main.c services/authzone.c \ @@ -135,7 +136,7 @@ outbound_list.lo alloc.lo config_file.lo configlexer.l fptr_wlist.lo edns.lo locks.lo log.lo mini_event.lo module.lo net_help.lo \ random.lo rbtree.lo regional.lo rtt.lo dnstree.lo lookup3.lo lruhash.lo \ slabhash.lo tcp_conn_limit.lo timehist.lo tube.lo winsock_event.lo \ -autotrust.lo val_anchor.lo \ +autotrust.lo val_anchor.lo rpz.lo \ validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \ val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo redis.lo authzone.lo \ $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \ @@ -642,6 +643,9 @@ depend: fi rm -f $(DEPEND_TMP) $(DEPEND_TMP2) +# build rules +ipset.lo ipset.o: $(srcdir)/ipset/ipset.c + # Dependencies dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \ $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h $(srcdir)/validator/val_nsec.h \ @@ -654,9 +658,9 @@ infra.lo infra.o: $(srcdir)/services/cache/infra.c con $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lookup3.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h rrset.lo rrset.o: $(srcdir)/services/cache/rrset.c config.h $(srcdir)/services/cache/rrset.h \ @@ -681,11 +685,14 @@ msgparse.lo msgparse.o: $(srcdir)/util/data/msgparse.c msgreply.lo msgreply.o: $(srcdir)/util/data/msgreply.c config.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h \ - $(srcdir)/util/module.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ - $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h + $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/data/msgencode.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/module.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/respip/respip.h packed_rrset.lo packed_rrset.o: $(srcdir)/util/data/packed_rrset.c config.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/regional.h \ @@ -699,11 +706,12 @@ iterator.lo iterator.o: $(srcdir)/iterator/iterator.c $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_scrub.h $(srcdir)/iterator/iter_priv.h \ $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/authzone.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ + $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/random.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/random.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/parseutil.h iter_delegpt.lo iter_delegpt.o: $(srcdir)/iterator/iter_delegpt.c config.h $(srcdir)/iterator/iter_delegpt.h \ $(srcdir)/util/log.h $(srcdir)/services/cache/dns.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h \ @@ -745,88 +753,106 @@ iter_utils.lo iter_utils.o: $(srcdir)/iterator/iter_ut $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/iterator/iter_donotq.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_priv.h \ $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/cache/dns.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/util/random.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_kentry.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/str2wire.h + $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/sldns/str2wire.h listen_dnsport.lo listen_dnsport.o: $(srcdir)/services/listen_dnsport.c config.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/mesh.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/services/localzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h \ $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/net_help.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/as112.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/as112.h mesh.lo mesh.o: $(srcdir)/services/mesh.c config.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/dns.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/regional.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/timehist.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/tube.h $(srcdir)/util/alloc.h $(srcdir)/util/config_file.h $(srcdir)/util/edns.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/services/view.h $(srcdir)/util/data/dname.h $(srcdir)/respip/respip.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ + $(srcdir)/util/alloc.h $(srcdir)/util/edns.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/data/dname.h \ $(srcdir)/services/listen_dnsport.h modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/services/modstack.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/dns64/dns64.h \ - $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/respip/respip.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h \ - $(srcdir)/ipset/ipset.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h +rpz.lo rpz.o: $(srcdir)/services/rpz.c config.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/str2wire.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h outbound_list.lo outbound_list.o: $(srcdir)/services/outbound_list.c config.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h + outside_network.lo outside_network.o: $(srcdir)/services/outside_network.c config.h \ $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/dnstap/dnstap.h \ - + $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ + $(srcdir)/dnstap/dnstap.h alloc.lo alloc.o: $(srcdir)/util/alloc.c config.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/regional.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h + $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h config_file.lo config_file.o: $(srcdir)/util/config_file.c config.h $(srcdir)/util/log.h \ $(srcdir)/util/configyyrename.h $(srcdir)/util/config_file.h util/configparser.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/data/dname.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/cache/infra.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h \ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/util/iana_ports.inc configlexer.lo configlexer.o: util/configlexer.c config.h $(srcdir)/util/configyyrename.h \ $(srcdir)/util/config_file.h util/configparser.h @@ -837,71 +863,83 @@ shm_main.lo shm_main.o: $(srcdir)/util/shm_side/shm_ma $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/services/mesh.h \ - $(srcdir)/util/rbtree.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ - $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h + $(srcdir)/util/rbtree.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/respip/respip.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/tube.h authzone.lo authzone.o: $(srcdir)/services/authzone.c config.h $(srcdir)/services/authzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h \ - $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/util/random.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/data/msgencode.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/random.h \ $(srcdir)/services/cache/dns.h $(srcdir)/services/outside_network.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_secalgo.h + $(srcdir)/services/listen_dnsport.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/keyraw.h $(srcdir)/validator/val_nsec3.h \ + $(srcdir)/validator/val_secalgo.h fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h \ - $(srcdir)/services/outside_network.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/validator/validator.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_nsec3.h \ - $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_neg.h \ - $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h $(srcdir)/libunbound/context.h \ - $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/respip/respip.h \ - $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/net_help.h \ - $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/ipset/ipset.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h \ + $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \ + $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h \ + $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h \ + $(srcdir)/validator/val_neg.h $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h \ + $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound-event.h \ + $(srcdir)/libunbound/worker.h locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h -mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h +mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h module.lo module.o: $(srcdir)/util/module.c config.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h $(srcdir)/util/tcp_conn_limit.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/services/listen_dnsport.h \ - + $(srcdir)/util/ub_event.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/tcp_conn_limit.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/sldns/str2wire.h \ + $(srcdir)/dnstap/dnstap.h $(srcdir)/services/listen_dnsport.h net_help.lo net_help.o: $(srcdir)/util/net_help.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ - $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \ - + $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h random.lo random.o: $(srcdir)/util/random.c config.h $(srcdir)/util/random.h $(srcdir)/util/log.h rbtree.lo rbtree.o: $(srcdir)/util/rbtree.c config.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h regional.lo regional.o: $(srcdir)/util/regional.c config.h $(srcdir)/util/log.h $(srcdir)/util/regional.h rtt.lo rtt.o: $(srcdir)/util/rtt.c config.h $(srcdir)/util/rtt.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ @@ -909,19 +947,22 @@ rtt.lo rtt.o: $(srcdir)/util/rtt.c config.h $(srcdir)/ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h edns.lo edns.o: $(srcdir)/util/edns.c config.h $(srcdir)/util/edns.h $(srcdir)/util/config_file.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/regional.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h + $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h dnstree.lo dnstree.o: $(srcdir)/util/storage/dnstree.c config.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/net_help.h lookup3.lo lookup3.o: $(srcdir)/util/storage/lookup3.c config.h $(srcdir)/util/storage/lookup3.h lruhash.lo lruhash.o: $(srcdir)/util/storage/lruhash.c config.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h slabhash.lo slabhash.o: $(srcdir)/util/storage/slabhash.c config.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h tcp_conn_limit.lo tcp_conn_limit.o: $(srcdir)/util/tcp_conn_limit.c config.h $(srcdir)/util/regional.h \ @@ -929,26 +970,30 @@ tcp_conn_limit.lo tcp_conn_limit.o: $(srcdir)/util/tcp $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/services/localzone.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/str2wire.h + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h timehist.lo timehist.o: $(srcdir)/util/timehist.c config.h $(srcdir)/util/timehist.h $(srcdir)/util/log.h tube.lo tube.o: $(srcdir)/util/tube.c config.h $(srcdir)/util/tube.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/mesh.h \ - $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/ub_event.h + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/ub_event.h ub_event.lo ub_event.o: $(srcdir)/util/ub_event.c config.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/tube.h \ - + $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c config.h $(srcdir)/util/ub_event.h \ $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h \ - + $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h winsock_event.lo winsock_event.o: $(srcdir)/util/winsock_event.c config.h autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/validator/autotrust.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ @@ -957,10 +1002,11 @@ autotrust.lo autotrust.o: $(srcdir)/validator/autotrus $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/random.h $(srcdir)/services/mesh.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/modstack.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/validator/val_kcache.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/keyraw.h \ - + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/respip/respip.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ + $(srcdir)/validator/val_kcache.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/keyraw.h val_anchor.lo val_anchor.o: $(srcdir)/validator/val_anchor.c config.h $(srcdir)/validator/val_anchor.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_sigcrypt.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h \ @@ -977,8 +1023,11 @@ validator.lo validator.o: $(srcdir)/validator/validato $(srcdir)/validator/autotrust.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ - $(srcdir)/services/modstack.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/respip/respip.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h val_kcache.lo val_kcache.o: $(srcdir)/validator/val_kcache.c config.h $(srcdir)/validator/val_kcache.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/validator/val_kentry.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ @@ -987,13 +1036,11 @@ val_kcache.lo val_kcache.o: $(srcdir)/validator/val_kc val_kentry.lo val_kentry.o: $(srcdir)/validator/val_kentry.c config.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ - -val_neg.lo val_neg.o: $(srcdir)/validator/val_neg.c config.h \ - $(srcdir)/validator/val_neg.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \ - $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h +val_neg.lo val_neg.o: $(srcdir)/validator/val_neg.c config.h $(srcdir)/validator/val_neg.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/rbtree.h $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_utils.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/services/cache/dns.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h val_nsec3.lo val_nsec3.o: $(srcdir)/validator/val_nsec3.c config.h $(srcdir)/validator/val_nsec3.h \ @@ -1011,17 +1058,15 @@ val_nsec.lo val_nsec.o: $(srcdir)/validator/val_nsec.c val_secalgo.lo val_secalgo.o: $(srcdir)/validator/val_secalgo.c config.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_secalgo.h \ $(srcdir)/validator/val_nsec3.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/sldns/sbuffer.h \ - + $(srcdir)/sldns/sbuffer.h val_sigcrypt.lo val_sigcrypt.o: $(srcdir)/validator/val_sigcrypt.c config.h \ $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/val_secalgo.h \ $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/rbtree.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ - $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \ - + $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h \ + $(srcdir)/sldns/wire2str.h val_utils.lo val_utils.o: $(srcdir)/validator/val_utils.c config.h $(srcdir)/validator/val_utils.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ @@ -1037,9 +1082,11 @@ dns64.lo dns64.o: $(srcdir)/dns64/dns64.c config.h $(s $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h edns-subnet.lo edns-subnet.o: $(srcdir)/edns-subnet/edns-subnet.c config.h subnetmod.lo subnetmod.o: $(srcdir)/edns-subnet/subnetmod.c config.h addrtree.lo addrtree.o: $(srcdir)/edns-subnet/addrtree.c config.h $(srcdir)/util/log.h \ @@ -1053,36 +1100,16 @@ respip.lo respip.o: $(srcdir)/respip/respip.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h \ - $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/respip/respip.h + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/services/cache/dns.h \ + $(srcdir)/sldns/str2wire.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/regional.h checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/testcode/checklocks.h -dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/locks.h $(srcdir)/dnstap/dnstap.h \ - dnstap/dnstap.pb-c.h -dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h \ - -dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/locks.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/storage/lookup3.h ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h -ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h \ - $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h \ - $(srcdir)/ipsecmod/ipsecmod-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/regional.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h -ipset.lo ipset.o: $(srcdir)/ipset/ipset.c config.h $(srcdir)/ipset/ipset.h $(srcdir)/util/module.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h +ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h unitanchor.lo unitanchor.o: $(srcdir)/testcode/unitanchor.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h @@ -1091,16 +1118,15 @@ unitdname.lo unitdname.o: $(srcdir)/testcode/unitdname $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h unitlruhash.lo unitlruhash.o: $(srcdir)/testcode/unitlruhash.c config.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/storage/slabhash.h -unitmain.lo unitmain.o: $(srcdir)/testcode/unitmain.c config.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ +unitmain.lo unitmain.o: $(srcdir)/testcode/unitmain.c config.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/util/rtt.h $(srcdir)/util/timehist.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/libunbound/unbound.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/random.h $(srcdir)/respip/respip.h \ - $(srcdir)/services/localzone.h $(srcdir)/services/view.h + $(srcdir)/util/random.h $(srcdir)/respip/respip.h \ + $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h unitmsgparse.lo unitmsgparse.o: $(srcdir)/testcode/unitmsgparse.c config.h $(srcdir)/util/log.h \ $(srcdir)/testcode/unitmain.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ @@ -1134,59 +1160,59 @@ unitldns.lo unitldns.o: $(srcdir)/testcode/unitldns.c unitecs.lo unitecs.o: $(srcdir)/testcode/unitecs.c config.h unitauth.lo unitauth.o: $(srcdir)/testcode/unitauth.c config.h $(srcdir)/services/authzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/services/modstack.h $(srcdir)/testcode/unitmain.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/testcode/unitmain.h \ + $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h \ + $(srcdir)/sldns/wire2str.h acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h -cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c config.h \ - $(srcdir)/daemon/cachedump.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/regional.h \ - $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h +cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c config.h $(srcdir)/daemon/cachedump.h \ + $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h \ + $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h \ + $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_utils.h \ $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \ $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h -daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/worker.h \ +daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h \ + $(srcdir)/util/storage/lookup3.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/rpz.h $(srcdir)/respip/respip.h $(srcdir)/util/random.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/keyraw.h +remote.lo remote.o: $(srcdir)/daemon/remote.c config.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h \ $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h $(srcdir)/util/storage/lookup3.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/random.h \ - $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/sldns/keyraw.h $(srcdir)/respip/respip.h -remote.lo remote.o: $(srcdir)/daemon/remote.c config.h \ - $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ - $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/cachedump.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/alloc.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ + $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ + $(srcdir)/services/modstack.h $(srcdir)/daemon/cachedump.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/net_help.h $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h $(srcdir)/respip/respip.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/data/dname.h $(srcdir)/validator/validator.h \ $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \ @@ -1197,56 +1223,59 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $( $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/outside_network.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/util/config_file.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ - $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/iterator/iterator.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h \ - + $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/respip/respip.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/listen_dnsport.h $(srcdir)/util/tube.h \ + $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ + $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h unbound.lo unbound.o: $(srcdir)/daemon/unbound.c config.h $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h \ $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/remote.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h + $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/services/listen_dnsport.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/ub_event.h worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/random.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ - $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/rtt.h $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ - $(srcdir)/services/localzone.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h $(srcdir)/iterator/iter_fwd.h \ - $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h $(srcdir)/validator/val_anchor.h \ - $(srcdir)/respip/respip.h $(srcdir)/libunbound/context.h $(srcdir)/libunbound/unbound-event.h \ + $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ + $(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/listen_dnsport.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/outbound_list.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/respip/respip.h $(srcdir)/util/data/msgencode.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h \ + $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h \ + $(srcdir)/validator/val_anchor.h $(srcdir)/libunbound/context.h $(srcdir)/libunbound/unbound-event.h \ $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h testbound.lo testbound.o: $(srcdir)/testcode/testbound.c config.h $(srcdir)/testcode/testpkts.h \ $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h $(srcdir)/daemon/remote.h \ - $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/daemon/unbound.c $(srcdir)/daemon/daemon.h \ - $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h + $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h \ + $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/daemon/unbound.c \ + $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h testpkts.lo testpkts.o: $(srcdir)/testcode/testpkts.c config.h $(srcdir)/testcode/testpkts.h \ $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h @@ -1254,77 +1283,79 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/random.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ - $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/rtt.h $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ - $(srcdir)/services/localzone.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h $(srcdir)/iterator/iter_fwd.h \ - $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h $(srcdir)/validator/val_anchor.h \ - $(srcdir)/respip/respip.h $(srcdir)/libunbound/context.h $(srcdir)/libunbound/unbound-event.h \ + $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ + $(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/listen_dnsport.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/outbound_list.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/respip/respip.h $(srcdir)/util/data/msgencode.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/edns.h \ + $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h \ + $(srcdir)/validator/val_anchor.h $(srcdir)/libunbound/context.h $(srcdir)/libunbound/unbound-event.h \ $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h -daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/worker.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ - $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h $(srcdir)/util/storage/lookup3.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/random.h \ - $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/sldns/keyraw.h $(srcdir)/respip/respip.h + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h +daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/daemon/remote.h $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h \ + $(srcdir)/util/storage/lookup3.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/rpz.h $(srcdir)/respip/respip.h $(srcdir)/util/random.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/keyraw.h stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/outside_network.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/util/config_file.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ - $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/iterator/iterator.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h \ - + $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/respip/respip.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/listen_dnsport.h $(srcdir)/util/tube.h \ + $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ + $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h replay.lo replay.o: $(srcdir)/testcode/replay.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h \ - $(srcdir)/testcode/testpkts.h $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/rrdef.h + $(srcdir)/testcode/testpkts.h $(srcdir)/util/rbtree.h \ + $(srcdir)/testcode/fake_event.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h fake_event.lo fake_event.o: $(srcdir)/testcode/fake_event.c config.h $(srcdir)/testcode/fake_event.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/config_file.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ - $(srcdir)/testcode/replay.h $(srcdir)/testcode/testpkts.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h + $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ + $(srcdir)/util/rbtree.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h $(srcdir)/testcode/replay.h $(srcdir)/testcode/testpkts.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h lock_verify.lo lock_verify.o: $(srcdir)/testcode/lock_verify.c config.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h pktview.lo pktview.o: $(srcdir)/testcode/pktview.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/testcode/unitmain.h $(srcdir)/testcode/readhex.h $(srcdir)/sldns/sbuffer.h \ @@ -1333,10 +1364,13 @@ readhex.lo readhex.o: $(srcdir)/testcode/readhex.c con $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h memstats.lo memstats.o: $(srcdir)/testcode/memstats.c config.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h unbound-checkconf.lo unbound-checkconf.o: $(srcdir)/smallapp/unbound-checkconf.c config.h $(srcdir)/util/log.h \ $(srcdir)/util/config_file.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ @@ -1344,27 +1378,31 @@ unbound-checkconf.lo unbound-checkconf.o: $(srcdir)/sm $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_hints.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/services/localzone.h \ - $(srcdir)/services/view.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/services/modstack.h $(srcdir)/respip/respip.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h worker_cb.lo worker_cb.o: $(srcdir)/smallapp/worker_cb.c config.h $(srcdir)/libunbound/context.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h + $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h context.lo context.o: $(srcdir)/libunbound/context.c config.h $(srcdir)/libunbound/context.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h \ $(srcdir)/util/net_help.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/services/view.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/authzone.h \ - $(srcdir)/services/mesh.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h libunbound.lo libunbound.o: $(srcdir)/libunbound/libunbound.c $(srcdir)/libunbound/unbound.h \ $(srcdir)/libunbound/unbound-event.h config.h $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ @@ -1373,70 +1411,70 @@ libunbound.lo libunbound.o: $(srcdir)/libunbound/libun *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@freebsd.org Wed Jul 8 20:25:08 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 489A836E681; Wed, 8 Jul 2020 20:25:08 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B29lm1Q82z3dGd; Wed, 8 Jul 2020 20:25:08 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id F01D626061; Wed, 8 Jul 2020 20:25:07 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068KP7d8036904; Wed, 8 Jul 2020 20:25:07 GMT (envelope-from gordon@FreeBSD.org) Received: (from gordon@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068KP7FT036900; Wed, 8 Jul 2020 20:25:07 GMT (envelope-from gordon@FreeBSD.org) Message-Id: <202007082025.068KP7FT036900@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gordon set sender to gordon@FreeBSD.org using -f From: Gordon Tetlow Date: Wed, 8 Jul 2020 20:25:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-releng@freebsd.org Subject: svn commit: r363029 - in releng/12.1: contrib/unbound contrib/unbound/.github contrib/unbound/cachedb contrib/unbound/compat contrib/unbound/contrib contrib/unbound/daemon contrib/unbound/dns64 con... X-SVN-Group: releng X-SVN-Commit-Author: gordon X-SVN-Commit-Paths: in releng/12.1: contrib/unbound contrib/unbound/.github contrib/unbound/cachedb contrib/unbound/compat contrib/unbound/contrib contrib/unbound/daemon contrib/unbound/dns64 contrib/unbound/dnscrypt con... X-SVN-Commit-Revision: 363029 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 20:25:08 -0000 Author: gordon Date: Wed Jul 8 20:25:06 2020 New Revision: 363029 URL: https://svnweb.freebsd.org/changeset/base/363029 Log: Fix multiple vulnerabilities in unbound. Approved by: so Security: FreeBSD-SA-20:19.unbound Security: CVE-2020-12662 Security: CVE-2020-12663 Added: releng/12.1/contrib/unbound/.github/ releng/12.1/contrib/unbound/.github/FUNDING.yml releng/12.1/contrib/unbound/.travis.yml releng/12.1/contrib/unbound/README.md releng/12.1/contrib/unbound/compat/getentropy_freebsd.c releng/12.1/contrib/unbound/contrib/drop-tld.diff releng/12.1/contrib/unbound/contrib/drop2rpz releng/12.1/contrib/unbound/contrib/unbound-fuzzme.patch releng/12.1/contrib/unbound/contrib/unbound_portable.service.in releng/12.1/contrib/unbound/doc/README.ipset.md releng/12.1/contrib/unbound/ipset/ releng/12.1/contrib/unbound/ipset/ipset.c releng/12.1/contrib/unbound/ipset/ipset.h releng/12.1/contrib/unbound/services/rpz.c releng/12.1/contrib/unbound/services/rpz.h releng/12.1/usr.sbin/unbound/config.h (contents, props changed) Deleted: releng/12.1/contrib/unbound/config.h Modified: releng/12.1/contrib/unbound/Makefile.in releng/12.1/contrib/unbound/aclocal.m4 releng/12.1/contrib/unbound/cachedb/cachedb.c releng/12.1/contrib/unbound/compat/arc4random.c releng/12.1/contrib/unbound/compat/getentropy_linux.c releng/12.1/contrib/unbound/compat/getentropy_osx.c releng/12.1/contrib/unbound/compat/getentropy_solaris.c releng/12.1/contrib/unbound/compat/getentropy_win.c releng/12.1/contrib/unbound/compat/malloc.c releng/12.1/contrib/unbound/compat/snprintf.c releng/12.1/contrib/unbound/config.guess releng/12.1/contrib/unbound/config.h.in releng/12.1/contrib/unbound/config.sub releng/12.1/contrib/unbound/configure releng/12.1/contrib/unbound/configure.ac releng/12.1/contrib/unbound/contrib/README releng/12.1/contrib/unbound/contrib/create_unbound_ad_servers.sh releng/12.1/contrib/unbound/contrib/fastrpz.patch releng/12.1/contrib/unbound/contrib/libunbound.pc.in releng/12.1/contrib/unbound/contrib/libunbound.so.conf releng/12.1/contrib/unbound/contrib/unbound.init releng/12.1/contrib/unbound/contrib/unbound.init_fedora releng/12.1/contrib/unbound/contrib/unbound.service.in releng/12.1/contrib/unbound/contrib/unbound_munin_ releng/12.1/contrib/unbound/daemon/daemon.c releng/12.1/contrib/unbound/daemon/daemon.h releng/12.1/contrib/unbound/daemon/remote.c releng/12.1/contrib/unbound/daemon/stats.c releng/12.1/contrib/unbound/daemon/unbound.c releng/12.1/contrib/unbound/daemon/worker.c releng/12.1/contrib/unbound/dns64/dns64.c releng/12.1/contrib/unbound/dnscrypt/dnscrypt.c releng/12.1/contrib/unbound/dnstap/dnstap.c releng/12.1/contrib/unbound/doc/Changelog releng/12.1/contrib/unbound/doc/README releng/12.1/contrib/unbound/doc/TODO releng/12.1/contrib/unbound/doc/example.conf releng/12.1/contrib/unbound/doc/example.conf.in releng/12.1/contrib/unbound/doc/libunbound.3 releng/12.1/contrib/unbound/doc/libunbound.3.in releng/12.1/contrib/unbound/doc/unbound-anchor.8 releng/12.1/contrib/unbound/doc/unbound-anchor.8.in releng/12.1/contrib/unbound/doc/unbound-checkconf.8 releng/12.1/contrib/unbound/doc/unbound-checkconf.8.in releng/12.1/contrib/unbound/doc/unbound-control.8 releng/12.1/contrib/unbound/doc/unbound-control.8.in releng/12.1/contrib/unbound/doc/unbound-host.1 releng/12.1/contrib/unbound/doc/unbound-host.1.in releng/12.1/contrib/unbound/doc/unbound.8 releng/12.1/contrib/unbound/doc/unbound.8.in releng/12.1/contrib/unbound/doc/unbound.conf.5 releng/12.1/contrib/unbound/doc/unbound.conf.5.in releng/12.1/contrib/unbound/doc/unbound.doxygen releng/12.1/contrib/unbound/edns-subnet/addrtree.c releng/12.1/contrib/unbound/edns-subnet/addrtree.h releng/12.1/contrib/unbound/edns-subnet/subnetmod.c releng/12.1/contrib/unbound/edns-subnet/subnetmod.h releng/12.1/contrib/unbound/install-sh releng/12.1/contrib/unbound/ipsecmod/ipsecmod.c releng/12.1/contrib/unbound/iterator/iter_delegpt.c releng/12.1/contrib/unbound/iterator/iter_delegpt.h releng/12.1/contrib/unbound/iterator/iter_fwd.c releng/12.1/contrib/unbound/iterator/iter_hints.c releng/12.1/contrib/unbound/iterator/iter_scrub.c releng/12.1/contrib/unbound/iterator/iter_utils.c releng/12.1/contrib/unbound/iterator/iter_utils.h releng/12.1/contrib/unbound/iterator/iterator.c releng/12.1/contrib/unbound/iterator/iterator.h releng/12.1/contrib/unbound/libunbound/context.c releng/12.1/contrib/unbound/libunbound/context.h releng/12.1/contrib/unbound/libunbound/libunbound.c releng/12.1/contrib/unbound/libunbound/libworker.c releng/12.1/contrib/unbound/libunbound/ubsyms.def releng/12.1/contrib/unbound/libunbound/unbound.h releng/12.1/contrib/unbound/ltmain.sh releng/12.1/contrib/unbound/respip/respip.c releng/12.1/contrib/unbound/respip/respip.h releng/12.1/contrib/unbound/services/authzone.c releng/12.1/contrib/unbound/services/authzone.h releng/12.1/contrib/unbound/services/cache/dns.c releng/12.1/contrib/unbound/services/cache/dns.h releng/12.1/contrib/unbound/services/cache/infra.c releng/12.1/contrib/unbound/services/cache/infra.h releng/12.1/contrib/unbound/services/listen_dnsport.c releng/12.1/contrib/unbound/services/listen_dnsport.h releng/12.1/contrib/unbound/services/localzone.c releng/12.1/contrib/unbound/services/localzone.h releng/12.1/contrib/unbound/services/mesh.c releng/12.1/contrib/unbound/services/mesh.h releng/12.1/contrib/unbound/services/modstack.c releng/12.1/contrib/unbound/services/outside_network.c releng/12.1/contrib/unbound/services/outside_network.h releng/12.1/contrib/unbound/services/view.c releng/12.1/contrib/unbound/sldns/parse.c releng/12.1/contrib/unbound/sldns/rrdef.c releng/12.1/contrib/unbound/sldns/sbuffer.c releng/12.1/contrib/unbound/sldns/sbuffer.h releng/12.1/contrib/unbound/sldns/str2wire.c releng/12.1/contrib/unbound/sldns/wire2str.c releng/12.1/contrib/unbound/sldns/wire2str.h releng/12.1/contrib/unbound/smallapp/unbound-anchor.c releng/12.1/contrib/unbound/smallapp/unbound-checkconf.c releng/12.1/contrib/unbound/smallapp/unbound-control-setup.sh releng/12.1/contrib/unbound/smallapp/unbound-control-setup.sh.in releng/12.1/contrib/unbound/smallapp/unbound-control.c releng/12.1/contrib/unbound/smallapp/unbound-host.c releng/12.1/contrib/unbound/util/alloc.c releng/12.1/contrib/unbound/util/config_file.c releng/12.1/contrib/unbound/util/config_file.h releng/12.1/contrib/unbound/util/configlexer.lex releng/12.1/contrib/unbound/util/configparser.y releng/12.1/contrib/unbound/util/data/dname.c releng/12.1/contrib/unbound/util/data/dname.h releng/12.1/contrib/unbound/util/data/msgencode.c releng/12.1/contrib/unbound/util/data/msgencode.h releng/12.1/contrib/unbound/util/data/msgparse.c releng/12.1/contrib/unbound/util/data/msgparse.h releng/12.1/contrib/unbound/util/data/msgreply.c releng/12.1/contrib/unbound/util/data/msgreply.h releng/12.1/contrib/unbound/util/data/packed_rrset.c releng/12.1/contrib/unbound/util/data/packed_rrset.h releng/12.1/contrib/unbound/util/edns.c releng/12.1/contrib/unbound/util/fptr_wlist.c releng/12.1/contrib/unbound/util/fptr_wlist.h releng/12.1/contrib/unbound/util/iana_ports.inc releng/12.1/contrib/unbound/util/log.c releng/12.1/contrib/unbound/util/log.h releng/12.1/contrib/unbound/util/mini_event.c releng/12.1/contrib/unbound/util/module.h releng/12.1/contrib/unbound/util/net_help.c releng/12.1/contrib/unbound/util/net_help.h releng/12.1/contrib/unbound/util/netevent.c releng/12.1/contrib/unbound/util/netevent.h releng/12.1/contrib/unbound/util/random.c releng/12.1/contrib/unbound/util/random.h releng/12.1/contrib/unbound/util/regional.c releng/12.1/contrib/unbound/util/shm_side/shm_main.c releng/12.1/contrib/unbound/util/storage/dnstree.c releng/12.1/contrib/unbound/util/storage/dnstree.h releng/12.1/contrib/unbound/util/storage/lookup3.c releng/12.1/contrib/unbound/util/ub_event.c releng/12.1/contrib/unbound/util/ub_event_pluggable.c releng/12.1/contrib/unbound/util/winsock_event.c releng/12.1/contrib/unbound/validator/autotrust.c releng/12.1/contrib/unbound/validator/val_anchor.c releng/12.1/contrib/unbound/validator/val_neg.c releng/12.1/contrib/unbound/validator/val_secalgo.c releng/12.1/contrib/unbound/validator/val_sigcrypt.c releng/12.1/contrib/unbound/validator/validator.c releng/12.1/lib/libunbound/Makefile releng/12.1/usr.sbin/unbound/anchor/Makefile releng/12.1/usr.sbin/unbound/checkconf/Makefile releng/12.1/usr.sbin/unbound/control/Makefile releng/12.1/usr.sbin/unbound/daemon/Makefile Added: releng/12.1/contrib/unbound/.github/FUNDING.yml ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ releng/12.1/contrib/unbound/.github/FUNDING.yml Wed Jul 8 20:25:06 2020 (r363029) @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: ['https://nlnetlabs.nl/funding/'] Added: releng/12.1/contrib/unbound/.travis.yml ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ releng/12.1/contrib/unbound/.travis.yml Wed Jul 8 20:25:06 2020 (r363029) @@ -0,0 +1,16 @@ +sudo: false +language: c +compiler: + - gcc +addons: + apt: + packages: + - libssl-dev + - libevent-dev + - libexpat-dev + - clang +script: + - ./configure --enable-debug --disable-flto + - make + - make test + - (cd testdata/clang-analysis.tdir; bash clang-analysis.test) Modified: releng/12.1/contrib/unbound/Makefile.in ============================================================================== --- releng/12.1/contrib/unbound/Makefile.in Wed Jul 8 20:22:38 2020 (r363028) +++ releng/12.1/contrib/unbound/Makefile.in Wed Jul 8 20:25:06 2020 (r363029) @@ -110,6 +110,7 @@ iterator/iter_delegpt.c iterator/iter_donotq.c iterato iterator/iter_hints.c iterator/iter_priv.c iterator/iter_resptype.c \ iterator/iter_scrub.c iterator/iter_utils.c services/listen_dnsport.c \ services/localzone.c services/mesh.c services/modstack.c services/view.c \ +services/rpz.c \ services/outbound_list.c services/outside_network.c util/alloc.c \ util/config_file.c util/configlexer.c util/configparser.c \ util/shm_side/shm_main.c services/authzone.c \ @@ -126,7 +127,7 @@ validator/val_sigcrypt.c validator/val_utils.c dns64/d edns-subnet/edns-subnet.c edns-subnet/subnetmod.c \ edns-subnet/addrtree.c edns-subnet/subnet-whitelist.c \ cachedb/cachedb.c cachedb/redis.c respip/respip.c $(CHECKLOCK_SRC) \ -$(DNSTAP_SRC) $(DNSCRYPT_SRC) $(IPSECMOD_SRC) +$(DNSTAP_SRC) $(DNSCRYPT_SRC) $(IPSECMOD_SRC) $(IPSET_SRC) COMMON_OBJ_WITHOUT_NETCALL=dns.lo infra.lo rrset.lo dname.lo msgencode.lo \ as112.lo msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \ iter_donotq.lo iter_fwd.lo iter_hints.lo iter_priv.lo iter_resptype.lo \ @@ -135,11 +136,11 @@ outbound_list.lo alloc.lo config_file.lo configlexer.l fptr_wlist.lo edns.lo locks.lo log.lo mini_event.lo module.lo net_help.lo \ random.lo rbtree.lo regional.lo rtt.lo dnstree.lo lookup3.lo lruhash.lo \ slabhash.lo tcp_conn_limit.lo timehist.lo tube.lo winsock_event.lo \ -autotrust.lo val_anchor.lo \ +autotrust.lo val_anchor.lo rpz.lo \ validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \ val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo redis.lo authzone.lo \ $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \ -$(IPSECMOD_OBJ) respip.lo +$(IPSECMOD_OBJ) $(IPSET_OBJ) respip.lo COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \ outside_network.lo COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo @@ -148,7 +149,7 @@ COMMON_OBJ_ALL_SYMBOLS=@COMMON_OBJ_ALL_SYMBOLS@ COMPAT_SRC=compat/ctime_r.c compat/fake-rfc2553.c compat/gmtime_r.c \ compat/inet_aton.c compat/inet_ntop.c compat/inet_pton.c compat/malloc.c \ compat/memcmp.c compat/memmove.c compat/snprintf.c compat/strlcat.c \ -compat/strlcpy.c compat/strptime.c compat/getentropy_linux.c \ +compat/strlcpy.c compat/strptime.c compat/getentropy_freebsd.c compat/getentropy_linux.c \ compat/getentropy_osx.c compat/getentropy_solaris.c compat/getentropy_win.c \ compat/explicit_bzero.c compat/arc4random.c compat/arc4random_uniform.c \ compat/arc4_lock.c compat/sha512.c compat/reallocarray.c compat/isblank.c \ @@ -160,6 +161,7 @@ SLDNS_SRC=sldns/keyraw.c sldns/sbuffer.c sldns/wire2st sldns/parseutil.c sldns/rrdef.c sldns/str2wire.c SLDNS_OBJ=keyraw.lo sbuffer.lo wire2str.lo parse.lo parseutil.lo rrdef.lo \ str2wire.lo +SLDNS_ALLOCCHECK_EXTRA_OBJ=@SLDNS_ALLOCCHECK_EXTRA_OBJ@ UNITTEST_SRC=testcode/unitanchor.c testcode/unitdname.c \ testcode/unitlruhash.c testcode/unitmain.c testcode/unitmsgparse.c \ testcode/unitneg.c testcode/unitregional.c testcode/unitslabhash.c \ @@ -187,11 +189,11 @@ CONTROL_OBJ_LINK=$(CONTROL_OBJ) worker_cb.lo $(COMMON_ $(SLDNS_OBJ) $(COMPAT_OBJ) @WIN_CONTROL_OBJ_LINK@ HOST_SRC=smallapp/unbound-host.c HOST_OBJ=unbound-host.lo -HOST_OBJ_LINK=$(HOST_OBJ) $(SLDNS_OBJ) $(COMPAT_OBJ_WITHOUT_CTIMEARC4) @WIN_HOST_OBJ_LINK@ +HOST_OBJ_LINK=$(HOST_OBJ) $(SLDNS_OBJ) $(COMPAT_OBJ_WITHOUT_CTIMEARC4) $(SLDNS_ALLOCCHECK_EXTRA_OBJ) @WIN_HOST_OBJ_LINK@ UBANCHOR_SRC=smallapp/unbound-anchor.c UBANCHOR_OBJ=unbound-anchor.lo UBANCHOR_OBJ_LINK=$(UBANCHOR_OBJ) parseutil.lo \ -$(COMPAT_OBJ_WITHOUT_CTIME) @WIN_UBANCHOR_OBJ_LINK@ +$(COMPAT_OBJ_WITHOUT_CTIME) $(SLDNS_ALLOCCHECK_EXTRA_OBJ) @WIN_UBANCHOR_OBJ_LINK@ TESTBOUND_SRC=testcode/testbound.c testcode/testpkts.c \ daemon/worker.c daemon/acl_list.c \ daemon/daemon.c daemon/stats.c \ @@ -217,7 +219,7 @@ MEMSTATS_OBJ_LINK=$(MEMSTATS_OBJ) worker_cb.lo $(COMMO $(SLDNS_OBJ) ASYNCLOOK_SRC=testcode/asynclook.c ASYNCLOOK_OBJ=asynclook.lo -ASYNCLOOK_OBJ_LINK=$(ASYNCLOOK_OBJ) log.lo locks.lo $(COMPAT_OBJ) +ASYNCLOOK_OBJ_LINK=$(ASYNCLOOK_OBJ) log.lo locks.lo $(COMPAT_OBJ) @ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ@ STREAMTCP_SRC=testcode/streamtcp.c STREAMTCP_OBJ=streamtcp.lo STREAMTCP_OBJ_LINK=$(STREAMTCP_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \ @@ -229,6 +231,8 @@ DELAYER_SRC=testcode/delayer.c DELAYER_OBJ=delayer.lo DELAYER_OBJ_LINK=$(DELAYER_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \ $(SLDNS_OBJ) +IPSET_SRC=@IPSET_SRC@ +IPSET_OBJ=@IPSET_OBJ@ LIBUNBOUND_SRC=libunbound/context.c libunbound/libunbound.c \ libunbound/libworker.c LIBUNBOUND_OBJ=context.lo libunbound.lo libworker.lo ub_event_pluggable.lo @@ -256,8 +260,9 @@ ALL_SRC=$(COMMON_SRC) $(UNITTEST_SRC) $(DAEMON_SRC) \ $(MEMSTATS_SRC) $(CHECKCONF_SRC) $(LIBUNBOUND_SRC) $(HOST_SRC) \ $(ASYNCLOOK_SRC) $(STREAMTCP_SRC) $(PERF_SRC) $(DELAYER_SRC) \ $(CONTROL_SRC) $(UBANCHOR_SRC) $(PETAL_SRC) \ - $(PYTHONMOD_SRC) $(PYUNBOUND_SRC) $(WIN_DAEMON_THE_SRC)\ + $(PYTHONMOD_SRC) $(PYUNBOUND_SRC) $(WIN_DAEMON_THE_SRC) \ $(SVCINST_SRC) $(SVCUNINST_SRC) $(ANCHORUPD_SRC) $(SLDNS_SRC) + ALL_OBJ=$(COMMON_OBJ) $(UNITTEST_OBJ) $(DAEMON_OBJ) \ $(TESTBOUND_OBJ) $(LOCKVERIFY_OBJ) $(PKTVIEW_OBJ) \ $(MEMSTATS_OBJ) $(CHECKCONF_OBJ) $(LIBUNBOUND_OBJ) $(HOST_OBJ) \ @@ -452,14 +457,19 @@ clean: rm -f _unbound.la libunbound/python/libunbound_wrap.c libunbound/python/unbound.py pythonmod/interface.h pythonmod/unboundmodule.py rm -rf autom4te.cache .libs build doc/html doc/xml -realclean: clean - rm -f config.status config.log config.h.in config.h - rm -f configure config.sub config.guess ltmain.sh aclocal.m4 libtool - rm -f util/configlexer.c util/configparser.c util/configparser.h - rm -f doc/example.conf doc/libunbound.3 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound-control.8 doc/unbound.8 doc/unbound.conf.5 +distclean: clean + rm -f config.status config.log config.h + rm -f doc/example.conf doc/libunbound.3 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound-control.8 doc/unbound.8 doc/unbound.conf.5 doc/unbound-host.1 + rm -f smallapp/unbound-control-setup.sh dnstap/dnstap_config.h dnscrypt/dnscrypt_config.h contrib/libunbound.pc contrib/unbound.socket contrib/unbound.service rm -f $(TEST_BIN) rm -f Makefile +maintainer-clean: distclean + rm -f util/configlexer.c util/configparser.c util/configparser.h + +realclean: maintainer-clean + rm -f configure config.h.in config.sub config.guess ltmain.sh aclocal.m4 libtool + .SUFFIXES: .lint .c.lint: $(LINT) $(LINTFLAGS) -I. -I$(srcdir) $< @@ -482,9 +492,9 @@ doc: if test -n "$(doxygen)"; then \ $(doxygen) $(srcdir)/doc/unbound.doxygen; fi if test "$(WITH_PYUNBOUND)" = "yes" -o "$(WITH_PYTHONMODULE)" = "yes"; \ - then if test -x "`which sphinx-build 2>&1`"; then \ - sphinx-build -b html pythonmod/doc doc/html/pythonmod; \ - sphinx-build -b html libunbound/python/doc doc/html/pyunbound;\ + then if test -x "`which sphinx-build-$(PY_MAJOR_VERSION) 2>&1`"; then \ + sphinx-build-$(PY_MAJOR_VERSION) -b html pythonmod/doc doc/html/pythonmod; \ + sphinx-build-$(PY_MAJOR_VERSION) -b html libunbound/python/doc doc/html/pyunbound;\ fi ;\ fi @@ -613,6 +623,8 @@ depend: -e 's?$$(srcdir)/util/configparser.c?util/configparser.c?g' \ -e 's?$$(srcdir)/util/configparser.h?util/configparser.h?g' \ -e 's?$$(srcdir)/dnstap/dnstap_config.h??g' \ + -e 's?$$(srcdir)/dnstap/dnstap.pb-c.c?dnstap/dnstap.pb-c.c?g' \ + -e 's?$$(srcdir)/dnstap/dnstap.pb-c.h?dnstap/dnstap.pb-c.h?g' \ -e 's?$$(srcdir)/dnscrypt/dnscrypt_config.h??g' \ -e 's?$$(srcdir)/pythonmod/pythonmod.h?$$(PYTHONMOD_HEADER)?g' \ -e 's?$$(srcdir)/edns-subnet/subnetmod.h $$(srcdir)/edns-subnet/subnet-whitelist.h $$(srcdir)/edns-subnet/edns-subnet.h $$(srcdir)/edns-subnet/addrtree.h?$$(SUBNET_HEADER)?g' \ @@ -631,535 +643,507 @@ depend: fi rm -f $(DEPEND_TMP) $(DEPEND_TMP2) +# build rules +ipset.lo ipset.o: $(srcdir)/ipset/ipset.c + # Dependencies dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \ - $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/services/cache/dns.h $(srcdir)/util/data/msgreply.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/util/data/dname.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ - $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h $(srcdir)/validator/val_nsec.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/services/cache/dns.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h infra.lo infra.o: $(srcdir)/services/cache/infra.c config.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h rrset.lo rrset.o: $(srcdir)/services/cache/rrset.c config.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/regional.h $(srcdir)/util/alloc.h \ - $(srcdir)/util/net_help.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/slabhash.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/regional.h $(srcdir)/util/alloc.h $(srcdir)/util/net_help.h as112.lo as112.o: $(srcdir)/util/as112.c $(srcdir)/util/as112.h dname.lo dname.o: $(srcdir)/util/data/dname.c config.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/storage/lookup3.h \ - $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/storage/lookup3.h $(srcdir)/sldns/sbuffer.h msgencode.lo msgencode.o: $(srcdir)/util/data/msgencode.c config.h $(srcdir)/util/data/msgencode.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/dname.h $(srcdir)/util/regional.h \ - $(srcdir)/util/net_help.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/dname.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h $(srcdir)/services/view.h msgparse.lo msgparse.o: $(srcdir)/util/data/msgparse.c config.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h \ - $(srcdir)/util/regional.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/regional.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h msgreply.lo msgreply.o: $(srcdir)/util/data/msgreply.c config.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/util/regional.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/module.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/data/msgencode.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/module.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/respip/respip.h packed_rrset.lo packed_rrset.o: $(srcdir)/util/data/packed_rrset.c config.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h \ - $(srcdir)/util/alloc.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h + $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/regional.h \ + $(srcdir)/util/net_help.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h iterator.lo iterator.o: $(srcdir)/iterator/iterator.c config.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_hints.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_fwd.h \ - $(srcdir)/iterator/iter_donotq.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_scrub.h \ - $(srcdir)/iterator/iter_priv.h $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/dns.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/authzone.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/iterator/iter_utils.h \ + $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_hints.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_donotq.h \ + $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_scrub.h $(srcdir)/iterator/iter_priv.h \ + $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/random.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/random.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/parseutil.h iter_delegpt.lo iter_delegpt.o: $(srcdir)/iterator/iter_delegpt.c config.h $(srcdir)/iterator/iter_delegpt.h \ $(srcdir)/util/log.h $(srcdir)/services/cache/dns.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h iter_donotq.lo iter_donotq.o: $(srcdir)/iterator/iter_donotq.c config.h $(srcdir)/iterator/iter_donotq.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/regional.h $(srcdir)/util/log.h \ $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h iter_fwd.lo iter_fwd.o: $(srcdir)/iterator/iter_fwd.c config.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h $(srcdir)/util/config_file.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h iter_hints.lo iter_hints.o: $(srcdir)/iterator/iter_hints.c config.h $(srcdir)/iterator/iter_hints.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \ $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h \ + $(srcdir)/sldns/wire2str.h iter_priv.lo iter_priv.o: $(srcdir)/iterator/iter_priv.c config.h $(srcdir)/iterator/iter_priv.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/regional.h $(srcdir)/util/log.h $(srcdir)/util/config_file.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/net_help.h $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/sbuffer.h iter_resptype.lo iter_resptype.o: $(srcdir)/iterator/iter_resptype.c config.h \ $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \ $(srcdir)/services/cache/dns.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/data/dname.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h iter_scrub.lo iter_scrub.o: $(srcdir)/iterator/iter_scrub.c config.h $(srcdir)/iterator/iter_scrub.h \ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/iterator/iter_priv.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h $(srcdir)/util/alloc.h \ - $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/iterator/iter_priv.h $(srcdir)/util/rbtree.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h $(srcdir)/util/alloc.h $(srcdir)/sldns/sbuffer.h iter_utils.lo iter_utils.o: $(srcdir)/iterator/iter_utils.c config.h $(srcdir)/iterator/iter_utils.h \ $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/iterator/iter_hints.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/iterator/iter_hints.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/iterator/iter_donotq.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_priv.h \ $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/cache/dns.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/util/random.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_kentry.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/str2wire.h + $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/sldns/str2wire.h listen_dnsport.lo listen_dnsport.o: $(srcdir)/services/listen_dnsport.c config.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ - $(srcdir)/sldns/sbuffer.h + $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h \ + $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/net_help.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/as112.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/as112.h mesh.lo mesh.o: $(srcdir)/services/mesh.c config.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/services/modstack.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/dns.h \ - $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/timehist.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/alloc.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/edns.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/util/data/dname.h $(srcdir)/respip/respip.h + $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/dns.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ + $(srcdir)/util/alloc.h $(srcdir)/util/edns.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/data/dname.h \ + $(srcdir)/services/listen_dnsport.h modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/services/modstack.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/dns64/dns64.h \ - $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/respip/respip.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(PYTHONMOD_HEADER) \ - $(srcdir)/cachedb/cachedb.h $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/edns-subnet/subnetmod.h \ - $(srcdir)/util/alloc.h $(srcdir)/util/net_help.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h -view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h +view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h +rpz.lo rpz.o: $(srcdir)/services/rpz.c config.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h \ + $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/str2wire.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h outbound_list.lo outbound_list.o: $(srcdir)/services/outbound_list.c config.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ outside_network.lo outside_network.o: $(srcdir)/services/outside_network.c config.h \ $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ + $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/random.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/dnstap/dnstap.h \ - + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h \ + $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ + $(srcdir)/dnstap/dnstap.h alloc.lo alloc.o: $(srcdir)/util/alloc.c config.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/regional.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h + $(srcdir)/util/regional.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h config_file.lo config_file.o: $(srcdir)/util/config_file.c config.h $(srcdir)/util/log.h \ $(srcdir)/util/configyyrename.h $(srcdir)/util/config_file.h util/configparser.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ - $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/data/dname.h $(srcdir)/util/rtt.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/wire2str.h \ - $(srcdir)/sldns/parseutil.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/iana_ports.inc + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/cache/infra.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h \ + $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/util/iana_ports.inc configlexer.lo configlexer.o: util/configlexer.c config.h $(srcdir)/util/configyyrename.h \ $(srcdir)/util/config_file.h util/configparser.h configparser.lo configparser.o: util/configparser.c config.h $(srcdir)/util/configyyrename.h \ $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h shm_main.lo shm_main.o: $(srcdir)/util/shm_side/shm_main.c config.h $(srcdir)/util/shm_side/shm_main.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/daemon/worker.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/util/rtt.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h + $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/services/mesh.h \ + $(srcdir)/util/rbtree.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/respip/respip.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/tube.h authzone.lo authzone.o: $(srcdir)/services/authzone.c config.h $(srcdir)/services/authzone.h \ - $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/random.h $(srcdir)/services/cache/dns.h \ - $(srcdir)/services/outside_network.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_secalgo.h + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/data/msgencode.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/random.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/outside_network.h \ + $(srcdir)/services/listen_dnsport.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/keyraw.h $(srcdir)/validator/val_nsec3.h \ + $(srcdir)/validator/val_secalgo.h fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/outside_network.h $(srcdir)/services/localzone.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/validator/validator.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_nsec3.h \ - $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_neg.h \ - $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h $(srcdir)/libunbound/context.h \ - $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/respip/respip.h \ - $(PYTHONMOD_HEADER) $(srcdir)/cachedb/cachedb.h $(srcdir)/ipsecmod/ipsecmod.h \ - $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/net_help.h $(srcdir)/edns-subnet/addrtree.h \ - $(srcdir)/edns-subnet/edns-subnet.h -locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h -log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/sldns/sbuffer.h -mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h \ + $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \ + $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h \ + $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h \ + $(srcdir)/validator/val_neg.h $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h \ + $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound-event.h \ + $(srcdir)/libunbound/worker.h +locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h +log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h +mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ + $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h module.lo module.o: $(srcdir)/util/module.c config.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/tcp_conn_limit.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/ub_event.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/tcp_conn_limit.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ - $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/dnstap/dnstap.h \ - \ - + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/sldns/str2wire.h \ + $(srcdir)/dnstap/dnstap.h $(srcdir)/services/listen_dnsport.h net_help.lo net_help.o: $(srcdir)/util/net_help.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \ - + $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ + $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h random.lo random.o: $(srcdir)/util/random.c config.h $(srcdir)/util/random.h $(srcdir)/util/log.h rbtree.lo rbtree.o: $(srcdir)/util/rbtree.c config.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h regional.lo regional.o: $(srcdir)/util/regional.c config.h $(srcdir)/util/log.h $(srcdir)/util/regional.h rtt.lo rtt.o: $(srcdir)/util/rtt.c config.h $(srcdir)/util/rtt.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h -edns.lo edns.o: $(srcdir)/util/edns.c config.h $(srcdir)/util/config_file.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/regional.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h +edns.lo edns.o: $(srcdir)/util/edns.c config.h $(srcdir)/util/edns.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h dnstree.lo dnstree.o: $(srcdir)/util/storage/dnstree.c config.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/net_help.h + $(srcdir)/util/log.h $(srcdir)/util/net_help.h lookup3.lo lookup3.o: $(srcdir)/util/storage/lookup3.c config.h $(srcdir)/util/storage/lookup3.h lruhash.lo lruhash.o: $(srcdir)/util/storage/lruhash.c config.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h slabhash.lo slabhash.o: $(srcdir)/util/storage/slabhash.c config.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h tcp_conn_limit.lo tcp_conn_limit.o: $(srcdir)/util/tcp_conn_limit.c config.h $(srcdir)/util/regional.h \ $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/tcp_conn_limit.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/str2wire.h + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h timehist.lo timehist.o: $(srcdir)/util/timehist.c config.h $(srcdir)/util/timehist.h $(srcdir)/util/log.h tube.lo tube.o: $(srcdir)/util/tube.c config.h $(srcdir)/util/tube.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ - $(srcdir)/util/ub_event.h + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/ub_event.h ub_event.lo ub_event.o: $(srcdir)/util/ub_event.c config.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/tube.h \ - $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h + $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c config.h $(srcdir)/util/ub_event.h \ $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h \ - $(srcdir)/util/rbtree.h + $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h winsock_event.lo winsock_event.o: $(srcdir)/util/winsock_event.c config.h autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/validator/autotrust.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/validator/val_anchor.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/val_sigcrypt.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/regional.h $(srcdir)/util/random.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/services/modstack.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/validator/val_kcache.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/sldns/keyraw.h \ - + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_utils.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/dname.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/random.h $(srcdir)/services/mesh.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/respip/respip.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ + $(srcdir)/validator/val_kcache.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/keyraw.h val_anchor.lo val_anchor.o: $(srcdir)/validator/val_anchor.c config.h $(srcdir)/validator/val_anchor.h \ - $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/autotrust.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_sigcrypt.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/validator/autotrust.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/util/as112.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/sldns/str2wire.h validator.lo validator.o: $(srcdir)/validator/validator.c config.h $(srcdir)/validator/validator.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/validator/val_kcache.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_nsec.h \ $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_neg.h $(srcdir)/validator/val_sigcrypt.h \ $(srcdir)/validator/autotrust.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ - $(srcdir)/services/modstack.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ + $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ + $(srcdir)/respip/respip.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h val_kcache.lo val_kcache.o: $(srcdir)/validator/val_kcache.c config.h $(srcdir)/validator/val_kcache.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/validator/val_kentry.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h + $(srcdir)/validator/val_kentry.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h val_kentry.lo val_kentry.o: $(srcdir)/validator/val_kentry.c config.h $(srcdir)/validator/val_kentry.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h \ - $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ - -val_neg.lo val_neg.o: $(srcdir)/validator/val_neg.c config.h \ - $(srcdir)/validator/val_neg.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/util/rbtree.h $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h +val_neg.lo val_neg.o: $(srcdir)/validator/val_neg.c config.h $(srcdir)/validator/val_neg.h $(srcdir)/util/locks.h \ + $(srcdir)/util/log.h $(srcdir)/util/rbtree.h $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_utils.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/services/cache/dns.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h val_nsec3.lo val_nsec3.o: $(srcdir)/validator/val_nsec3.c config.h $(srcdir)/validator/val_nsec3.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/validator/val_secalgo.h \ - $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \ - $(srcdir)/validator/val_kentry.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/validator/val_nsec.h \ - $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_secalgo.h $(srcdir)/validator/validator.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_kentry.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/regional.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/validator/val_nsec.h $(srcdir)/sldns/sbuffer.h val_nsec.lo val_nsec.o: $(srcdir)/validator/val_nsec.c config.h $(srcdir)/validator/val_nsec.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/slabhash.h + $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h val_secalgo.lo val_secalgo.o: $(srcdir)/validator/val_secalgo.c config.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/validator/val_secalgo.h $(srcdir)/validator/val_nsec3.h $(srcdir)/util/rbtree.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/sldns/sbuffer.h \ - + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_secalgo.h \ + $(srcdir)/validator/val_nsec3.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ + $(srcdir)/sldns/sbuffer.h val_sigcrypt.lo val_sigcrypt.o: $(srcdir)/validator/val_sigcrypt.c config.h \ $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/validator/val_secalgo.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/validator/val_utils.h $(srcdir)/util/data/dname.h $(srcdir)/util/rbtree.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \ - + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/val_secalgo.h \ + $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/rbtree.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ + $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h \ + $(srcdir)/sldns/wire2str.h val_utils.lo val_utils.o: $(srcdir)/validator/val_utils.c config.h $(srcdir)/validator/val_utils.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_anchor.h \ - $(srcdir)/util/rbtree.h $(srcdir)/validator/val_nsec.h $(srcdir)/validator/val_neg.h \ - $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h + $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_kentry.h \ + $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h \ + $(srcdir)/validator/val_nsec.h $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/wire2str.h \ + $(srcdir)/sldns/parseutil.h dns64.lo dns64.o: $(srcdir)/dns64/dns64.c config.h $(srcdir)/dns64/dns64.h $(srcdir)/util/module.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h -edns-subnet.lo edns-subnet.o: $(srcdir)/edns-subnet/edns-subnet.c config.h \ - $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h -subnetmod.lo subnetmod.o: $(srcdir)/edns-subnet/subnetmod.c config.h $(srcdir)/edns-subnet/subnetmod.h \ - $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/services/outbound_list.h $(srcdir)/util/alloc.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h \ - $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/modstack.h \ - $(srcdir)/services/cache/dns.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ + $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h +edns-subnet.lo edns-subnet.o: $(srcdir)/edns-subnet/edns-subnet.c config.h +subnetmod.lo subnetmod.o: $(srcdir)/edns-subnet/subnetmod.c config.h addrtree.lo addrtree.o: $(srcdir)/edns-subnet/addrtree.c config.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/edns-subnet/addrtree.h -subnet-whitelist.lo subnet-whitelist.o: $(srcdir)/edns-subnet/subnet-whitelist.c config.h \ - $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ - $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/testcode/checklocks.h -cachedb.lo cachedb.o: $(srcdir)/cachedb/cachedb.c config.h $(srcdir)/cachedb/cachedb.h $(srcdir)/util/module.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/cachedb/redis.h $(srcdir)/util/regional.h \ - $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/util/data/msgencode.h \ - $(srcdir)/services/cache/dns.h $(srcdir)/validator/val_neg.h $(srcdir)/util/rbtree.h \ - $(srcdir)/validator/val_secalgo.h $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h \ - $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/sbuffer.h -redis.lo redis.o: $(srcdir)/cachedb/redis.c config.h $(srcdir)/cachedb/redis.h $(srcdir)/cachedb/cachedb.h \ - $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/alloc.h \ - $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/edns-subnet/addrtree.h +subnet-whitelist.lo subnet-whitelist.o: $(srcdir)/edns-subnet/subnet-whitelist.c config.h +cachedb.lo cachedb.o: $(srcdir)/cachedb/cachedb.c config.h +redis.lo redis.o: $(srcdir)/cachedb/redis.c config.h respip.lo respip.o: $(srcdir)/respip/respip.c config.h $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ - $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/respip/respip.h + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/rpz.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ + $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/services/cache/dns.h \ + $(srcdir)/sldns/str2wire.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/regional.h checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/testcode/checklocks.h -dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/storage/lookup3.h -ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h $(srcdir)/ipsecmod/ipsecmod.h \ - $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h \ - $(srcdir)/ipsecmod/ipsecmod-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h \ - $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h \ - $(srcdir)/sldns/wire2str.h -ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h \ - $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h $(srcdir)/ipsecmod/ipsecmod-whitelist.h \ - $(srcdir)/util/storage/dnstree.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h +ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h +ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h unitanchor.lo unitanchor.o: $(srcdir)/testcode/unitanchor.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/testcode/unitmain.h $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/sldns/rrdef.h + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/unitmain.h \ + $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h unitdname.lo unitdname.o: $(srcdir)/testcode/unitdname.c config.h $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h \ - $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/testcode/checklocks.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@freebsd.org Wed Jul 8 20:26:20 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DB3D736E5D8; Wed, 8 Jul 2020 20:26:20 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B29n85T1Qz3dSR; Wed, 8 Jul 2020 20:26:20 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9F5E925B6B; Wed, 8 Jul 2020 20:26:20 +0000 (UTC) (envelope-from gordon@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068KQKvA037003; Wed, 8 Jul 2020 20:26:20 GMT (envelope-from gordon@FreeBSD.org) Received: (from gordon@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068KQJVs036996; Wed, 8 Jul 2020 20:26:19 GMT (envelope-from gordon@FreeBSD.org) Message-Id: <202007082026.068KQJVs036996@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gordon set sender to gordon@FreeBSD.org using -f From: Gordon Tetlow Date: Wed, 8 Jul 2020 20:26:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-releng@freebsd.org Subject: svn commit: r363030 - in releng: 11.3 11.3/sys/conf 11.4 11.4/sys/conf 12.1 12.1/sys/conf X-SVN-Group: releng X-SVN-Commit-Author: gordon X-SVN-Commit-Paths: in releng: 11.3 11.3/sys/conf 11.4 11.4/sys/conf 12.1 12.1/sys/conf X-SVN-Commit-Revision: 363030 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 20:26:20 -0000 Author: gordon Date: Wed Jul 8 20:26:19 2020 New Revision: 363030 URL: https://svnweb.freebsd.org/changeset/base/363030 Log: Add UPDATING entries and bump version. Approved by: so Modified: releng/11.3/UPDATING releng/11.3/sys/conf/newvers.sh releng/11.4/UPDATING releng/11.4/sys/conf/newvers.sh releng/12.1/UPDATING releng/12.1/sys/conf/newvers.sh Modified: releng/11.3/UPDATING ============================================================================== --- releng/11.3/UPDATING Wed Jul 8 20:25:06 2020 (r363029) +++ releng/11.3/UPDATING Wed Jul 8 20:26:19 2020 (r363030) @@ -16,6 +16,19 @@ from older versions of FreeBSD, try WITHOUT_CLANG and the tip of head, and then rebuild without this option. The bootstrap process from older version of current across the gcc/clang cutover is a bit fragile. +20200708 p11 FreeBSD-EN-20:14.linuxkpi + FreeBSD-EN-20:15.mps + FreeBSD-SA-20:19.unbound + FreeBSD-SA-20:20.ipv6 + + Fix kernel panic in LinuxKPI subsystem. [EN-20:14.linuxpki] + + Fix kernel panic in mps(4) driver. [EN-20:15.mps] + + Fix multiple vulnerabilities in unbound. [SA-20:19.unbound] + + Fix IPv6 socket option race condition and use after free. [SA-20:20.ipv6] + 20200609 p10 FreeBSD-SA-20:17.usb Fix USB HID descriptor parsing error. [SA-20:17.usb] Modified: releng/11.3/sys/conf/newvers.sh ============================================================================== --- releng/11.3/sys/conf/newvers.sh Wed Jul 8 20:25:06 2020 (r363029) +++ releng/11.3/sys/conf/newvers.sh Wed Jul 8 20:26:19 2020 (r363030) @@ -44,7 +44,7 @@ TYPE="FreeBSD" REVISION="11.3" -BRANCH="RELEASE-p10" +BRANCH="RELEASE-p11" if [ -n "${BRANCH_OVERRIDE}" ]; then BRANCH=${BRANCH_OVERRIDE} fi Modified: releng/11.4/UPDATING ============================================================================== --- releng/11.4/UPDATING Wed Jul 8 20:25:06 2020 (r363029) +++ releng/11.4/UPDATING Wed Jul 8 20:26:19 2020 (r363030) @@ -16,6 +16,19 @@ from older versions of FreeBSD, try WITHOUT_CLANG and the tip of head, and then rebuild without this option. The bootstrap process from older version of current across the gcc/clang cutover is a bit fragile. +20200708 p1 FreeBSD-EN-20:15.mps + FreeBSD-SA-20:18.posix_spawnp + FreeBSD-SA-20:19.unbound + FreeBSD-SA-20:20.ipv6 + + Fix kernel panic in mps(4) driver. [EN-20:15.mps] + + Fix posix_spawnp(3) buffer overflow. [SA-20:18.posix_spawnp] + + Fix multiple vulnerabilities in unbound. [SA-20:19.unbound] + + Fix IPv6 socket option race condition and use after free. [SA-20:20.ipv6] + 20200616: 11.4-RELEASE. Modified: releng/11.4/sys/conf/newvers.sh ============================================================================== --- releng/11.4/sys/conf/newvers.sh Wed Jul 8 20:25:06 2020 (r363029) +++ releng/11.4/sys/conf/newvers.sh Wed Jul 8 20:26:19 2020 (r363030) @@ -44,7 +44,7 @@ TYPE="FreeBSD" REVISION="11.4" -BRANCH="RELEASE" +BRANCH="RELEASE-p1" if [ -n "${BRANCH_OVERRIDE}" ]; then BRANCH=${BRANCH_OVERRIDE} fi Modified: releng/12.1/UPDATING ============================================================================== --- releng/12.1/UPDATING Wed Jul 8 20:25:06 2020 (r363029) +++ releng/12.1/UPDATING Wed Jul 8 20:26:19 2020 (r363030) @@ -16,6 +16,22 @@ from older versions of FreeBSD, try WITHOUT_CLANG and the tip of head, and then rebuild without this option. The bootstrap process from older version of current across the gcc/clang cutover is a bit fragile. +20200708 p7 FreeBSD-EN-20:13.bhyve + FreeBSD-EN-20:14.linuxkpi + FreeBSD-EN-20:15.mps + FreeBSD-SA-20:19.unbound + FreeBSD-SA-20:20.ipv6 + + Fix host crash in bhyve with PCI device passthrough. [EN-20:13.bhyve] + + Fix kernel panic in LinuxKPI subsystem. [EN-20:14.linuxpki] + + Fix kernel panic in mps(4) driver. [EN-20:15.mps] + + Fix multiple vulnerabilities in unbound. [SA-20:19.unbound] + + Fix IPv6 socket option race condition and use after free. [SA-20:20.ipv6] + 20200609 p6 FreeBSD-EN-20:11.ena FreeBSD-EN-20:12.iflib FreeBSD-SA-20:17.usb Modified: releng/12.1/sys/conf/newvers.sh ============================================================================== --- releng/12.1/sys/conf/newvers.sh Wed Jul 8 20:25:06 2020 (r363029) +++ releng/12.1/sys/conf/newvers.sh Wed Jul 8 20:26:19 2020 (r363030) @@ -46,7 +46,7 @@ TYPE="FreeBSD" REVISION="12.1" -BRANCH="RELEASE-p6" +BRANCH="RELEASE-p7" if [ -n "${BRANCH_OVERRIDE}" ]; then BRANCH=${BRANCH_OVERRIDE} fi From owner-svn-src-all@freebsd.org Wed Jul 8 21:20:14 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 98DA13549EB; Wed, 8 Jul 2020 21:20:14 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2BzL3w8rz457k; Wed, 8 Jul 2020 21:20:14 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 695842685D; Wed, 8 Jul 2020 21:20:14 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068LKEFt067914; Wed, 8 Jul 2020 21:20:14 GMT (envelope-from sjg@FreeBSD.org) Received: (from sjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068LKCeN067904; Wed, 8 Jul 2020 21:20:12 GMT (envelope-from sjg@FreeBSD.org) Message-Id: <202007082120.068LKCeN067904@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sjg set sender to sjg@FreeBSD.org using -f From: "Simon J. Gerraty" Date: Wed, 8 Jul 2020 21:20:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363031 - in head: contrib/bmake contrib/bmake/lst.lib contrib/bmake/mk contrib/bmake/mk/sys contrib/bmake/unit-tests usr.bin/bmake X-SVN-Group: head X-SVN-Commit-Author: sjg X-SVN-Commit-Paths: in head: contrib/bmake contrib/bmake/lst.lib contrib/bmake/mk contrib/bmake/mk/sys contrib/bmake/unit-tests usr.bin/bmake X-SVN-Commit-Revision: 363031 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 21:20:14 -0000 Author: sjg Date: Wed Jul 8 21:20:12 2020 New Revision: 363031 URL: https://svnweb.freebsd.org/changeset/base/363031 Log: Update to bmake-20200704 Key changes include reduced noise at end of failed build log and avoid evaluation of unnecessary terms in conditionals. MFC after: 1 week Added: head/contrib/bmake/LICENSE - copied unchanged from r363019, vendor/NetBSD/bmake/dist/LICENSE head/contrib/bmake/unit-tests/cond-short.exp - copied unchanged from r363019, vendor/NetBSD/bmake/dist/unit-tests/cond-short.exp head/contrib/bmake/unit-tests/cond-short.mk - copied unchanged from r363019, vendor/NetBSD/bmake/dist/unit-tests/cond-short.mk Modified: head/contrib/bmake/ChangeLog head/contrib/bmake/FILES head/contrib/bmake/VERSION head/contrib/bmake/arch.c head/contrib/bmake/buf.c head/contrib/bmake/compat.c head/contrib/bmake/cond.c head/contrib/bmake/dir.c head/contrib/bmake/for.c head/contrib/bmake/hash.c head/contrib/bmake/hash.h head/contrib/bmake/job.c head/contrib/bmake/job.h head/contrib/bmake/lst.lib/lstAppend.c head/contrib/bmake/lst.lib/lstAtEnd.c head/contrib/bmake/lst.lib/lstAtFront.c head/contrib/bmake/lst.lib/lstClose.c head/contrib/bmake/lst.lib/lstConcat.c head/contrib/bmake/lst.lib/lstDatum.c head/contrib/bmake/lst.lib/lstDeQueue.c head/contrib/bmake/lst.lib/lstDupl.c head/contrib/bmake/lst.lib/lstEnQueue.c head/contrib/bmake/lst.lib/lstFind.c head/contrib/bmake/lst.lib/lstFindFrom.c head/contrib/bmake/lst.lib/lstFirst.c head/contrib/bmake/lst.lib/lstForEach.c head/contrib/bmake/lst.lib/lstForEachFrom.c head/contrib/bmake/lst.lib/lstInit.c head/contrib/bmake/lst.lib/lstInsert.c head/contrib/bmake/lst.lib/lstIsAtEnd.c head/contrib/bmake/lst.lib/lstIsEmpty.c head/contrib/bmake/lst.lib/lstLast.c head/contrib/bmake/lst.lib/lstNext.c head/contrib/bmake/lst.lib/lstOpen.c head/contrib/bmake/lst.lib/lstPrev.c head/contrib/bmake/lst.lib/lstRemove.c head/contrib/bmake/lst.lib/lstReplace.c head/contrib/bmake/lst.lib/lstSucc.c head/contrib/bmake/main.c head/contrib/bmake/make.c head/contrib/bmake/make.h head/contrib/bmake/make_malloc.c head/contrib/bmake/meta.c head/contrib/bmake/meta.h head/contrib/bmake/mk/ChangeLog head/contrib/bmake/mk/FILES head/contrib/bmake/mk/gendirdeps.mk head/contrib/bmake/mk/install-mk head/contrib/bmake/mk/mkopt.sh head/contrib/bmake/mk/sys/AIX.mk head/contrib/bmake/mk/sys/Darwin.mk head/contrib/bmake/mk/sys/Generic.mk head/contrib/bmake/mk/sys/HP-UX.mk head/contrib/bmake/mk/sys/IRIX.mk head/contrib/bmake/mk/sys/Linux.mk head/contrib/bmake/mk/sys/NetBSD.mk head/contrib/bmake/mk/sys/OSF1.mk head/contrib/bmake/mk/sys/OpenBSD.mk head/contrib/bmake/mk/sys/SunOS.mk head/contrib/bmake/mk/sys/UnixWare.mk head/contrib/bmake/nonints.h head/contrib/bmake/parse.c head/contrib/bmake/str.c head/contrib/bmake/suff.c head/contrib/bmake/targ.c head/contrib/bmake/trace.c head/contrib/bmake/unit-tests/Makefile head/contrib/bmake/unit-tests/modmatch.mk head/contrib/bmake/unit-tests/modmisc.exp head/contrib/bmake/unit-tests/modmisc.mk head/contrib/bmake/unit-tests/modorder.exp head/contrib/bmake/unit-tests/modorder.mk head/contrib/bmake/unit-tests/sysv.exp head/contrib/bmake/unit-tests/sysv.mk head/contrib/bmake/unit-tests/varmisc.exp head/contrib/bmake/unit-tests/varmisc.mk head/contrib/bmake/util.c head/contrib/bmake/var.c head/usr.bin/bmake/Makefile.config Directory Properties: head/contrib/bmake/ (props changed) Modified: head/contrib/bmake/ChangeLog ============================================================================== --- head/contrib/bmake/ChangeLog Wed Jul 8 20:26:19 2020 (r363030) +++ head/contrib/bmake/ChangeLog Wed Jul 8 21:20:12 2020 (r363031) @@ -1,3 +1,81 @@ +2020-07-04 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200704 + Merge with NetBSD make, pick up + (most of this by rillig@) + o lots of style and white-space cleanup + o lots more unit tests for variable modifiers + o simplified description of some functions + o str.c: refactor Str_Match + o var.c: debugging output for :@ + constify VarModify parameter + fix :hash modifier on 16-bit platforms + remove unnecessary forward declarations + refactor ApplyModifier_SysV to have less indentation + simplify code for :E and :R + clean up code for :H and :T + refactor ApplyModifiers + + * var.c: we need stdint.h on some platforms to get uint32_t + * unit-test/Makefile: we need to supress the specific error + for RE substitution error in modmisc, since it varies accross + different OS. + +2020-07-02 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200702 + Merge with NetBSD make, pick up + o var.c: more improvements to avoiding unnecessary evaluation + use enums for flags + o remove flags arg to Var_Set which outside of var.c is always 0 + +2020-07-01 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200701 + Merge with NetBSD make, pick up + o var.c: with change to cond.c; ensure that nested variables + within a variable name are expanded. + o unit-tests/varmisc.mk: test for nested varname + +2020-06-29 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200629 + Merge with NetBSD make, pick up + o cond.c: do not eval unnecessary terms of conditionals. + +2020-06-25 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200625 + Merge with NetBSD make, pick up + o meta.c: report error if lseek in filemon_read fails + +2020-06-22 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200622 + Merge with NetBSD make, pick up + o dieQuietly: ignore OP_SUBMAKE as too aggressive + +2020-06-19 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200619 + Merge with NetBSD make, pick up + o str.c: performance improvement for Str_Match for multiple '*' + o dieQuietly: supress the failure output from make + when failing node is a sub-make or a sibling failed. + This cuts down greatly on unhelpful noise at the end of + build log. Disabled by -dj or .MAKE.DIE_QUIETLY=no + +2020-06-10 Simon J Gerraty + + * FILES: add LICENSE to appease some packagers. + This is an attempt to fairly represent the license on almost + 200 files, which are almost all BSD-3-Clause + The few exceptions being more liberal. + + * VERSION (_MAKE_VERSION): 20200610 + Merge with NetBSD make, pick up + o unit test for :Or + 2020-06-06 Simon J Gerraty * VERSION (_MAKE_VERSION): 20200606 Modified: head/contrib/bmake/FILES ============================================================================== --- head/contrib/bmake/FILES Wed Jul 8 20:26:19 2020 (r363030) +++ head/contrib/bmake/FILES Wed Jul 8 21:20:12 2020 (r363031) @@ -1,5 +1,6 @@ ChangeLog FILES +LICENSE Makefile Makefile.config.in PSD.doc/Makefile @@ -107,6 +108,8 @@ unit-tests/cond2.exp unit-tests/cond2.mk unit-tests/cond-late.mk unit-tests/cond-late.exp +unit-tests/cond-short.mk +unit-tests/cond-short.exp unit-tests/dollar.exp unit-tests/dollar.mk unit-tests/doterror.exp Copied: head/contrib/bmake/LICENSE (from r363019, vendor/NetBSD/bmake/dist/LICENSE) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/contrib/bmake/LICENSE Wed Jul 8 21:20:12 2020 (r363031, copy of r363019, vendor/NetBSD/bmake/dist/LICENSE) @@ -0,0 +1,59 @@ +The individual files in this distribution are copyright their +original contributors or assignees. +Including: + + Copyright (c) 1993-2020, Simon J Gerraty + Copyright (c) 2009-2016, Juniper Networks, Inc. + Copyright (c) 2009, John Birrell. + Copyright (c) 1997-2020 The NetBSD Foundation, Inc. + Copyright (c) 1998 Todd C. Miller + Copyright (c) 1989 by Berkeley Softworks + Copyright (c) 1988, 1989, 1990, 1992, 1993 + The Regents of the University of California. + Copyright (c) 1988, 1989 by Adam de Boor + +With the exception of the GNU configure script, which states: + + # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. + # + # This configure script is free software; the Free Software Foundation + # gives unlimited permission to copy, distribute and modify it. + +The license for this distribution is considered to be: + + SPDX-License-Identifier: BSD-3-Clause + +example (from https://opensource.org/licenses/BSD-3-Clause): + + Copyright + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + 3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + Modified: head/contrib/bmake/VERSION ============================================================================== --- head/contrib/bmake/VERSION Wed Jul 8 20:26:19 2020 (r363030) +++ head/contrib/bmake/VERSION Wed Jul 8 21:20:12 2020 (r363031) @@ -1,2 +1,2 @@ # keep this compatible with sh and make -_MAKE_VERSION=20200606 +_MAKE_VERSION=20200704 Modified: head/contrib/bmake/arch.c ============================================================================== --- head/contrib/bmake/arch.c Wed Jul 8 20:26:19 2020 (r363030) +++ head/contrib/bmake/arch.c Wed Jul 8 21:20:12 2020 (r363031) @@ -1,4 +1,4 @@ -/* $NetBSD: arch.c,v 1.71 2019/10/05 23:35:57 mrg Exp $ */ +/* $NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: arch.c,v 1.71 2019/10/05 23:35:57 mrg Exp $"; +static char rcsid[] = "$NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)arch.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: arch.c,v 1.71 2019/10/05 23:35:57 mrg Exp $"); +__RCSID("$NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -312,7 +312,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * free(freeIt); if (result == var_Error) { - return(FAILURE); + return FAILURE; } else { subLibName = TRUE; } @@ -354,7 +354,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * free(freeIt); if (result == var_Error) { - return(FAILURE); + return FAILURE; } else { doSubst = TRUE; } @@ -372,7 +372,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * */ if (*cp == '\0') { printf("No closing parenthesis in archive specification\n"); - return (FAILURE); + return FAILURE; } /* @@ -426,7 +426,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * if (gn == NULL) { free(buf); - return(FAILURE); + return FAILURE; } else { gn->type |= OP_ARCHV; (void)Lst_AtEnd(nodeLst, gn); @@ -437,7 +437,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * * ourselves. */ free(buf); - return(FAILURE); + return FAILURE; } /* * Free buffer and continue with our work. @@ -461,7 +461,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * gn = Targ_FindNode(nameBuf, TARG_CREATE); if (gn == NULL) { free(nameBuf); - return (FAILURE); + return FAILURE; } else { /* * We've found the node, but have to make sure the rest of @@ -483,7 +483,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * gn = Targ_FindNode(nameBuf, TARG_CREATE); free(nameBuf); if (gn == NULL) { - return (FAILURE); + return FAILURE; } else { /* * We've found the node, but have to make sure the rest of the @@ -520,7 +520,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * } while (*cp != '\0' && isspace ((unsigned char)*cp)); *linePtr = cp; - return (SUCCESS); + return SUCCESS; } /*- @@ -544,7 +544,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * static int ArchFindArchive(const void *ar, const void *archName) { - return (strcmp(archName, ((const Arch *)ar)->name)); + return strcmp(archName, ((const Arch *)ar)->name); } /*- @@ -602,7 +602,7 @@ ArchStatMember(char *archive, char *member, Boolean ha he = Hash_FindEntry(&ar->members, member); if (he != NULL) { - return ((struct ar_hdr *)Hash_GetValue(he)); + return (struct ar_hdr *)Hash_GetValue(he); } else { /* Try truncated name */ char copy[AR_MAX_NAME_LEN+1]; @@ -614,7 +614,7 @@ ArchStatMember(char *archive, char *member, Boolean ha copy[AR_MAX_NAME_LEN] = '\0'; } if ((he = Hash_FindEntry(&ar->members, copy)) != NULL) - return ((struct ar_hdr *)Hash_GetValue(he)); + return (struct ar_hdr *)Hash_GetValue(he); return NULL; } } @@ -635,7 +635,7 @@ ArchStatMember(char *archive, char *member, Boolean ha return NULL; } else { fclose(arch); - return (&sarh); + return &sarh; } } @@ -753,7 +753,7 @@ ArchStatMember(char *archive, char *member, Boolean ha he = Hash_FindEntry(&ar->members, member); if (he != NULL) { - return ((struct ar_hdr *)Hash_GetValue(he)); + return (struct ar_hdr *)Hash_GetValue(he); } else { return NULL; } @@ -962,7 +962,7 @@ ArchFindMember(char *archive, char *member, struct ar_ fclose(arch); return NULL; } - return (arch); + return arch; } } else #ifdef AR_EFMT1 @@ -996,7 +996,7 @@ ArchFindMember(char *archive, char *member, struct ar_ fclose(arch); return NULL; } - return (arch); + return arch; } if (fseek(arch, -elen, SEEK_CUR) != 0) { fclose(arch); @@ -1152,7 +1152,7 @@ Arch_MTime(GNode *gn) } gn->mtime = modTime; - return (modTime); + return modTime; } /*- @@ -1179,7 +1179,7 @@ Arch_MemMTime(GNode *gn) if (Lst_Open(gn->parents) != SUCCESS) { gn->mtime = 0; - return (0); + return 0; } while ((ln = Lst_Next(gn->parents)) != NULL) { pgn = (GNode *)Lst_Datum(ln); @@ -1211,7 +1211,7 @@ Arch_MemMTime(GNode *gn) Lst_Close(gn->parents); - return (gn->mtime); + return gn->mtime; } /*- @@ -1252,9 +1252,9 @@ Arch_FindLib(GNode *gn, Lst path) free(libName); #ifdef LIBRARIES - Var_Set(TARGET, gn->name, gn, 0); + Var_Set(TARGET, gn->name, gn); #else - Var_Set(TARGET, gn->path == NULL ? gn->name : gn->path, gn, 0); + Var_Set(TARGET, gn->path == NULL ? gn->name : gn->path, gn); #endif /* LIBRARIES */ } @@ -1337,7 +1337,7 @@ Arch_LibOODate(GNode *gn) oodate = FALSE; #endif } - return (oodate); + return oodate; } /*- Modified: head/contrib/bmake/buf.c ============================================================================== --- head/contrib/bmake/buf.c Wed Jul 8 20:26:19 2020 (r363030) +++ head/contrib/bmake/buf.c Wed Jul 8 21:20:12 2020 (r363031) @@ -1,4 +1,4 @@ -/* $NetBSD: buf.c,v 1.25 2012/04/24 20:26:58 sjg Exp $ */ +/* $NetBSD: buf.c,v 1.26 2020/07/03 08:02:55 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: buf.c,v 1.25 2012/04/24 20:26:58 sjg Exp $"; +static char rcsid[] = "$NetBSD: buf.c,v 1.26 2020/07/03 08:02:55 rillig Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)buf.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: buf.c,v 1.25 2012/04/24 20:26:58 sjg Exp $"); +__RCSID("$NetBSD: buf.c,v 1.26 2020/07/03 08:02:55 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -160,7 +160,7 @@ Buf_GetAll(Buffer *bp, int *numBytesPtr) if (numBytesPtr != NULL) *numBytesPtr = bp->count; - return (bp->buffer); + return bp->buffer; } /*- Modified: head/contrib/bmake/compat.c ============================================================================== --- head/contrib/bmake/compat.c Wed Jul 8 20:26:19 2020 (r363030) +++ head/contrib/bmake/compat.c Wed Jul 8 21:20:12 2020 (r363031) @@ -1,4 +1,4 @@ -/* $NetBSD: compat.c,v 1.110 2020/01/19 19:42:32 riastradh Exp $ */ +/* $NetBSD: compat.c,v 1.113 2020/07/03 08:13:23 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: compat.c,v 1.110 2020/01/19 19:42:32 riastradh Exp $"; +static char rcsid[] = "$NetBSD: compat.c,v 1.113 2020/07/03 08:13:23 rillig Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)compat.c 8.2 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: compat.c,v 1.110 2020/01/19 19:42:32 riastradh Exp $"); +__RCSID("$NetBSD: compat.c,v 1.113 2020/07/03 08:13:23 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -236,7 +236,7 @@ CompatRunCommand(void *cmdp, void *gnp) silent = gn->type & OP_SILENT; errCheck = !(gn->type & OP_IGNORE); doIt = FALSE; - + cmdNode = Lst_Member(gn->commands, cmd); cmdStart = Var_Subst(NULL, cmd, gn, VARF_WANTRES); @@ -249,18 +249,18 @@ CompatRunCommand(void *cmdp, void *gnp) if (*cmdStart == '\0') { free(cmdStart); - return(0); + return 0; } cmd = cmdStart; Lst_Replace(cmdNode, cmdStart); if ((gn->type & OP_SAVE_CMDS) && (gn != ENDNode)) { (void)Lst_AtEnd(ENDNode->commands, cmdStart); - return(0); + return 0; } if (strcmp(cmdStart, "...") == 0) { gn->type |= OP_SAVE_CMDS; - return(0); + return 0; } while ((*cmd == '@') || (*cmd == '-') || (*cmd == '+')) { @@ -287,7 +287,7 @@ CompatRunCommand(void *cmdp, void *gnp) * If we did not end up with a command, just skip it. */ if (!*cmd) - return (0); + return 0; #if !defined(MAKE_NATIVE) /* @@ -307,7 +307,7 @@ CompatRunCommand(void *cmdp, void *gnp) * go to the shell. Therefore treat '=' and ':' like shell * meta characters as documented in make(1). */ - + useShell = needshell(cmd, FALSE); #endif @@ -325,7 +325,7 @@ CompatRunCommand(void *cmdp, void *gnp) * we go... */ if (!doIt && NoExecute(gn)) { - return (0); + return 0; } if (DEBUG(JOB)) fprintf(debug_file, "Execute: '%s'\n", cmd); @@ -377,7 +377,7 @@ again: meta_compat_start(); } #endif - + /* * Fork and execute the single command. If the fork fails, we abort. */ @@ -499,8 +499,8 @@ again: bmake_signal(compatSigno, SIG_DFL); kill(myPid, compatSigno); } - - return (status); + + return status; } /*- @@ -550,7 +550,7 @@ Compat_Make(void *gnp, void *pgnp) if (Lst_Member(gn->iParents, pgn) != NULL) { char *p1; - Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn, 0); + Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn); free(p1); } @@ -654,7 +654,7 @@ Compat_Make(void *gnp, void *pgnp) } else { if (Lst_Member(gn->iParents, pgn) != NULL) { char *p1; - Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn, 0); + Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn); free(p1); } switch(gn->made) { @@ -681,7 +681,7 @@ Compat_Make(void *gnp, void *pgnp) cohorts: Lst_ForEach(gn->cohorts, Compat_Make, pgnp); - return (0); + return 0; } /*- Modified: head/contrib/bmake/cond.c ============================================================================== --- head/contrib/bmake/cond.c Wed Jul 8 20:26:19 2020 (r363030) +++ head/contrib/bmake/cond.c Wed Jul 8 21:20:12 2020 (r363031) @@ -1,4 +1,4 @@ -/* $NetBSD: cond.c,v 1.75 2017/04/16 20:59:04 riastradh Exp $ */ +/* $NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: cond.c,v 1.75 2017/04/16 20:59:04 riastradh Exp $"; +static char rcsid[] = "$NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)cond.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: cond.c,v 1.75 2017/04/16 20:59:04 riastradh Exp $"); +__RCSID("$NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -146,7 +146,7 @@ typedef enum { * last two fields are stored in condInvert and condDefProc, respectively. */ static void CondPushBack(Token); -static int CondGetArg(char **, char **, const char *); +static int CondGetArg(Boolean, char **, char **, const char *); static Boolean CondDoDefined(int, const char *); static int CondStrMatch(const void *, const void *); static Boolean CondDoMake(int, const char *); @@ -186,7 +186,7 @@ static unsigned int cond_min_depth = 0; /* depth at * Indicate when we should be strict about lhs of comparisons. * TRUE when Cond_EvalExpression is called from Cond_Eval (.if etc) * FALSE when Cond_EvalExpression is called from var.c:ApplyModifiers - * since lhs is already expanded and we cannot tell if + * since lhs is already expanded and we cannot tell if * it was a variable reference or not. */ static Boolean lhsStrict; @@ -225,9 +225,6 @@ CondPushBack(Token t) * CondGetArg -- * Find the argument of a built-in function. * - * Input: - * parens TRUE if arg should be bounded by parens - * * Results: * The length of the argument and the address of the argument. * @@ -238,7 +235,7 @@ CondPushBack(Token t) *----------------------------------------------------------------------- */ static int -CondGetArg(char **linePtr, char **argPtr, const char *func) +CondGetArg(Boolean doEval, char **linePtr, char **argPtr, const char *func) { char *cp; int argLen; @@ -259,7 +256,7 @@ CondGetArg(char **linePtr, char **argPtr, const char * * the word 'make' or 'defined' at the beginning of a symbol... */ *argPtr = NULL; - return (0); + return 0; } while (*cp == ' ' || *cp == '\t') { @@ -290,7 +287,8 @@ CondGetArg(char **linePtr, char **argPtr, const char * int len; void *freeIt; - cp2 = Var_Parse(cp, VAR_CMD, VARF_UNDEFERR|VARF_WANTRES, + cp2 = Var_Parse(cp, VAR_CMD, VARF_UNDEFERR| + (doEval ? VARF_WANTRES : 0), &len, &freeIt); Buf_AddBytes(&buf, strlen(cp2), cp2); free(freeIt); @@ -316,11 +314,11 @@ CondGetArg(char **linePtr, char **argPtr, const char * if (func != NULL && *cp++ != ')') { Parse_Error(PARSE_WARNING, "Missing closing parenthesis for %s()", func); - return (0); + return 0; } *linePtr = cp; - return (argLen); + return argLen; } /*- @@ -349,7 +347,7 @@ CondDoDefined(int argLen MAKE_ATTR_UNUSED, const char } free(p1); - return (result); + return result; } /*- @@ -369,7 +367,7 @@ CondDoDefined(int argLen MAKE_ATTR_UNUSED, const char static int CondStrMatch(const void *string, const void *pattern) { - return(!Str_Match(string, pattern)); + return !Str_Match(string, pattern); } /*- @@ -414,14 +412,14 @@ CondDoExists(int argLen MAKE_ATTR_UNUSED, const char * if (DEBUG(COND)) { fprintf(debug_file, "exists(%s) result is \"%s\"\n", arg, path ? path : ""); - } + } if (path != NULL) { result = TRUE; free(path); } else { result = FALSE; } - return (result); + return result; } /*- @@ -443,7 +441,7 @@ CondDoTarget(int argLen MAKE_ATTR_UNUSED, const char * GNode *gn; gn = Targ_FindNode(arg, TARG_NOCREATE); - return (gn != NULL) && !OP_NOP(gn->type); + return gn != NULL && !OP_NOP(gn->type); } /*- @@ -467,7 +465,7 @@ CondDoCommands(int argLen MAKE_ATTR_UNUSED, const char GNode *gn; gn = Targ_FindNode(arg, TARG_NOCREATE); - return (gn != NULL) && !OP_NOP(gn->type) && !Lst_IsEmpty(gn->commands); + return gn != NULL && !OP_NOP(gn->type) && !Lst_IsEmpty(gn->commands); } /*- @@ -577,7 +575,7 @@ CondGetString(Boolean doEval, Boolean *quoted, void ** /* if we are in quotes, then an undefined variable is ok */ str = Var_Parse(condExpr, VAR_CMD, ((!qt && doEval) ? VARF_UNDEFERR : 0) | - VARF_WANTRES, &len, freeIt); + (doEval ? VARF_WANTRES : 0), &len, freeIt); if (str == var_Error) { if (*freeIt) { free(*freeIt); @@ -668,7 +666,7 @@ compare_expression(Boolean doEval) rhs = NULL; lhsFree = rhsFree = FALSE; lhsQuoted = rhsQuoted = FALSE; - + /* * Parse the variable spec and skip over it, saving its * value in lhs. @@ -711,7 +709,7 @@ compare_expression(Boolean doEval) goto done; } /* For .ifxxx compare against zero */ - if (CondCvtArg(lhs, &left)) { + if (CondCvtArg(lhs, &left)) { t = left != 0.0; goto done; } @@ -764,7 +762,7 @@ do_string_compare: * rhs is either a float or an integer. Convert both the * lhs and the rhs to a double and compare the two. */ - + if (!CondCvtArg(lhs, &left) || !CondCvtArg(rhs, &right)) goto do_string_compare; @@ -813,7 +811,7 @@ done: } static int -get_mpt_arg(char **linePtr, char **argPtr, const char *func MAKE_ATTR_UNUSED) +get_mpt_arg(Boolean doEval, char **linePtr, char **argPtr, const char *func MAKE_ATTR_UNUSED) { /* * Use Var_Parse to parse the spec in parens and return @@ -827,7 +825,7 @@ get_mpt_arg(char **linePtr, char **argPtr, const char /* We do all the work here and return the result as the length */ *argPtr = NULL; - val = Var_Parse(cp - 1, VAR_CMD, VARF_WANTRES, &length, &freeIt); + val = Var_Parse(cp - 1, VAR_CMD, doEval ? VARF_WANTRES : 0, &length, &freeIt); /* * Advance *linePtr to beyond the closing ). Note that * we subtract one because 'length' is calculated from 'cp - 1'. @@ -864,7 +862,7 @@ compare_function(Boolean doEval) static const struct fn_def { const char *fn_name; int fn_name_len; - int (*fn_getarg)(char **, char **, const char *); + int (*fn_getarg)(Boolean, char **, char **, const char *); Boolean (*fn_proc)(int, const char *); } fn_defs[] = { { "defined", 7, CondGetArg, CondDoDefined }, @@ -892,7 +890,7 @@ compare_function(Boolean doEval) if (*cp != '(') break; - arglen = fn_def->fn_getarg(&cp, &arg, fn_def->fn_name); + arglen = fn_def->fn_getarg(doEval, &cp, &arg, fn_def->fn_name); if (arglen <= 0) { condExpr = cp; return arglen < 0 ? TOK_ERROR : TOK_FALSE; @@ -917,7 +915,7 @@ compare_function(Boolean doEval) * would be invalid if we did "defined(a)" - so instead treat as an * expression. */ - arglen = CondGetArg(&cp, &arg, NULL); + arglen = CondGetArg(doEval, &cp, &arg, NULL); for (cp1 = cp; isspace(*(unsigned char *)cp1); cp1++) continue; if (*cp1 == '=' || *cp1 == '!') @@ -1040,7 +1038,7 @@ CondT(Boolean doEval) t = TOK_TRUE; } } - return (t); + return t; } /*- @@ -1086,7 +1084,7 @@ CondF(Boolean doEval) CondPushBack(o); } } - return (l); + return l; } /*- @@ -1133,7 +1131,7 @@ CondE(Boolean doEval) CondPushBack(o); } } - return (l); + return l; } /*- Modified: head/contrib/bmake/dir.c ============================================================================== --- head/contrib/bmake/dir.c Wed Jul 8 20:26:19 2020 (r363030) +++ head/contrib/bmake/dir.c Wed Jul 8 21:20:12 2020 (r363031) @@ -1,4 +1,4 @@ -/* $NetBSD: dir.c,v 1.74 2020/06/05 18:03:59 sjg Exp $ */ +/* $NetBSD: dir.c,v 1.76 2020/07/03 08:13:23 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: dir.c,v 1.74 2020/06/05 18:03:59 sjg Exp $"; +static char rcsid[] = "$NetBSD: dir.c,v 1.76 2020/07/03 08:13:23 rillig Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)dir.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: dir.c,v 1.74 2020/06/05 18:03:59 sjg Exp $"); +__RCSID("$NetBSD: dir.c,v 1.76 2020/07/03 08:13:23 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -112,7 +112,7 @@ __RCSID("$NetBSD: dir.c,v 1.74 2020/06/05 18:03:59 sjg * Dir_FindHereOrAbove Search for a path in the current directory and * then all the directories above it in turn until * the path is found or we reach the root ("/"). - * + * * Dir_MTime Return the modification time of a node. The file * is searched for along the default search path. * The path and mtime fields of the node are filled @@ -377,7 +377,7 @@ void Dir_InitCur(const char *cdname) { Path *p; - + if (cdname != NULL) { /* * Our build directory is not the same as our source directory. @@ -480,7 +480,7 @@ Dir_SetPATH(void) Boolean hasLastDot = FALSE; /* true we should search dot last */ Var_Delete(".PATH", VAR_GLOBAL); - + if (Lst_Open(dirSearchPath) == SUCCESS) { if ((ln = Lst_First(dirSearchPath)) != NULL) { p = (Path *)Lst_Datum(ln); @@ -537,7 +537,7 @@ Dir_SetPATH(void) static int DirFindName(const void *p, const void *dname) { - return (strcmp(((const Path *)p)->name, dname)); + return strcmp(((const Path *)p)->name, dname); } /*- @@ -545,7 +545,7 @@ DirFindName(const void *p, const void *dname) * Dir_HasWildcards -- * see if the given name has any wildcard characters in it * be careful not to expand unmatching brackets or braces. - * XXX: This code is not 100% correct. ([^]] fails etc.) + * XXX: This code is not 100% correct. ([^]] fails etc.) * I really don't think that make(1) should be expanding * patterns, because then you have to set a mechanism for * escaping the expansion! @@ -644,7 +644,7 @@ DirMatchFiles(const char *pattern, Path *p, Lst expans STR_ADDSLASH))); } } - return (0); + return 0; } /*- @@ -947,7 +947,7 @@ Dir_Expand(const char *word, Lst path, Lst expansions) *----------------------------------------------------------------------- */ static char * -DirLookup(Path *p, const char *name MAKE_ATTR_UNUSED, const char *cp, +DirLookup(Path *p, const char *name MAKE_ATTR_UNUSED, const char *cp, Boolean hasSlash MAKE_ATTR_UNUSED) { char *file; /* the current filename to check */ @@ -1004,7 +1004,7 @@ DirLookupSubdir(Path *p, const char *name) if (cached_stat(file, &stb) == 0) { nearmisses += 1; - return (file); + return file; } free(file); return NULL; @@ -1061,7 +1061,7 @@ DirLookupAbs(Path *p, const char *name, const char *cp if (DEBUG(DIR)) { fprintf(debug_file, " returning %s\n", name); } - return (bmake_strdup(name)); + return bmake_strdup(name); } /*- @@ -1087,7 +1087,7 @@ DirFindDot(Boolean hasSlash MAKE_ATTR_UNUSED, const ch } hits += 1; dot->hits += 1; - return (bmake_strdup(name)); + return bmake_strdup(name); } if (cur && Hash_FindEntry(&cur->files, cp) != NULL) { @@ -1185,7 +1185,7 @@ Dir_FindFile(const char *name, Lst path) * is found, we concatenate the directory name and the final * component and return the resulting string. If we don't find any * such thing, we go on to phase two... - * + * * No matter what, we always look for the file in the current * directory before anywhere else (unless we found the magic * DOTLAST path, in which case we search it last) and we *do not* @@ -1384,7 +1384,7 @@ Dir_FindFile(const char *name, Lst path) } if (Hash_FindEntry(&p->files, cp) != NULL) { - return (bmake_strdup(name)); + return bmake_strdup(name); } else { return NULL; } @@ -1395,7 +1395,7 @@ Dir_FindFile(const char *name, Lst path) bigmisses += 1; if (cached_stat(name, &stb) == 0) { - return (bmake_strdup(name)); + return bmake_strdup(name); } if (DEBUG(DIR)) { @@ -1409,14 +1409,14 @@ Dir_FindFile(const char *name, Lst path) /*- *----------------------------------------------------------------------- * Dir_FindHereOrAbove -- - * search for a path starting at a given directory and then working + * search for a path starting at a given directory and then working * our way up towards the root. * * Input: * here starting directory * search_path the path we are looking for * result the result of a successful search is placed here - * rlen the length of the result buffer + * rlen the length of the result buffer * (typically MAXPATHLEN + 1) * * Results: @@ -1426,7 +1426,7 @@ Dir_FindFile(const char *name, Lst path) * Side Effects: *----------------------------------------------------------------------- */ -int +int Dir_FindHereOrAbove(char *here, char *search_path, char *result, int rlen) { struct stat st; @@ -1451,7 +1451,7 @@ Dir_FindHereOrAbove(char *here, char *search_path, cha try_end = try + strlen(try); while (try_end > try && *try_end != '/') try_end--; - if (try_end > try) + if (try_end > try) *try_end = 0; /* chop! */ } @@ -1459,10 +1459,10 @@ Dir_FindHereOrAbove(char *here, char *search_path, cha * done! */ snprintf(result, rlen, "%s", try); - return(1); + return 1; } - /* + /* * nope, we didn't find it. if we used up dirbase we've * reached the root and failed. */ @@ -1479,9 +1479,9 @@ Dir_FindHereOrAbove(char *here, char *search_path, cha } /* while (1) */ /* - * we failed... + * we failed... */ - return(0); + return 0; } /*- *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@freebsd.org Wed Jul 8 21:40:28 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id BB127355EA6; Wed, 8 Jul 2020 21:40:28 +0000 (UTC) (envelope-from olivier@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2CQh4DLwz46gn; Wed, 8 Jul 2020 21:40:28 +0000 (UTC) (envelope-from olivier@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 74BF22655D; Wed, 8 Jul 2020 21:40:28 +0000 (UTC) (envelope-from olivier@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 068LeSMQ080358; Wed, 8 Jul 2020 21:40:28 GMT (envelope-from olivier@FreeBSD.org) Received: (from olivier@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 068LeSRi080356; Wed, 8 Jul 2020 21:40:28 GMT (envelope-from olivier@FreeBSD.org) Message-Id: <202007082140.068LeSRi080356@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: olivier set sender to olivier@FreeBSD.org using -f From: Olivier Cochard Date: Wed, 8 Jul 2020 21:40:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363032 - in head: etc/mtree include X-SVN-Group: head X-SVN-Commit-Author: olivier X-SVN-Commit-Paths: in head: etc/mtree include X-SVN-Commit-Revision: 363032 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jul 2020 21:40:28 -0000 Author: olivier (ports committer) Date: Wed Jul 8 21:40:27 2020 New Revision: 363032 URL: https://svnweb.freebsd.org/changeset/base/363032 Log: Install extra TCP stack header files: They are needed to compile a userland component of TCP Blackbox Recorder as example. Approved by: rrs Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D25584 Modified: head/etc/mtree/BSD.include.dist head/include/Makefile Modified: head/etc/mtree/BSD.include.dist ============================================================================== --- head/etc/mtree/BSD.include.dist Wed Jul 8 21:20:12 2020 (r363031) +++ head/etc/mtree/BSD.include.dist Wed Jul 8 21:40:27 2020 (r363032) @@ -228,6 +228,8 @@ .. netdump .. + tcp_stacks + .. .. netinet6 .. Modified: head/include/Makefile ============================================================================== --- head/include/Makefile Wed Jul 8 21:20:12 2020 (r363031) +++ head/include/Makefile Wed Jul 8 21:40:27 2020 (r363032) @@ -57,6 +57,7 @@ LSUBDIRS= cam/ata cam/mmc cam/nvme cam/scsi \ netgraph/atm netgraph/netflow \ netinet/cc \ netinet/netdump \ + netinet/tcp_stacks \ security/audit \ security/mac_biba security/mac_bsdextended security/mac_lomac \ security/mac_mls security/mac_partition \ From owner-svn-src-all@freebsd.org Thu Jul 9 02:52:44 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 81AF635D3EF; Thu, 9 Jul 2020 02:52:44 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2LM03GCJz4PMd; Thu, 9 Jul 2020 02:52:44 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 527E2A6BA; Thu, 9 Jul 2020 02:52:44 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0692qihZ075755; Thu, 9 Jul 2020 02:52:44 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0692qdFF075730; Thu, 9 Jul 2020 02:52:39 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <202007090252.0692qdFF075730@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Thu, 9 Jul 2020 02:52:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363034 - in head/sys/geom: . cache concat eli journal label mirror mountver multipath nop part raid raid3 stripe vinum virstor X-SVN-Group: head X-SVN-Commit-Author: delphij X-SVN-Commit-Paths: in head/sys/geom: . cache concat eli journal label mirror mountver multipath nop part raid raid3 stripe vinum virstor X-SVN-Commit-Revision: 363034 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 02:52:44 -0000 Author: delphij Date: Thu Jul 9 02:52:39 2020 New Revision: 363034 URL: https://svnweb.freebsd.org/changeset/base/363034 Log: sys/geom: consistently use _PATH_DEV instead of hardcoding "/dev/". Reviewed by: cem MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D25565 Modified: head/sys/geom/cache/g_cache.c head/sys/geom/concat/g_concat.c head/sys/geom/eli/g_eli_ctl.c head/sys/geom/geom.h head/sys/geom/geom_dev.c head/sys/geom/geom_subr.c head/sys/geom/journal/g_journal.c head/sys/geom/label/g_label.c head/sys/geom/mirror/g_mirror_ctl.c head/sys/geom/mountver/g_mountver.c head/sys/geom/multipath/g_multipath.c head/sys/geom/nop/g_nop.c head/sys/geom/part/g_part.c head/sys/geom/raid/g_raid.c head/sys/geom/raid/md_ddf.c head/sys/geom/raid/md_intel.c head/sys/geom/raid/md_jmicron.c head/sys/geom/raid/md_nvidia.c head/sys/geom/raid/md_promise.c head/sys/geom/raid/md_sii.c head/sys/geom/raid3/g_raid3_ctl.c head/sys/geom/stripe/g_stripe.c head/sys/geom/vinum/geom_vinum_share.c head/sys/geom/virstor/g_virstor.h Modified: head/sys/geom/cache/g_cache.c ============================================================================== --- head/sys/geom/cache/g_cache.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/cache/g_cache.c Thu Jul 9 02:52:39 2020 (r363034) @@ -762,8 +762,8 @@ g_cache_ctl_create(struct gctl_req *req, struct g_clas gctl_error(req, "No 'arg1' argument"); return; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); pp = g_provider_by_name(name); if (pp == NULL) { G_CACHE_DEBUG(1, "Provider %s is invalid.", name); Modified: head/sys/geom/concat/g_concat.c ============================================================================== --- head/sys/geom/concat/g_concat.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/concat/g_concat.c Thu Jul 9 02:52:39 2020 (r363034) @@ -845,8 +845,8 @@ g_concat_ctl_create(struct gctl_req *req, struct g_cla gctl_error(req, "No 'arg%u' argument.", no); return; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); pp = g_provider_by_name(name); if (pp == NULL) { G_CONCAT_DEBUG(1, "Disk %s is invalid.", name); @@ -871,8 +871,8 @@ g_concat_ctl_create(struct gctl_req *req, struct g_cla gctl_error(req, "No 'arg%d' argument.", no); return; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); pp = g_provider_by_name(name); KASSERT(pp != NULL, ("Provider %s disappear?!", name)); if (g_concat_add_disk(sc, pp, no - 1) != 0) { Modified: head/sys/geom/eli/g_eli_ctl.c ============================================================================== --- head/sys/geom/eli/g_eli_ctl.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/eli/g_eli_ctl.c Thu Jul 9 02:52:39 2020 (r363034) @@ -120,8 +120,8 @@ g_eli_ctl_attach(struct gctl_req *req, struct g_class gctl_error(req, "No 'arg%u' argument.", 0); return; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); pp = g_provider_by_name(name); if (pp == NULL) { gctl_error(req, "Provider %s is invalid.", name); @@ -186,8 +186,8 @@ g_eli_find_device(struct g_class *mp, const char *prov struct g_provider *pp; struct g_consumer *cp; - if (strncmp(prov, "/dev/", strlen("/dev/")) == 0) - prov += strlen("/dev/"); + if (strncmp(prov, _PATH_DEV, strlen(_PATH_DEV)) == 0) + prov += strlen(_PATH_DEV); LIST_FOREACH(gp, &mp->geom, geom) { sc = gp->softc; if (sc == NULL) @@ -373,8 +373,8 @@ g_eli_ctl_onetime(struct gctl_req *req, struct g_class gctl_error(req, "No 'arg%u' argument.", 0); return; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); pp = g_provider_by_name(name); if (pp == NULL) { gctl_error(req, "Provider %s is invalid.", name); Modified: head/sys/geom/geom.h ============================================================================== --- head/sys/geom/geom.h Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/geom.h Thu Jul 9 02:52:39 2020 (r363034) @@ -419,6 +419,10 @@ g_free(void *ptr) int g_is_geom_thread(struct thread *td); +#ifndef _PATH_DEV +#define _PATH_DEV "/dev/" +#endif + #endif /* _KERNEL */ /* geom_ctl.c */ Modified: head/sys/geom/geom_dev.c ============================================================================== --- head/sys/geom/geom_dev.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/geom_dev.c Thu Jul 9 02:52:39 2020 (r363034) @@ -166,7 +166,7 @@ init_dumpdev(struct cdev *dev) { struct diocskerneldump_arg kda; struct g_consumer *cp; - const char *devprefix = "/dev/", *devname; + const char *devprefix = _PATH_DEV, *devname; int error; size_t len; Modified: head/sys/geom/geom_subr.c ============================================================================== --- head/sys/geom/geom_subr.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/geom_subr.c Thu Jul 9 02:52:39 2020 (r363034) @@ -760,10 +760,6 @@ g_resize_provider(struct g_provider *pp, off_t size) g_post_event(g_resize_provider_event, hh, M_WAITOK, NULL); } -#ifndef _PATH_DEV -#define _PATH_DEV "/dev/" -#endif - struct g_provider * g_provider_by_name(char const *arg) { Modified: head/sys/geom/journal/g_journal.c ============================================================================== --- head/sys/geom/journal/g_journal.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/journal/g_journal.c Thu Jul 9 02:52:39 2020 (r363034) @@ -2511,7 +2511,7 @@ g_journal_find_device(struct g_class *mp, const char * struct g_geom *gp; struct g_provider *pp; - if (strncmp(name, "/dev/", 5) == 0) + if (strncmp(name, _PATH_DEV, 5) == 0) name += 5; LIST_FOREACH(gp, &mp->geom, geom) { sc = gp->softc; Modified: head/sys/geom/label/g_label.c ============================================================================== --- head/sys/geom/label/g_label.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/label/g_label.c Thu Jul 9 02:52:39 2020 (r363034) @@ -442,8 +442,8 @@ g_label_ctl_create(struct gctl_req *req, struct g_clas gctl_error(req, "No 'arg%d' argument", 1); return; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); pp = g_provider_by_name(name); if (pp == NULL) { G_LABEL_DEBUG(1, "Provider %s is invalid.", name); @@ -467,8 +467,8 @@ g_label_skip_dir(const char *name) char path[64]; u_int i; - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); if (strncmp(name, G_LABEL_DIR "/", strlen(G_LABEL_DIR "/")) == 0) name += strlen(G_LABEL_DIR "/"); for (i = 0; g_labels[i] != NULL; i++) { Modified: head/sys/geom/mirror/g_mirror_ctl.c ============================================================================== --- head/sys/geom/mirror/g_mirror_ctl.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/mirror/g_mirror_ctl.c Thu Jul 9 02:52:39 2020 (r363034) @@ -131,7 +131,7 @@ g_mirror_find_disk(struct g_mirror_softc *sc, const ch struct g_mirror_disk *disk; sx_assert(&sc->sc_lock, SX_XLOCKED); - if (strncmp(name, "/dev/", 5) == 0) + if (strncmp(name, _PATH_DEV, 5) == 0) name += 5; LIST_FOREACH(disk, &sc->sc_disks, d_next) { if (disk->d_consumer == NULL) @@ -450,8 +450,8 @@ err: g_topology_unlock(); return; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); pp = g_provider_by_name(name); if (pp == NULL) { G_MIRROR_DEBUG(1, "Disk %s is invalid.", name); @@ -501,8 +501,8 @@ err2: for (attached = 0, no = 1; no < *nargs; no++) { snprintf(param, sizeof(param), "arg%u", no); name = gctl_get_asciiparam(req, param); - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); pp = g_provider_by_name(name); if (pp == NULL) { G_MIRROR_DEBUG(1, "Provider %s disappear?!", name); @@ -686,7 +686,7 @@ g_mirror_ctl_insert(struct gctl_req *req, struct g_cla gctl_error(req, "Provider %s already inserted.", name); continue; } - if (strncmp(name, "/dev/", 5) == 0) + if (strncmp(name, _PATH_DEV, 5) == 0) name += 5; pp = g_provider_by_name(name); if (pp == NULL) { Modified: head/sys/geom/mountver/g_mountver.c ============================================================================== --- head/sys/geom/mountver/g_mountver.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/mountver/g_mountver.c Thu Jul 9 02:52:39 2020 (r363034) @@ -426,8 +426,8 @@ g_mountver_ctl_create(struct gctl_req *req, struct g_c gctl_error(req, "No 'arg%d' argument", i); return; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); pp = g_provider_by_name(name); if (pp == NULL) { G_MOUNTVER_DEBUG(1, "Provider %s is invalid.", name); @@ -483,8 +483,8 @@ g_mountver_ctl_destroy(struct gctl_req *req, struct g_ gctl_error(req, "No 'arg%d' argument", i); return; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); gp = g_mountver_find_geom(mp, name); if (gp == NULL) { G_MOUNTVER_DEBUG(1, "Device %s is invalid.", name); Modified: head/sys/geom/multipath/g_multipath.c ============================================================================== --- head/sys/geom/multipath/g_multipath.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/multipath/g_multipath.c Thu Jul 9 02:52:39 2020 (r363034) @@ -944,7 +944,7 @@ g_multipath_ctl_add_name(struct gctl_req *req, struct struct g_consumer *cp; struct g_provider *pp; const char *mpname; - static const char devpf[6] = "/dev/"; + static const char devpf[6] = _PATH_DEV; int error; g_topology_assert(); @@ -1007,7 +1007,7 @@ g_multipath_ctl_prefer(struct gctl_req *req, struct g_ struct g_multipath_softc *sc; struct g_consumer *cp; const char *name, *mpname; - static const char devpf[6] = "/dev/"; + static const char devpf[6] = _PATH_DEV; int *nargs; g_topology_assert(); Modified: head/sys/geom/nop/g_nop.c ============================================================================== --- head/sys/geom/nop/g_nop.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/nop/g_nop.c Thu Jul 9 02:52:39 2020 (r363034) @@ -676,8 +676,8 @@ g_nop_ctl_create(struct gctl_req *req, struct g_class gctl_error(req, "No 'arg%d' argument", i); return; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); pp = g_provider_by_name(name); if (pp == NULL) { G_NOP_DEBUG(1, "Provider %s is invalid.", name); @@ -787,8 +787,8 @@ g_nop_ctl_configure(struct gctl_req *req, struct g_cla gctl_error(req, "No 'arg%d' argument", i); return; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); pp = g_provider_by_name(name); if (pp == NULL || pp->geom->class != mp) { G_NOP_DEBUG(1, "Provider %s is invalid.", name); @@ -857,8 +857,8 @@ g_nop_ctl_destroy(struct gctl_req *req, struct g_class gctl_error(req, "No 'arg%d' argument", i); return; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); gp = g_nop_find_geom(mp, name); if (gp == NULL) { G_NOP_DEBUG(1, "Device %s is invalid.", name); @@ -902,8 +902,8 @@ g_nop_ctl_reset(struct gctl_req *req, struct g_class * gctl_error(req, "No 'arg%d' argument", i); return; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); pp = g_provider_by_name(name); if (pp == NULL || pp->geom->class != mp) { G_NOP_DEBUG(1, "Provider %s is invalid.", name); Modified: head/sys/geom/part/g_part.c ============================================================================== --- head/sys/geom/part/g_part.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/part/g_part.c Thu Jul 9 02:52:39 2020 (r363034) @@ -50,10 +50,6 @@ __FBSDID("$FreeBSD$"); #include "g_part_if.h" -#ifndef _PATH_DEV -#define _PATH_DEV "/dev/" -#endif - static kobj_method_t g_part_null_methods[] = { { 0, 0 } }; Modified: head/sys/geom/raid/g_raid.c ============================================================================== --- head/sys/geom/raid/g_raid.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/raid/g_raid.c Thu Jul 9 02:52:39 2020 (r363034) @@ -775,7 +775,7 @@ g_raid_open_consumer(struct g_raid_softc *sc, const ch g_topology_assert(); - if (strncmp(name, "/dev/", 5) == 0) + if (strncmp(name, _PATH_DEV, 5) == 0) name += 5; pp = g_provider_by_name(name); if (pp == NULL) Modified: head/sys/geom/raid/md_ddf.c ============================================================================== --- head/sys/geom/raid/md_ddf.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/raid/md_ddf.c Thu Jul 9 02:52:39 2020 (r363034) @@ -2618,7 +2618,7 @@ g_raid_md_ctl_ddf(struct g_raid_md_object *md, error = -2; break; } - if (strncmp(diskname, "/dev/", 5) == 0) + if (strncmp(diskname, _PATH_DEV, 5) == 0) diskname += 5; TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { Modified: head/sys/geom/raid/md_intel.c ============================================================================== --- head/sys/geom/raid/md_intel.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/raid/md_intel.c Thu Jul 9 02:52:39 2020 (r363034) @@ -2208,7 +2208,7 @@ g_raid_md_ctl_intel(struct g_raid_md_object *md, error = -2; break; } - if (strncmp(diskname, "/dev/", 5) == 0) + if (strncmp(diskname, _PATH_DEV, 5) == 0) diskname += 5; TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { Modified: head/sys/geom/raid/md_jmicron.c ============================================================================== --- head/sys/geom/raid/md_jmicron.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/raid/md_jmicron.c Thu Jul 9 02:52:39 2020 (r363034) @@ -1268,7 +1268,7 @@ g_raid_md_ctl_jmicron(struct g_raid_md_object *md, error = -2; break; } - if (strncmp(diskname, "/dev/", 5) == 0) + if (strncmp(diskname, _PATH_DEV, 5) == 0) diskname += 5; TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { Modified: head/sys/geom/raid/md_nvidia.c ============================================================================== --- head/sys/geom/raid/md_nvidia.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/raid/md_nvidia.c Thu Jul 9 02:52:39 2020 (r363034) @@ -1273,7 +1273,7 @@ g_raid_md_ctl_nvidia(struct g_raid_md_object *md, error = -2; break; } - if (strncmp(diskname, "/dev/", 5) == 0) + if (strncmp(diskname, _PATH_DEV, 5) == 0) diskname += 5; TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { Modified: head/sys/geom/raid/md_promise.c ============================================================================== --- head/sys/geom/raid/md_promise.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/raid/md_promise.c Thu Jul 9 02:52:39 2020 (r363034) @@ -1609,7 +1609,7 @@ g_raid_md_ctl_promise(struct g_raid_md_object *md, error = -2; break; } - if (strncmp(diskname, "/dev/", 5) == 0) + if (strncmp(diskname, _PATH_DEV, 5) == 0) diskname += 5; TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { Modified: head/sys/geom/raid/md_sii.c ============================================================================== --- head/sys/geom/raid/md_sii.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/raid/md_sii.c Thu Jul 9 02:52:39 2020 (r363034) @@ -1355,7 +1355,7 @@ g_raid_md_ctl_sii(struct g_raid_md_object *md, error = -2; break; } - if (strncmp(diskname, "/dev/", 5) == 0) + if (strncmp(diskname, _PATH_DEV, 5) == 0) diskname += 5; TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { Modified: head/sys/geom/raid3/g_raid3_ctl.c ============================================================================== --- head/sys/geom/raid3/g_raid3_ctl.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/raid3/g_raid3_ctl.c Thu Jul 9 02:52:39 2020 (r363034) @@ -78,7 +78,7 @@ g_raid3_find_disk(struct g_raid3_softc *sc, const char u_int n; sx_assert(&sc->sc_lock, SX_XLOCKED); - if (strncmp(name, "/dev/", 5) == 0) + if (strncmp(name, _PATH_DEV, 5) == 0) name += 5; for (n = 0; n < sc->sc_ndisks; n++) { disk = &sc->sc_disks[n]; @@ -431,7 +431,7 @@ g_raid3_ctl_insert(struct gctl_req *req, struct g_clas no = gctl_get_paraml(req, "number", sizeof(*no)); else no = NULL; - if (strncmp(name, "/dev/", 5) == 0) + if (strncmp(name, _PATH_DEV, 5) == 0) name += 5; g_topology_lock(); pp = g_provider_by_name(name); Modified: head/sys/geom/stripe/g_stripe.c ============================================================================== --- head/sys/geom/stripe/g_stripe.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/stripe/g_stripe.c Thu Jul 9 02:52:39 2020 (r363034) @@ -1096,8 +1096,8 @@ g_stripe_ctl_create(struct gctl_req *req, struct g_cla gctl_error(req, "No 'arg%u' argument.", no); return; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); pp = g_provider_by_name(name); if (pp == NULL) { G_STRIPE_DEBUG(1, "Disk %s is invalid.", name); @@ -1122,8 +1122,8 @@ g_stripe_ctl_create(struct gctl_req *req, struct g_cla gctl_error(req, "No 'arg%u' argument.", no); continue; } - if (strncmp(name, "/dev/", strlen("/dev/")) == 0) - name += strlen("/dev/"); + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); pp = g_provider_by_name(name); KASSERT(pp != NULL, ("Provider %s disappear?!", name)); if (g_stripe_add_disk(sc, pp, no - 1) != 0) { Modified: head/sys/geom/vinum/geom_vinum_share.c ============================================================================== --- head/sys/geom/vinum/geom_vinum_share.c Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/vinum/geom_vinum_share.c Thu Jul 9 02:52:39 2020 (r363034) @@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$"); #define iswhite(c) (((c) == ' ') || ((c) == '\t')) #else #include +#include #include #include #include @@ -466,7 +467,7 @@ gv_new_drive(int max, char *token[]) } ptr = token[j]; - if (strncmp(ptr, "/dev/", 5) == 0) + if (strncmp(ptr, _PATH_DEV, 5) == 0) ptr += 5; strlcpy(d->device, ptr, sizeof(d->device)); } else { Modified: head/sys/geom/virstor/g_virstor.h ============================================================================== --- head/sys/geom/virstor/g_virstor.h Thu Jul 9 00:34:07 2020 (r363033) +++ head/sys/geom/virstor/g_virstor.h Thu Jul 9 02:52:39 2020 (r363034) @@ -112,8 +112,4 @@ struct g_virstor_bio_q { #endif /* _KERNEL */ -#ifndef _PATH_DEV -#define _PATH_DEV "/dev/" -#endif - #endif /* !_G_VIRSTOR_H_ */ From owner-svn-src-all@freebsd.org Thu Jul 9 03:28:31 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 61F2C35E104; Thu, 9 Jul 2020 03:28:31 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from smtp-out-so.shaw.ca (smtp-out-so.shaw.ca [64.59.136.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2M8G35WGz4R29; Thu, 9 Jul 2020 03:28:29 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from spqr.komquats.com ([70.67.125.17]) by shaw.ca with ESMTPA id tNEXjFDsyYYpxtNEZj8Vxa; Wed, 08 Jul 2020 21:28:28 -0600 X-Authority-Analysis: v=2.3 cv=OubUNx3t c=1 sm=1 tr=0 a=VFtTW3WuZNDh6VkGe7fA3g==:117 a=VFtTW3WuZNDh6VkGe7fA3g==:17 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=_RQrkK6FrEwA:10 a=6I5d2MoRAAAA:8 a=_ctWjzdLAAAA:8 a=YxBL1-UpAAAA:8 a=EkcXrb_YAAAA:8 a=ivertL0OXLirZ6vrQHoA:9 a=gX0obxj2ZQlfiga1:21 a=Btts8oRErTxtH1W5:21 a=zzhV4YzyAdNZmCBt:21 a=CjuIK1q_8ugA:10 a=IjZwj45LgO3ly-622nXo:22 a=WoGCsytTnHKj16XvecxK:22 a=Ia-lj3WSrqcvXOmTRaiG:22 a=LK5xJRSDVpKd5WXXoEvA:22 Received: from slippy.cwsent.com (slippy [IPv6:fc00:1:1:1::5b]) by spqr.komquats.com (Postfix) with ESMTPS id CDFD21C5; Wed, 8 Jul 2020 20:28:24 -0700 (PDT) Received: from slippy.cwsent.com (localhost [127.0.0.1]) by slippy.cwsent.com (8.15.2/8.15.2) with ESMTP id 0693SNC4028245; Wed, 8 Jul 2020 20:28:23 -0700 (PDT) (envelope-from Cy.Schubert@cschubert.com) Received: from slippy (cy@localhost) by slippy.cwsent.com (8.15.2/8.15.2/Submit) with ESMTP id 0693SNo4028242; Wed, 8 Jul 2020 20:28:23 -0700 (PDT) (envelope-from Cy.Schubert@cschubert.com) Message-Id: <202007090328.0693SNo4028242@slippy.cwsent.com> X-Authentication-Warning: slippy.cwsent.com: cy owned process doing -bs X-Mailer: exmh version 2.9.0 11/07/2018 with nmh-1.7.1 Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: "Simon J. Gerraty" cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r363031 - in head: contrib/bmake contrib/bmake/lst.lib contrib/bmake/mk contrib/bmake/mk/sys contrib/bmake/unit-tests usr.bin/bmake In-reply-to: <202007082120.068LKCeN067904@repo.freebsd.org> References: <202007082120.068LKCeN067904@repo.freebsd.org> Comments: In-reply-to "Simon J. Gerraty" message dated "Wed, 08 Jul 2020 21:20:12 -0000." Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Wed, 08 Jul 2020 20:28:23 -0700 X-CMAE-Envelope: MS4wfAr2uIADS2VI8NBlMinPG5LriOuNG8EfTCwj3/t/CLhcVjLa3OrMNNW+ALEizpT1govXEM1nYrRNHRtijM2DBKkM9wEnk/uzz/QngYKJCsnsbHWrv8xK FjgJ8W/mh53eY/7yfS//c4t0/qNZrcA3DscrksoZDcU+MuwH5/U7a/IaQg7TQQByHJNAlgxt4r/+UCYOQun6IOLjqMuaElHwUKsnHO/Z8WLQQmOmld0GxFNA FN08yKkyKBC1A1kar8vFzenw4L2zn6kxPLU2kuMajJLoaCoMO/5/gm0L4PW8fJ+E X-Rspamd-Queue-Id: 4B2M8G35WGz4R29 X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:6327, ipnet:64.59.128.0/20, country:CA] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 03:28:31 -0000 In message <202007082120.068LKCeN067904@repo.freebsd.org>, "Simon J. Gerraty" w rites: > Author: sjg > Date: Wed Jul 8 21:20:12 2020 > New Revision: 363031 > URL: https://svnweb.freebsd.org/changeset/base/363031 > > Log: > Update to bmake-20200704 > > Key changes include reduced noise at end of failed build log > and avoid evaluation of unnecessary terms in conditionals. > > MFC after: 1 week > > Added: > head/contrib/bmake/LICENSE > - copied unchanged from r363019, vendor/NetBSD/bmake/dist/LICENSE > head/contrib/bmake/unit-tests/cond-short.exp > - copied unchanged from r363019, vendor/NetBSD/bmake/dist/unit-tests/con > d-short.exp > head/contrib/bmake/unit-tests/cond-short.mk > - copied unchanged from r363019, vendor/NetBSD/bmake/dist/unit-tests/con > d-short.mk > Modified: > head/contrib/bmake/ChangeLog > head/contrib/bmake/FILES > head/contrib/bmake/VERSION > head/contrib/bmake/arch.c > head/contrib/bmake/buf.c > head/contrib/bmake/compat.c > head/contrib/bmake/cond.c > head/contrib/bmake/dir.c > head/contrib/bmake/for.c > head/contrib/bmake/hash.c > head/contrib/bmake/hash.h > head/contrib/bmake/job.c > head/contrib/bmake/job.h > head/contrib/bmake/lst.lib/lstAppend.c > head/contrib/bmake/lst.lib/lstAtEnd.c > head/contrib/bmake/lst.lib/lstAtFront.c > head/contrib/bmake/lst.lib/lstClose.c > head/contrib/bmake/lst.lib/lstConcat.c > head/contrib/bmake/lst.lib/lstDatum.c > head/contrib/bmake/lst.lib/lstDeQueue.c > head/contrib/bmake/lst.lib/lstDupl.c > head/contrib/bmake/lst.lib/lstEnQueue.c > head/contrib/bmake/lst.lib/lstFind.c > head/contrib/bmake/lst.lib/lstFindFrom.c > head/contrib/bmake/lst.lib/lstFirst.c > head/contrib/bmake/lst.lib/lstForEach.c > head/contrib/bmake/lst.lib/lstForEachFrom.c > head/contrib/bmake/lst.lib/lstInit.c > head/contrib/bmake/lst.lib/lstInsert.c > head/contrib/bmake/lst.lib/lstIsAtEnd.c > head/contrib/bmake/lst.lib/lstIsEmpty.c > head/contrib/bmake/lst.lib/lstLast.c > head/contrib/bmake/lst.lib/lstNext.c > head/contrib/bmake/lst.lib/lstOpen.c > head/contrib/bmake/lst.lib/lstPrev.c > head/contrib/bmake/lst.lib/lstRemove.c > head/contrib/bmake/lst.lib/lstReplace.c > head/contrib/bmake/lst.lib/lstSucc.c > head/contrib/bmake/main.c > head/contrib/bmake/make.c > head/contrib/bmake/make.h > head/contrib/bmake/make_malloc.c > head/contrib/bmake/meta.c > head/contrib/bmake/meta.h > head/contrib/bmake/mk/ChangeLog > head/contrib/bmake/mk/FILES > head/contrib/bmake/mk/gendirdeps.mk > head/contrib/bmake/mk/install-mk > head/contrib/bmake/mk/mkopt.sh > head/contrib/bmake/mk/sys/AIX.mk > head/contrib/bmake/mk/sys/Darwin.mk > head/contrib/bmake/mk/sys/Generic.mk > head/contrib/bmake/mk/sys/HP-UX.mk > head/contrib/bmake/mk/sys/IRIX.mk > head/contrib/bmake/mk/sys/Linux.mk > head/contrib/bmake/mk/sys/NetBSD.mk > head/contrib/bmake/mk/sys/OSF1.mk > head/contrib/bmake/mk/sys/OpenBSD.mk > head/contrib/bmake/mk/sys/SunOS.mk > head/contrib/bmake/mk/sys/UnixWare.mk > head/contrib/bmake/nonints.h > head/contrib/bmake/parse.c > head/contrib/bmake/str.c > head/contrib/bmake/suff.c > head/contrib/bmake/targ.c > head/contrib/bmake/trace.c > head/contrib/bmake/unit-tests/Makefile > head/contrib/bmake/unit-tests/modmatch.mk > head/contrib/bmake/unit-tests/modmisc.exp > head/contrib/bmake/unit-tests/modmisc.mk > head/contrib/bmake/unit-tests/modorder.exp > head/contrib/bmake/unit-tests/modorder.mk > head/contrib/bmake/unit-tests/sysv.exp > head/contrib/bmake/unit-tests/sysv.mk > head/contrib/bmake/unit-tests/varmisc.exp > head/contrib/bmake/unit-tests/varmisc.mk > head/contrib/bmake/util.c > head/contrib/bmake/var.c > head/usr.bin/bmake/Makefile.config > Directory Properties: > head/contrib/bmake/ (props changed) > This broke ports. cwsys# make checksum make: "/usr/ports/Mk/Uses/python.mk" line 367: warning: String comparison operator should be either == or != make: "/usr/ports/Mk/Uses/python.mk" line 367: Malformed conditional (!defined(_PYTHON_VERSION) && !(!empty(_PYTHON_VERSION_MINIMUM) && ( ${__VER} < ${_PYTHON_VERSION_MINIMUM})) && !(!empty(_PYTHON_VERSION_MAXIMUM ) && ( ${__VER} > ${_PYTHON_VERSION_MAXIMUM}))) make: "/usr/ports/Mk/Uses/python.mk" line 367: warning: String comparison operator should be either == or != make: "/usr/ports/Mk/Uses/python.mk" line 367: Malformed conditional (!defined(_PYTHON_VERSION) && !(!empty(_PYTHON_VERSION_MINIMUM) && ( ${__VER} < ${_PYTHON_VERSION_MINIMUM})) && !(!empty(_PYTHON_VERSION_MAXIMUM ) && ( ${__VER} > ${_PYTHON_VERSION_MAXIMUM}))) make: "/usr/ports/Mk/Uses/python.mk" line 367: warning: String comparison operator should be either == or != make: "/usr/ports/Mk/Uses/python.mk" line 367: Malformed conditional (!defined(_PYTHON_VERSION) && !(!empty(_PYTHON_VERSION_MINIMUM) && ( ${__VER} < ${_PYTHON_VERSION_MINIMUM})) && !(!empty(_PYTHON_VERSION_MAXIMUM ) && ( ${__VER} > ${_PYTHON_VERSION_MAXIMUM}))) make: "/usr/ports/Mk/Uses/python.mk" line 367: warning: String comparison operator should be either == or != make: "/usr/ports/Mk/Uses/python.mk" line 367: Malformed conditional (!defined(_PYTHON_VERSION) && !(!empty(_PYTHON_VERSION_MINIMUM) && ( ${__VER} < ${_PYTHON_VERSION_MINIMUM})) && !(!empty(_PYTHON_VERSION_MAXIMUM ) && ( ${__VER} > ${_PYTHON_VERSION_MAXIMUM}))) make: "/usr/ports/Mk/Uses/python.mk" line 367: warning: String comparison operator should be either == or != make: "/usr/ports/Mk/Uses/python.mk" line 367: Malformed conditional (!defined(_PYTHON_VERSION) && !(!empty(_PYTHON_VERSION_MINIMUM) && ( ${__VER} < ${_PYTHON_VERSION_MINIMUM})) && !(!empty(_PYTHON_VERSION_MAXIMUM ) && ( ${__VER} > ${_PYTHON_VERSION_MAXIMUM}))) make: "/usr/ports/Mk/Uses/python.mk" line 367: warning: String comparison operator should be either == or != make: "/usr/ports/Mk/Uses/python.mk" line 367: Malformed conditional (!defined(_PYTHON_VERSION) && !(!empty(_PYTHON_VERSION_MINIMUM) && ( ${__VER} < ${_PYTHON_VERSION_MINIMUM})) && !(!empty(_PYTHON_VERSION_MAXIMUM ) && ( ${__VER} > ${_PYTHON_VERSION_MAXIMUM}))) make: "/usr/ports/Mk/bsd.port.mk" line 2096: warning: String comparison operator should be either == or != make: "/usr/ports/Mk/bsd.port.mk" line 2096: Malformed conditional (defined(MAKE_JOBS_NUMBER_LIMIT) && ( ${MAKE_JOBS_NUMBER_LIMIT} < ${_MAKE_JOBS_NUMBER} )) make: Fatal errors encountered -- cannot continue make: stopped in /usr/ports/www/firefox cwsys# The same errors occur during buildworld. Simply reverting just contrib/bmake/cond.c resolves this issue. The cause of this issue is NetBSD cond.c r1.76, therefore it is safe to revert just the one file without reverting the complete upgrade. http://cvsweb.netbsd.org/bsdweb.cgi/src/usr.bin/make/cond.c?rev=1.76&content-type=text/x-cvsweb-markup&only_with_tag=MAIN -- Cheers, Cy Schubert FreeBSD UNIX: Web: https://FreeBSD.org NTP: Web: https://nwtime.org The need of the many outweighs the greed of the few. From owner-svn-src-all@freebsd.org Thu Jul 9 03:46:10 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 560ED35EC17; Thu, 9 Jul 2020 03:46:10 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2MXf0P4hz4SPp; Thu, 9 Jul 2020 03:46:10 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C8ABBB131; Thu, 9 Jul 2020 03:46:09 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0693k9I2007839; Thu, 9 Jul 2020 03:46:09 GMT (envelope-from sjg@FreeBSD.org) Received: (from sjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0693k81j007829; Thu, 9 Jul 2020 03:46:08 GMT (envelope-from sjg@FreeBSD.org) Message-Id: <202007090346.0693k81j007829@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sjg set sender to sjg@FreeBSD.org using -f From: "Simon J. Gerraty" Date: Thu, 9 Jul 2020 03:46:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363035 - in head: contrib/bmake contrib/bmake/lst.lib contrib/bmake/mk contrib/bmake/mk/sys contrib/bmake/unit-tests usr.bin/bmake X-SVN-Group: head X-SVN-Commit-Author: sjg X-SVN-Commit-Paths: in head: contrib/bmake contrib/bmake/lst.lib contrib/bmake/mk contrib/bmake/mk/sys contrib/bmake/unit-tests usr.bin/bmake X-SVN-Commit-Revision: 363035 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 03:46:10 -0000 Author: sjg Date: Thu Jul 9 03:46:07 2020 New Revision: 363035 URL: https://svnweb.freebsd.org/changeset/base/363035 Log: Revert r363031 Modified: head/contrib/bmake/ChangeLog head/contrib/bmake/FILES head/contrib/bmake/LICENSE head/contrib/bmake/VERSION head/contrib/bmake/arch.c head/contrib/bmake/buf.c head/contrib/bmake/compat.c head/contrib/bmake/cond.c head/contrib/bmake/dir.c head/contrib/bmake/for.c head/contrib/bmake/hash.c head/contrib/bmake/hash.h head/contrib/bmake/job.c head/contrib/bmake/job.h head/contrib/bmake/lst.lib/lstAppend.c head/contrib/bmake/lst.lib/lstAtEnd.c head/contrib/bmake/lst.lib/lstAtFront.c head/contrib/bmake/lst.lib/lstClose.c head/contrib/bmake/lst.lib/lstConcat.c head/contrib/bmake/lst.lib/lstDatum.c head/contrib/bmake/lst.lib/lstDeQueue.c head/contrib/bmake/lst.lib/lstDupl.c head/contrib/bmake/lst.lib/lstEnQueue.c head/contrib/bmake/lst.lib/lstFind.c head/contrib/bmake/lst.lib/lstFindFrom.c head/contrib/bmake/lst.lib/lstFirst.c head/contrib/bmake/lst.lib/lstForEach.c head/contrib/bmake/lst.lib/lstForEachFrom.c head/contrib/bmake/lst.lib/lstInit.c head/contrib/bmake/lst.lib/lstInsert.c head/contrib/bmake/lst.lib/lstIsAtEnd.c head/contrib/bmake/lst.lib/lstIsEmpty.c head/contrib/bmake/lst.lib/lstLast.c head/contrib/bmake/lst.lib/lstNext.c head/contrib/bmake/lst.lib/lstOpen.c head/contrib/bmake/lst.lib/lstPrev.c head/contrib/bmake/lst.lib/lstRemove.c head/contrib/bmake/lst.lib/lstReplace.c head/contrib/bmake/lst.lib/lstSucc.c head/contrib/bmake/main.c head/contrib/bmake/make.c head/contrib/bmake/make.h head/contrib/bmake/make_malloc.c head/contrib/bmake/meta.c head/contrib/bmake/meta.h head/contrib/bmake/mk/ChangeLog head/contrib/bmake/mk/FILES head/contrib/bmake/mk/gendirdeps.mk head/contrib/bmake/mk/install-mk head/contrib/bmake/mk/mkopt.sh head/contrib/bmake/mk/sys/AIX.mk head/contrib/bmake/mk/sys/Darwin.mk head/contrib/bmake/mk/sys/Generic.mk head/contrib/bmake/mk/sys/HP-UX.mk head/contrib/bmake/mk/sys/IRIX.mk head/contrib/bmake/mk/sys/Linux.mk head/contrib/bmake/mk/sys/NetBSD.mk head/contrib/bmake/mk/sys/OSF1.mk head/contrib/bmake/mk/sys/OpenBSD.mk head/contrib/bmake/mk/sys/SunOS.mk head/contrib/bmake/mk/sys/UnixWare.mk head/contrib/bmake/nonints.h head/contrib/bmake/parse.c head/contrib/bmake/str.c head/contrib/bmake/suff.c head/contrib/bmake/targ.c head/contrib/bmake/trace.c head/contrib/bmake/unit-tests/Makefile head/contrib/bmake/unit-tests/cond-short.exp head/contrib/bmake/unit-tests/cond-short.mk head/contrib/bmake/unit-tests/modmatch.mk head/contrib/bmake/unit-tests/modmisc.exp head/contrib/bmake/unit-tests/modmisc.mk head/contrib/bmake/unit-tests/modorder.exp head/contrib/bmake/unit-tests/modorder.mk head/contrib/bmake/unit-tests/sysv.exp head/contrib/bmake/unit-tests/sysv.mk head/contrib/bmake/unit-tests/varmisc.exp head/contrib/bmake/unit-tests/varmisc.mk head/contrib/bmake/util.c head/contrib/bmake/var.c head/usr.bin/bmake/Makefile.config Modified: head/contrib/bmake/ChangeLog ============================================================================== --- head/contrib/bmake/ChangeLog Thu Jul 9 02:52:39 2020 (r363034) +++ head/contrib/bmake/ChangeLog Thu Jul 9 03:46:07 2020 (r363035) @@ -1,81 +1,3 @@ -2020-07-04 Simon J Gerraty - - * VERSION (_MAKE_VERSION): 20200704 - Merge with NetBSD make, pick up - (most of this by rillig@) - o lots of style and white-space cleanup - o lots more unit tests for variable modifiers - o simplified description of some functions - o str.c: refactor Str_Match - o var.c: debugging output for :@ - constify VarModify parameter - fix :hash modifier on 16-bit platforms - remove unnecessary forward declarations - refactor ApplyModifier_SysV to have less indentation - simplify code for :E and :R - clean up code for :H and :T - refactor ApplyModifiers - - * var.c: we need stdint.h on some platforms to get uint32_t - * unit-test/Makefile: we need to supress the specific error - for RE substitution error in modmisc, since it varies accross - different OS. - -2020-07-02 Simon J Gerraty - - * VERSION (_MAKE_VERSION): 20200702 - Merge with NetBSD make, pick up - o var.c: more improvements to avoiding unnecessary evaluation - use enums for flags - o remove flags arg to Var_Set which outside of var.c is always 0 - -2020-07-01 Simon J Gerraty - - * VERSION (_MAKE_VERSION): 20200701 - Merge with NetBSD make, pick up - o var.c: with change to cond.c; ensure that nested variables - within a variable name are expanded. - o unit-tests/varmisc.mk: test for nested varname - -2020-06-29 Simon J Gerraty - - * VERSION (_MAKE_VERSION): 20200629 - Merge with NetBSD make, pick up - o cond.c: do not eval unnecessary terms of conditionals. - -2020-06-25 Simon J Gerraty - - * VERSION (_MAKE_VERSION): 20200625 - Merge with NetBSD make, pick up - o meta.c: report error if lseek in filemon_read fails - -2020-06-22 Simon J Gerraty - - * VERSION (_MAKE_VERSION): 20200622 - Merge with NetBSD make, pick up - o dieQuietly: ignore OP_SUBMAKE as too aggressive - -2020-06-19 Simon J Gerraty - - * VERSION (_MAKE_VERSION): 20200619 - Merge with NetBSD make, pick up - o str.c: performance improvement for Str_Match for multiple '*' - o dieQuietly: supress the failure output from make - when failing node is a sub-make or a sibling failed. - This cuts down greatly on unhelpful noise at the end of - build log. Disabled by -dj or .MAKE.DIE_QUIETLY=no - -2020-06-10 Simon J Gerraty - - * FILES: add LICENSE to appease some packagers. - This is an attempt to fairly represent the license on almost - 200 files, which are almost all BSD-3-Clause - The few exceptions being more liberal. - - * VERSION (_MAKE_VERSION): 20200610 - Merge with NetBSD make, pick up - o unit test for :Or - 2020-06-06 Simon J Gerraty * VERSION (_MAKE_VERSION): 20200606 Modified: head/contrib/bmake/FILES ============================================================================== --- head/contrib/bmake/FILES Thu Jul 9 02:52:39 2020 (r363034) +++ head/contrib/bmake/FILES Thu Jul 9 03:46:07 2020 (r363035) @@ -1,6 +1,5 @@ ChangeLog FILES -LICENSE Makefile Makefile.config.in PSD.doc/Makefile @@ -108,8 +107,6 @@ unit-tests/cond2.exp unit-tests/cond2.mk unit-tests/cond-late.mk unit-tests/cond-late.exp -unit-tests/cond-short.mk -unit-tests/cond-short.exp unit-tests/dollar.exp unit-tests/dollar.mk unit-tests/doterror.exp Modified: head/contrib/bmake/LICENSE ============================================================================== --- head/contrib/bmake/LICENSE Thu Jul 9 02:52:39 2020 (r363034) +++ head/contrib/bmake/LICENSE Thu Jul 9 03:46:07 2020 (r363035) @@ -1,59 +0,0 @@ -The individual files in this distribution are copyright their -original contributors or assignees. -Including: - - Copyright (c) 1993-2020, Simon J Gerraty - Copyright (c) 2009-2016, Juniper Networks, Inc. - Copyright (c) 2009, John Birrell. - Copyright (c) 1997-2020 The NetBSD Foundation, Inc. - Copyright (c) 1998 Todd C. Miller - Copyright (c) 1989 by Berkeley Softworks - Copyright (c) 1988, 1989, 1990, 1992, 1993 - The Regents of the University of California. - Copyright (c) 1988, 1989 by Adam de Boor - -With the exception of the GNU configure script, which states: - - # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. - # - # This configure script is free software; the Free Software Foundation - # gives unlimited permission to copy, distribute and modify it. - -The license for this distribution is considered to be: - - SPDX-License-Identifier: BSD-3-Clause - -example (from https://opensource.org/licenses/BSD-3-Clause): - - Copyright - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - 3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. - Modified: head/contrib/bmake/VERSION ============================================================================== --- head/contrib/bmake/VERSION Thu Jul 9 02:52:39 2020 (r363034) +++ head/contrib/bmake/VERSION Thu Jul 9 03:46:07 2020 (r363035) @@ -1,2 +1,2 @@ # keep this compatible with sh and make -_MAKE_VERSION=20200704 +_MAKE_VERSION=20200606 Modified: head/contrib/bmake/arch.c ============================================================================== --- head/contrib/bmake/arch.c Thu Jul 9 02:52:39 2020 (r363034) +++ head/contrib/bmake/arch.c Thu Jul 9 03:46:07 2020 (r363035) @@ -1,4 +1,4 @@ -/* $NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $ */ +/* $NetBSD: arch.c,v 1.71 2019/10/05 23:35:57 mrg Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $"; +static char rcsid[] = "$NetBSD: arch.c,v 1.71 2019/10/05 23:35:57 mrg Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)arch.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: arch.c,v 1.73 2020/07/03 08:02:55 rillig Exp $"); +__RCSID("$NetBSD: arch.c,v 1.71 2019/10/05 23:35:57 mrg Exp $"); #endif #endif /* not lint */ #endif @@ -312,7 +312,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * free(freeIt); if (result == var_Error) { - return FAILURE; + return(FAILURE); } else { subLibName = TRUE; } @@ -354,7 +354,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * free(freeIt); if (result == var_Error) { - return FAILURE; + return(FAILURE); } else { doSubst = TRUE; } @@ -372,7 +372,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * */ if (*cp == '\0') { printf("No closing parenthesis in archive specification\n"); - return FAILURE; + return (FAILURE); } /* @@ -426,7 +426,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * if (gn == NULL) { free(buf); - return FAILURE; + return(FAILURE); } else { gn->type |= OP_ARCHV; (void)Lst_AtEnd(nodeLst, gn); @@ -437,7 +437,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * * ourselves. */ free(buf); - return FAILURE; + return(FAILURE); } /* * Free buffer and continue with our work. @@ -461,7 +461,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * gn = Targ_FindNode(nameBuf, TARG_CREATE); if (gn == NULL) { free(nameBuf); - return FAILURE; + return (FAILURE); } else { /* * We've found the node, but have to make sure the rest of @@ -483,7 +483,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * gn = Targ_FindNode(nameBuf, TARG_CREATE); free(nameBuf); if (gn == NULL) { - return FAILURE; + return (FAILURE); } else { /* * We've found the node, but have to make sure the rest of the @@ -520,7 +520,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * } while (*cp != '\0' && isspace ((unsigned char)*cp)); *linePtr = cp; - return SUCCESS; + return (SUCCESS); } /*- @@ -544,7 +544,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode * static int ArchFindArchive(const void *ar, const void *archName) { - return strcmp(archName, ((const Arch *)ar)->name); + return (strcmp(archName, ((const Arch *)ar)->name)); } /*- @@ -602,7 +602,7 @@ ArchStatMember(char *archive, char *member, Boolean ha he = Hash_FindEntry(&ar->members, member); if (he != NULL) { - return (struct ar_hdr *)Hash_GetValue(he); + return ((struct ar_hdr *)Hash_GetValue(he)); } else { /* Try truncated name */ char copy[AR_MAX_NAME_LEN+1]; @@ -614,7 +614,7 @@ ArchStatMember(char *archive, char *member, Boolean ha copy[AR_MAX_NAME_LEN] = '\0'; } if ((he = Hash_FindEntry(&ar->members, copy)) != NULL) - return (struct ar_hdr *)Hash_GetValue(he); + return ((struct ar_hdr *)Hash_GetValue(he)); return NULL; } } @@ -635,7 +635,7 @@ ArchStatMember(char *archive, char *member, Boolean ha return NULL; } else { fclose(arch); - return &sarh; + return (&sarh); } } @@ -753,7 +753,7 @@ ArchStatMember(char *archive, char *member, Boolean ha he = Hash_FindEntry(&ar->members, member); if (he != NULL) { - return (struct ar_hdr *)Hash_GetValue(he); + return ((struct ar_hdr *)Hash_GetValue(he)); } else { return NULL; } @@ -962,7 +962,7 @@ ArchFindMember(char *archive, char *member, struct ar_ fclose(arch); return NULL; } - return arch; + return (arch); } } else #ifdef AR_EFMT1 @@ -996,7 +996,7 @@ ArchFindMember(char *archive, char *member, struct ar_ fclose(arch); return NULL; } - return arch; + return (arch); } if (fseek(arch, -elen, SEEK_CUR) != 0) { fclose(arch); @@ -1152,7 +1152,7 @@ Arch_MTime(GNode *gn) } gn->mtime = modTime; - return modTime; + return (modTime); } /*- @@ -1179,7 +1179,7 @@ Arch_MemMTime(GNode *gn) if (Lst_Open(gn->parents) != SUCCESS) { gn->mtime = 0; - return 0; + return (0); } while ((ln = Lst_Next(gn->parents)) != NULL) { pgn = (GNode *)Lst_Datum(ln); @@ -1211,7 +1211,7 @@ Arch_MemMTime(GNode *gn) Lst_Close(gn->parents); - return gn->mtime; + return (gn->mtime); } /*- @@ -1252,9 +1252,9 @@ Arch_FindLib(GNode *gn, Lst path) free(libName); #ifdef LIBRARIES - Var_Set(TARGET, gn->name, gn); + Var_Set(TARGET, gn->name, gn, 0); #else - Var_Set(TARGET, gn->path == NULL ? gn->name : gn->path, gn); + Var_Set(TARGET, gn->path == NULL ? gn->name : gn->path, gn, 0); #endif /* LIBRARIES */ } @@ -1337,7 +1337,7 @@ Arch_LibOODate(GNode *gn) oodate = FALSE; #endif } - return oodate; + return (oodate); } /*- Modified: head/contrib/bmake/buf.c ============================================================================== --- head/contrib/bmake/buf.c Thu Jul 9 02:52:39 2020 (r363034) +++ head/contrib/bmake/buf.c Thu Jul 9 03:46:07 2020 (r363035) @@ -1,4 +1,4 @@ -/* $NetBSD: buf.c,v 1.26 2020/07/03 08:02:55 rillig Exp $ */ +/* $NetBSD: buf.c,v 1.25 2012/04/24 20:26:58 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: buf.c,v 1.26 2020/07/03 08:02:55 rillig Exp $"; +static char rcsid[] = "$NetBSD: buf.c,v 1.25 2012/04/24 20:26:58 sjg Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)buf.c 8.1 (Berkeley) 6/6/93"; #else -__RCSID("$NetBSD: buf.c,v 1.26 2020/07/03 08:02:55 rillig Exp $"); +__RCSID("$NetBSD: buf.c,v 1.25 2012/04/24 20:26:58 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -160,7 +160,7 @@ Buf_GetAll(Buffer *bp, int *numBytesPtr) if (numBytesPtr != NULL) *numBytesPtr = bp->count; - return bp->buffer; + return (bp->buffer); } /*- Modified: head/contrib/bmake/compat.c ============================================================================== --- head/contrib/bmake/compat.c Thu Jul 9 02:52:39 2020 (r363034) +++ head/contrib/bmake/compat.c Thu Jul 9 03:46:07 2020 (r363035) @@ -1,4 +1,4 @@ -/* $NetBSD: compat.c,v 1.113 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: compat.c,v 1.110 2020/01/19 19:42:32 riastradh Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: compat.c,v 1.113 2020/07/03 08:13:23 rillig Exp $"; +static char rcsid[] = "$NetBSD: compat.c,v 1.110 2020/01/19 19:42:32 riastradh Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)compat.c 8.2 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: compat.c,v 1.113 2020/07/03 08:13:23 rillig Exp $"); +__RCSID("$NetBSD: compat.c,v 1.110 2020/01/19 19:42:32 riastradh Exp $"); #endif #endif /* not lint */ #endif @@ -236,7 +236,7 @@ CompatRunCommand(void *cmdp, void *gnp) silent = gn->type & OP_SILENT; errCheck = !(gn->type & OP_IGNORE); doIt = FALSE; - + cmdNode = Lst_Member(gn->commands, cmd); cmdStart = Var_Subst(NULL, cmd, gn, VARF_WANTRES); @@ -249,18 +249,18 @@ CompatRunCommand(void *cmdp, void *gnp) if (*cmdStart == '\0') { free(cmdStart); - return 0; + return(0); } cmd = cmdStart; Lst_Replace(cmdNode, cmdStart); if ((gn->type & OP_SAVE_CMDS) && (gn != ENDNode)) { (void)Lst_AtEnd(ENDNode->commands, cmdStart); - return 0; + return(0); } if (strcmp(cmdStart, "...") == 0) { gn->type |= OP_SAVE_CMDS; - return 0; + return(0); } while ((*cmd == '@') || (*cmd == '-') || (*cmd == '+')) { @@ -287,7 +287,7 @@ CompatRunCommand(void *cmdp, void *gnp) * If we did not end up with a command, just skip it. */ if (!*cmd) - return 0; + return (0); #if !defined(MAKE_NATIVE) /* @@ -307,7 +307,7 @@ CompatRunCommand(void *cmdp, void *gnp) * go to the shell. Therefore treat '=' and ':' like shell * meta characters as documented in make(1). */ - + useShell = needshell(cmd, FALSE); #endif @@ -325,7 +325,7 @@ CompatRunCommand(void *cmdp, void *gnp) * we go... */ if (!doIt && NoExecute(gn)) { - return 0; + return (0); } if (DEBUG(JOB)) fprintf(debug_file, "Execute: '%s'\n", cmd); @@ -377,7 +377,7 @@ again: meta_compat_start(); } #endif - + /* * Fork and execute the single command. If the fork fails, we abort. */ @@ -499,8 +499,8 @@ again: bmake_signal(compatSigno, SIG_DFL); kill(myPid, compatSigno); } - - return status; + + return (status); } /*- @@ -550,7 +550,7 @@ Compat_Make(void *gnp, void *pgnp) if (Lst_Member(gn->iParents, pgn) != NULL) { char *p1; - Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn); + Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn, 0); free(p1); } @@ -654,7 +654,7 @@ Compat_Make(void *gnp, void *pgnp) } else { if (Lst_Member(gn->iParents, pgn) != NULL) { char *p1; - Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn); + Var_Set(IMPSRC, Var_Value(TARGET, gn, &p1), pgn, 0); free(p1); } switch(gn->made) { @@ -681,7 +681,7 @@ Compat_Make(void *gnp, void *pgnp) cohorts: Lst_ForEach(gn->cohorts, Compat_Make, pgnp); - return 0; + return (0); } /*- Modified: head/contrib/bmake/cond.c ============================================================================== --- head/contrib/bmake/cond.c Thu Jul 9 02:52:39 2020 (r363034) +++ head/contrib/bmake/cond.c Thu Jul 9 03:46:07 2020 (r363035) @@ -1,4 +1,4 @@ -/* $NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: cond.c,v 1.75 2017/04/16 20:59:04 riastradh Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $"; +static char rcsid[] = "$NetBSD: cond.c,v 1.75 2017/04/16 20:59:04 riastradh Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)cond.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $"); +__RCSID("$NetBSD: cond.c,v 1.75 2017/04/16 20:59:04 riastradh Exp $"); #endif #endif /* not lint */ #endif @@ -146,7 +146,7 @@ typedef enum { * last two fields are stored in condInvert and condDefProc, respectively. */ static void CondPushBack(Token); -static int CondGetArg(Boolean, char **, char **, const char *); +static int CondGetArg(char **, char **, const char *); static Boolean CondDoDefined(int, const char *); static int CondStrMatch(const void *, const void *); static Boolean CondDoMake(int, const char *); @@ -186,7 +186,7 @@ static unsigned int cond_min_depth = 0; /* depth at * Indicate when we should be strict about lhs of comparisons. * TRUE when Cond_EvalExpression is called from Cond_Eval (.if etc) * FALSE when Cond_EvalExpression is called from var.c:ApplyModifiers - * since lhs is already expanded and we cannot tell if + * since lhs is already expanded and we cannot tell if * it was a variable reference or not. */ static Boolean lhsStrict; @@ -225,6 +225,9 @@ CondPushBack(Token t) * CondGetArg -- * Find the argument of a built-in function. * + * Input: + * parens TRUE if arg should be bounded by parens + * * Results: * The length of the argument and the address of the argument. * @@ -235,7 +238,7 @@ CondPushBack(Token t) *----------------------------------------------------------------------- */ static int -CondGetArg(Boolean doEval, char **linePtr, char **argPtr, const char *func) +CondGetArg(char **linePtr, char **argPtr, const char *func) { char *cp; int argLen; @@ -256,7 +259,7 @@ CondGetArg(Boolean doEval, char **linePtr, char **argP * the word 'make' or 'defined' at the beginning of a symbol... */ *argPtr = NULL; - return 0; + return (0); } while (*cp == ' ' || *cp == '\t') { @@ -287,8 +290,7 @@ CondGetArg(Boolean doEval, char **linePtr, char **argP int len; void *freeIt; - cp2 = Var_Parse(cp, VAR_CMD, VARF_UNDEFERR| - (doEval ? VARF_WANTRES : 0), + cp2 = Var_Parse(cp, VAR_CMD, VARF_UNDEFERR|VARF_WANTRES, &len, &freeIt); Buf_AddBytes(&buf, strlen(cp2), cp2); free(freeIt); @@ -314,11 +316,11 @@ CondGetArg(Boolean doEval, char **linePtr, char **argP if (func != NULL && *cp++ != ')') { Parse_Error(PARSE_WARNING, "Missing closing parenthesis for %s()", func); - return 0; + return (0); } *linePtr = cp; - return argLen; + return (argLen); } /*- @@ -347,7 +349,7 @@ CondDoDefined(int argLen MAKE_ATTR_UNUSED, const char } free(p1); - return result; + return (result); } /*- @@ -367,7 +369,7 @@ CondDoDefined(int argLen MAKE_ATTR_UNUSED, const char static int CondStrMatch(const void *string, const void *pattern) { - return !Str_Match(string, pattern); + return(!Str_Match(string, pattern)); } /*- @@ -412,14 +414,14 @@ CondDoExists(int argLen MAKE_ATTR_UNUSED, const char * if (DEBUG(COND)) { fprintf(debug_file, "exists(%s) result is \"%s\"\n", arg, path ? path : ""); - } + } if (path != NULL) { result = TRUE; free(path); } else { result = FALSE; } - return result; + return (result); } /*- @@ -441,7 +443,7 @@ CondDoTarget(int argLen MAKE_ATTR_UNUSED, const char * GNode *gn; gn = Targ_FindNode(arg, TARG_NOCREATE); - return gn != NULL && !OP_NOP(gn->type); + return (gn != NULL) && !OP_NOP(gn->type); } /*- @@ -465,7 +467,7 @@ CondDoCommands(int argLen MAKE_ATTR_UNUSED, const char GNode *gn; gn = Targ_FindNode(arg, TARG_NOCREATE); - return gn != NULL && !OP_NOP(gn->type) && !Lst_IsEmpty(gn->commands); + return (gn != NULL) && !OP_NOP(gn->type) && !Lst_IsEmpty(gn->commands); } /*- @@ -575,7 +577,7 @@ CondGetString(Boolean doEval, Boolean *quoted, void ** /* if we are in quotes, then an undefined variable is ok */ str = Var_Parse(condExpr, VAR_CMD, ((!qt && doEval) ? VARF_UNDEFERR : 0) | - (doEval ? VARF_WANTRES : 0), &len, freeIt); + VARF_WANTRES, &len, freeIt); if (str == var_Error) { if (*freeIt) { free(*freeIt); @@ -666,7 +668,7 @@ compare_expression(Boolean doEval) rhs = NULL; lhsFree = rhsFree = FALSE; lhsQuoted = rhsQuoted = FALSE; - + /* * Parse the variable spec and skip over it, saving its * value in lhs. @@ -709,7 +711,7 @@ compare_expression(Boolean doEval) goto done; } /* For .ifxxx compare against zero */ - if (CondCvtArg(lhs, &left)) { + if (CondCvtArg(lhs, &left)) { t = left != 0.0; goto done; } @@ -762,7 +764,7 @@ do_string_compare: * rhs is either a float or an integer. Convert both the * lhs and the rhs to a double and compare the two. */ - + if (!CondCvtArg(lhs, &left) || !CondCvtArg(rhs, &right)) goto do_string_compare; @@ -811,7 +813,7 @@ done: } static int -get_mpt_arg(Boolean doEval, char **linePtr, char **argPtr, const char *func MAKE_ATTR_UNUSED) +get_mpt_arg(char **linePtr, char **argPtr, const char *func MAKE_ATTR_UNUSED) { /* * Use Var_Parse to parse the spec in parens and return @@ -825,7 +827,7 @@ get_mpt_arg(Boolean doEval, char **linePtr, char **arg /* We do all the work here and return the result as the length */ *argPtr = NULL; - val = Var_Parse(cp - 1, VAR_CMD, doEval ? VARF_WANTRES : 0, &length, &freeIt); + val = Var_Parse(cp - 1, VAR_CMD, VARF_WANTRES, &length, &freeIt); /* * Advance *linePtr to beyond the closing ). Note that * we subtract one because 'length' is calculated from 'cp - 1'. @@ -862,7 +864,7 @@ compare_function(Boolean doEval) static const struct fn_def { const char *fn_name; int fn_name_len; - int (*fn_getarg)(Boolean, char **, char **, const char *); + int (*fn_getarg)(char **, char **, const char *); Boolean (*fn_proc)(int, const char *); } fn_defs[] = { { "defined", 7, CondGetArg, CondDoDefined }, @@ -890,7 +892,7 @@ compare_function(Boolean doEval) if (*cp != '(') break; - arglen = fn_def->fn_getarg(doEval, &cp, &arg, fn_def->fn_name); + arglen = fn_def->fn_getarg(&cp, &arg, fn_def->fn_name); if (arglen <= 0) { condExpr = cp; return arglen < 0 ? TOK_ERROR : TOK_FALSE; @@ -915,7 +917,7 @@ compare_function(Boolean doEval) * would be invalid if we did "defined(a)" - so instead treat as an * expression. */ - arglen = CondGetArg(doEval, &cp, &arg, NULL); + arglen = CondGetArg(&cp, &arg, NULL); for (cp1 = cp; isspace(*(unsigned char *)cp1); cp1++) continue; if (*cp1 == '=' || *cp1 == '!') @@ -1038,7 +1040,7 @@ CondT(Boolean doEval) t = TOK_TRUE; } } - return t; + return (t); } /*- @@ -1084,7 +1086,7 @@ CondF(Boolean doEval) CondPushBack(o); } } - return l; + return (l); } /*- @@ -1131,7 +1133,7 @@ CondE(Boolean doEval) CondPushBack(o); } } - return l; + return (l); } /*- Modified: head/contrib/bmake/dir.c ============================================================================== --- head/contrib/bmake/dir.c Thu Jul 9 02:52:39 2020 (r363034) +++ head/contrib/bmake/dir.c Thu Jul 9 03:46:07 2020 (r363035) @@ -1,4 +1,4 @@ -/* $NetBSD: dir.c,v 1.76 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: dir.c,v 1.74 2020/06/05 18:03:59 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: dir.c,v 1.76 2020/07/03 08:13:23 rillig Exp $"; +static char rcsid[] = "$NetBSD: dir.c,v 1.74 2020/06/05 18:03:59 sjg Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)dir.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: dir.c,v 1.76 2020/07/03 08:13:23 rillig Exp $"); +__RCSID("$NetBSD: dir.c,v 1.74 2020/06/05 18:03:59 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -112,7 +112,7 @@ __RCSID("$NetBSD: dir.c,v 1.76 2020/07/03 08:13:23 ril * Dir_FindHereOrAbove Search for a path in the current directory and * then all the directories above it in turn until * the path is found or we reach the root ("/"). - * + * * Dir_MTime Return the modification time of a node. The file * is searched for along the default search path. * The path and mtime fields of the node are filled @@ -377,7 +377,7 @@ void Dir_InitCur(const char *cdname) { Path *p; - + if (cdname != NULL) { /* * Our build directory is not the same as our source directory. @@ -480,7 +480,7 @@ Dir_SetPATH(void) Boolean hasLastDot = FALSE; /* true we should search dot last */ Var_Delete(".PATH", VAR_GLOBAL); - + if (Lst_Open(dirSearchPath) == SUCCESS) { if ((ln = Lst_First(dirSearchPath)) != NULL) { p = (Path *)Lst_Datum(ln); @@ -537,7 +537,7 @@ Dir_SetPATH(void) static int DirFindName(const void *p, const void *dname) { - return strcmp(((const Path *)p)->name, dname); + return (strcmp(((const Path *)p)->name, dname)); } /*- @@ -545,7 +545,7 @@ DirFindName(const void *p, const void *dname) * Dir_HasWildcards -- * see if the given name has any wildcard characters in it * be careful not to expand unmatching brackets or braces. - * XXX: This code is not 100% correct. ([^]] fails etc.) + * XXX: This code is not 100% correct. ([^]] fails etc.) * I really don't think that make(1) should be expanding * patterns, because then you have to set a mechanism for * escaping the expansion! @@ -644,7 +644,7 @@ DirMatchFiles(const char *pattern, Path *p, Lst expans STR_ADDSLASH))); } } - return 0; + return (0); } /*- @@ -947,7 +947,7 @@ Dir_Expand(const char *word, Lst path, Lst expansions) *----------------------------------------------------------------------- */ static char * -DirLookup(Path *p, const char *name MAKE_ATTR_UNUSED, const char *cp, +DirLookup(Path *p, const char *name MAKE_ATTR_UNUSED, const char *cp, Boolean hasSlash MAKE_ATTR_UNUSED) { char *file; /* the current filename to check */ @@ -1004,7 +1004,7 @@ DirLookupSubdir(Path *p, const char *name) if (cached_stat(file, &stb) == 0) { nearmisses += 1; - return file; + return (file); } free(file); return NULL; @@ -1061,7 +1061,7 @@ DirLookupAbs(Path *p, const char *name, const char *cp if (DEBUG(DIR)) { fprintf(debug_file, " returning %s\n", name); } - return bmake_strdup(name); + return (bmake_strdup(name)); } /*- @@ -1087,7 +1087,7 @@ DirFindDot(Boolean hasSlash MAKE_ATTR_UNUSED, const ch } hits += 1; dot->hits += 1; - return bmake_strdup(name); + return (bmake_strdup(name)); } if (cur && Hash_FindEntry(&cur->files, cp) != NULL) { @@ -1185,7 +1185,7 @@ Dir_FindFile(const char *name, Lst path) * is found, we concatenate the directory name and the final * component and return the resulting string. If we don't find any * such thing, we go on to phase two... - * + * * No matter what, we always look for the file in the current * directory before anywhere else (unless we found the magic * DOTLAST path, in which case we search it last) and we *do not* @@ -1384,7 +1384,7 @@ Dir_FindFile(const char *name, Lst path) } if (Hash_FindEntry(&p->files, cp) != NULL) { - return bmake_strdup(name); + return (bmake_strdup(name)); } else { return NULL; } @@ -1395,7 +1395,7 @@ Dir_FindFile(const char *name, Lst path) bigmisses += 1; if (cached_stat(name, &stb) == 0) { - return bmake_strdup(name); + return (bmake_strdup(name)); } if (DEBUG(DIR)) { @@ -1409,14 +1409,14 @@ Dir_FindFile(const char *name, Lst path) /*- *----------------------------------------------------------------------- * Dir_FindHereOrAbove -- - * search for a path starting at a given directory and then working + * search for a path starting at a given directory and then working * our way up towards the root. * * Input: * here starting directory * search_path the path we are looking for * result the result of a successful search is placed here - * rlen the length of the result buffer + * rlen the length of the result buffer * (typically MAXPATHLEN + 1) * * Results: @@ -1426,7 +1426,7 @@ Dir_FindFile(const char *name, Lst path) * Side Effects: *----------------------------------------------------------------------- */ -int +int Dir_FindHereOrAbove(char *here, char *search_path, char *result, int rlen) { struct stat st; @@ -1451,7 +1451,7 @@ Dir_FindHereOrAbove(char *here, char *search_path, cha try_end = try + strlen(try); while (try_end > try && *try_end != '/') try_end--; - if (try_end > try) + if (try_end > try) *try_end = 0; /* chop! */ } @@ -1459,10 +1459,10 @@ Dir_FindHereOrAbove(char *here, char *search_path, cha * done! */ snprintf(result, rlen, "%s", try); - return 1; + return(1); } - /* + /* * nope, we didn't find it. if we used up dirbase we've * reached the root and failed. */ @@ -1479,9 +1479,9 @@ Dir_FindHereOrAbove(char *here, char *search_path, cha } /* while (1) */ /* - * we failed... + * we failed... */ - return 0; + return(0); } /*- *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-all@freebsd.org Thu Jul 9 03:50:28 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9020535EC8B; Thu, 9 Jul 2020 03:50:28 +0000 (UTC) (envelope-from sjg@juniper.net) Received: from mx0b-00273201.pphosted.com (mx0b-00273201.pphosted.com [67.231.152.164]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "*.pphosted.com", Issuer "Thawte RSA CA 2018" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2MdT4pDFz4SmD; Thu, 9 Jul 2020 03:50:18 +0000 (UTC) (envelope-from sjg@juniper.net) Received: from pps.filterd (m0108163.ppops.net [127.0.0.1]) by mx0b-00273201.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 0693h5GM026051; Wed, 8 Jul 2020 20:50:13 -0700 Received: from nam02-bl2-obe.outbound.protection.outlook.com (mail-bl2nam02lp2058.outbound.protection.outlook.com [104.47.38.58]) by mx0b-00273201.pphosted.com with ESMTP id 325k32rsjp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 08 Jul 2020 20:50:13 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jPTtf0h8qmsuAlhUx9u5joKP1LoZgUjsqgfty9CETJ3xGZgy6jvM0+jqqV1uRon+ISeOi4O6E0OhxoXz5JyuTpN09WunP7f2DXj1RFWghLJY+TNfVFZMPTYCsSnI7RjhnN9G8z+1HJA4v2CiWR3mkpcOOt4IldrtWmdfI2xtF3odPjVNKn9tr2v3svpsSmBWbbGJrPIdE67s9auWMYlWY80mMh2XzyIJEqQ8DTju6mmIjmKl2qCW3lKaGG0iGmx2VWil4tPVm1NYYHLAYc7D96LnuwKkH78iQNffjQEo5lTILtlXotza+E3dly3mDtJZWEhsF+04O/Iykpce7gVgHg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6ikgzKfLyB6/On5E3H+rZBeFSX0vqDCBj+ZeWyIXHKE=; b=PPbCdMG9QlmUt6nqki1hU7H6PADI/73w4ADxuhi5RHBYsRTGEXVlPncKZQ+ayPLGSWUNQvES0x8+EibNUEYmAV8gOJJA7K+K2hoRhLAg84o7QNmnm/XrlEaFLvl+vIb1oSUM0wtBNXB8yB97SC+svzirOW+ttOHvBXnf8R4UhpFH62uVdofyMrZnY/+cqPNDQ8v+FHTnEJ/XCjXLECPAI/Z9Wsk7dVHEfhM7pWF5ZxkUhSK1KTrf6LQHXVeJH5yO/Ky29tR/WI+TUQuSx0Sqe7wQ79bxFnUG5Yuf9GyD49GBwlJ6O3nM32JJV2iOEN4wQ78SjImzOyJ7F2vNXsGBvA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=softfail (sender ip is 66.129.239.12) smtp.rcpttodomain=freebsd.org smtp.mailfrom=juniper.net; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=juniper.net; dkim=none (message not signed); arc=none Received: from DM5PR07CA0150.namprd07.prod.outlook.com (2603:10b6:3:ee::16) by SN6PR05MB5677.namprd05.prod.outlook.com (2603:10b6:805:bb::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3174.8; Thu, 9 Jul 2020 03:50:11 +0000 Received: from DM3NAM05FT058.eop-nam05.prod.protection.outlook.com (2603:10b6:3:ee:cafe::a1) by DM5PR07CA0150.outlook.office365.com (2603:10b6:3:ee::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3174.21 via Frontend Transport; Thu, 9 Jul 2020 03:50:11 +0000 X-MS-Exchange-Authentication-Results: spf=softfail (sender IP is 66.129.239.12) smtp.mailfrom=juniper.net; FreeBSD.org; dkim=none (message not signed) header.d=none;FreeBSD.org; dmarc=fail action=oreject header.from=juniper.net; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning juniper.net discourages use of 66.129.239.12 as permitted sender) Received: from P-EXFEND-EQX-01.jnpr.net (66.129.239.12) by DM3NAM05FT058.mail.protection.outlook.com (10.152.98.174) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.3195.9 via Frontend Transport; Thu, 9 Jul 2020 03:50:10 +0000 Received: from P-EXBEND-EQX-01.jnpr.net (10.104.8.52) by P-EXFEND-EQX-01.jnpr.net (10.104.8.54) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 8 Jul 2020 20:47:13 -0700 Received: from p-mailhub01.juniper.net (10.104.20.6) by P-EXBEND-EQX-01.jnpr.net (10.104.8.52) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Wed, 8 Jul 2020 20:47:13 -0700 Received: from kaos.jnpr.net (kaos.jnpr.net [172.23.255.254]) by p-mailhub01.juniper.net (8.14.4/8.11.3) with ESMTP id 0693lCso024067; Wed, 8 Jul 2020 20:47:13 -0700 (envelope-from sjg@juniper.net) Received: by kaos.jnpr.net (Postfix, from userid 1377) id D51C56DE22; Wed, 8 Jul 2020 20:47:12 -0700 (PDT) Received: from kaos.jnpr.net (localhost [127.0.0.1]) by kaos.jnpr.net (Postfix) with ESMTP id D49026DE21; Wed, 8 Jul 2020 20:47:12 -0700 (PDT) To: Cy Schubert CC: , , , Subject: Re: svn commit: r363031 - in head: contrib/bmake contrib/bmake/lst.lib contrib/bmake/mk contrib/bmake/mk/sys contrib/bmake/unit-tests usr.bin/bmake In-Reply-To: <202007090328.0693SNo4028242@slippy.cwsent.com> References: <202007082120.068LKCeN067904@repo.freebsd.org> <202007090328.0693SNo4028242@slippy.cwsent.com> Comments: In-reply-to: Cy Schubert message dated "Wed, 08 Jul 2020 20:28:23 -0700." From: "Simon J. Gerraty" X-Mailer: MH-E 8.6+git; nmh 1.7.1; GNU Emacs 26.3 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <45244.1594266432.1@kaos.jnpr.net> Content-Transfer-Encoding: quoted-printable Date: Wed, 8 Jul 2020 20:47:12 -0700 Message-ID: <45359.1594266432@kaos.jnpr.net> X-EXCLAIMER-MD-CONFIG: e3cb0ff2-54e7-4646-8a04-0dae4ac7b136 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:66.129.239.12; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:P-EXFEND-EQX-01.jnpr.net; PTR:InfoDomainNonexistent; CAT:NONE; SFTY:; SFS:(4636009)(39860400002)(396003)(136003)(346002)(376002)(46966005)(83380400001)(4326008)(8936002)(82310400002)(356005)(81166007)(316002)(86362001)(6266002)(186003)(5660300002)(8676002)(55016002)(9686003)(2906002)(966005)(70586007)(82740400003)(70206006)(107886003)(6916009)(478600001)(54906003)(26005)(7696005)(336012)(7126003)(47076004); DIR:OUT; SFP:1102; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2711955b-423f-4fbd-c492-08d823bb2dfc X-MS-TrafficTypeDiagnostic: SN6PR05MB5677: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ir3qdeice/0LFLfWuzXG9L6ryUeocQQ+GWzGwwQU3qpmT9DeD/ma1+KHNo3cgJti9kW5R8la78IQvyldJbDoas5wk4jRlRx06p9rA5xIEo4A9k1pq8ubrQMLHe0KCrWTkX7DotGDlBljCL5tPpmwosrTOcjJ9U/JGX6pMwZpyqgNF7ORMXMCKrYuhtvWjXU3mlALEwPBU9KDMWD5toCupw8nVTvsRIpCZxsM59IJpa0pp6phiq7nluVWmKisVoIPiqyjrBCgIMOFiYG7HD1uBqV3FrnbqMWWORAqlvlkWEDtCFPyeWa3BVtMx1fH45/wvmM14Rzy/3pELGs4V3gPeb+r8m/yzGFD7TctJ+yiX2lW1fQ9MRvsZdOu72hGCqVYNih/YWuZLKosFczkEiO/NImx+0sVFam5cKCyLoq1l/aS0Cmj8hgcFbq6j43zctEm97j8mgXAvbZ1tpUq8gqm/8oxyJxynEDinFWSFqi00KU= X-OriginatorOrg: juniper.net X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2020 03:50:10.8962 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2711955b-423f-4fbd-c492-08d823bb2dfc X-MS-Exchange-CrossTenant-Id: bea78b3c-4cdb-4130-854a-1d193232e5f4 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=bea78b3c-4cdb-4130-854a-1d193232e5f4; Ip=[66.129.239.12]; Helo=[P-EXFEND-EQX-01.jnpr.net] X-MS-Exchange-CrossTenant-AuthSource: DM3NAM05FT058.eop-nam05.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR05MB5677 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.235, 18.0.687 definitions=2020-07-08_19:2020-07-08, 2020-07-08 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_spam_notspam policy=outbound_spam score=0 lowpriorityscore=0 mlxlogscore=670 impostorscore=0 bulkscore=0 adultscore=0 priorityscore=1501 phishscore=0 suspectscore=0 malwarescore=0 spamscore=0 mlxscore=0 clxscore=1011 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2006250000 definitions=main-2007090027 X-Rspamd-Queue-Id: 4B2MdT4pDFz4SmD X-Spamd-Bar: ----- X-Spamd-Result: default: False [-5.67 / 15.00]; NEURAL_HAM_MEDIUM(-0.98)[-0.983]; R_DKIM_ALLOW(-0.20)[juniper.net:s=PPS1017,juniper.net:s=selector1]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+ip4:67.231.152.164]; NEURAL_HAM_LONG(-0.98)[-0.979]; MIME_GOOD(-0.10)[text/plain]; ARC_ALLOW(-1.00)[microsoft.com:s=arcselector9901:i=1]; RCPT_COUNT_FIVE(0.00)[5]; TO_MATCH_ENVRCPT_SOME(0.00)[]; DKIM_TRACE(0.00)[juniper.net:+]; DMARC_POLICY_ALLOW(-0.50)[juniper.net,reject]; NEURAL_HAM_SHORT(-1.61)[-1.606]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_LAST(0.00)[]; ASN(0.00)[asn:22843, ipnet:67.231.152.0/24, country:US]; RCVD_COUNT_SEVEN(0.00)[10]; RCVD_IN_DNSWL_LOW(-0.10)[67.231.152.164:from] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 03:50:28 -0000 Cy Schubert wrote: > This broke ports. I've reverted the change. Let me know if you still see issue. > = > cwsys# make checksum > make: "/usr/ports/Mk/Uses/python.mk" line 367: warning: String compariso= n > operator should be either =3D=3D or !=3D > make: "/usr/ports/Mk/Uses/python.mk" line 367: Malformed conditional > (!defined(_PYTHON_VERSION) && !(!empty(_PYTHON_VERSION_MINIMUM) && ( > ${__VER} < ${_PYTHON_VERSION_MINIMUM})) && !(!empty(_PYTHON_VERSION_MAX= IMUM > ) && ( ${__VER} > ${_PYTHON_VERSION_MAXIMUM}))) > make: "/usr/ports/Mk/Uses/python.mk" line 367: warning: String compariso= n > operator should be either =3D=3D or !=3D > make: "/usr/ports/Mk/Uses/python.mk" line 367: Malformed conditional > (!defined(_PYTHON_VERSION) && !(!empty(_PYTHON_VERSION_MINIMUM) && ( > ${__VER} < ${_PYTHON_VERSION_MINIMUM})) && !(!empty(_PYTHON_VERSION_MAX= IMUM > ) && ( ${__VER} > ${_PYTHON_VERSION_MAXIMUM}))) > make: "/usr/ports/Mk/Uses/python.mk" line 367: warning: String compariso= n > operator should be either =3D=3D or !=3D > make: "/usr/ports/Mk/Uses/python.mk" line 367: Malformed conditional > (!defined(_PYTHON_VERSION) && !(!empty(_PYTHON_VERSION_MINIMUM) && ( > ${__VER} < ${_PYTHON_VERSION_MINIMUM})) && !(!empty(_PYTHON_VERSION_MAX= IMUM > ) && ( ${__VER} > ${_PYTHON_VERSION_MAXIMUM}))) > make: "/usr/ports/Mk/Uses/python.mk" line 367: warning: String compariso= n > operator should be either =3D=3D or !=3D > make: "/usr/ports/Mk/Uses/python.mk" line 367: Malformed conditional > (!defined(_PYTHON_VERSION) && !(!empty(_PYTHON_VERSION_MINIMUM) && ( > ${__VER} < ${_PYTHON_VERSION_MINIMUM})) && !(!empty(_PYTHON_VERSION_MAX= IMUM > ) && ( ${__VER} > ${_PYTHON_VERSION_MAXIMUM}))) > make: "/usr/ports/Mk/Uses/python.mk" line 367: warning: String compariso= n > operator should be either =3D=3D or !=3D > make: "/usr/ports/Mk/Uses/python.mk" line 367: Malformed conditional > (!defined(_PYTHON_VERSION) && !(!empty(_PYTHON_VERSION_MINIMUM) && ( > ${__VER} < ${_PYTHON_VERSION_MINIMUM})) && !(!empty(_PYTHON_VERSION_MAX= IMUM > ) && ( ${__VER} > ${_PYTHON_VERSION_MAXIMUM}))) > make: "/usr/ports/Mk/Uses/python.mk" line 367: warning: String compariso= n > operator should be either =3D=3D or !=3D > make: "/usr/ports/Mk/Uses/python.mk" line 367: Malformed conditional > (!defined(_PYTHON_VERSION) && !(!empty(_PYTHON_VERSION_MINIMUM) && ( > ${__VER} < ${_PYTHON_VERSION_MINIMUM})) && !(!empty(_PYTHON_VERSION_MAX= IMUM > ) && ( ${__VER} > ${_PYTHON_VERSION_MAXIMUM}))) > make: "/usr/ports/Mk/bsd.port.mk" line 2096: warning: String comparison > operator should be either =3D=3D or !=3D > make: "/usr/ports/Mk/bsd.port.mk" line 2096: Malformed conditional > (defined(MAKE_JOBS_NUMBER_LIMIT) && ( ${MAKE_JOBS_NUMBER_LIMIT} < > ${_MAKE_JOBS_NUMBER} )) > make: Fatal errors encountered -- cannot continue > make: stopped in /usr/ports/www/firefox > cwsys# > = > The same errors occur during buildworld. > = > Simply reverting just contrib/bmake/cond.c resolves this issue. The caus= e of > this issue is NetBSD cond.c r1.76, therefore it is safe to revert just t= he > one file without reverting the complete upgrade. > = > https://urldefense.com/v3/__http://cvsweb.netbsd.org/bsdweb.cgi/src/usr.= bin/make/cond.c?rev=3D1.76&content-type=3Dtext*x-cvsweb-markup&only_with_t= ag=3DMAIN__;Lw!!NEt6yMaO-gk!VltPNuPO6XKkx3hxHjCA98ZeFCqyVtHYuLQi8D1AE6HcNI= FdwIRm80hIxRvmDA$ > = > = > -- > Cheers, > Cy Schubert > FreeBSD UNIX: Web: https://urldefense.com/v3/__http= s://FreeBSD.org__;!!NEt6yMaO-gk!VltPNuPO6XKkx3hxHjCA98ZeFCqyVtHYuLQi8D1AE6= HcNIFdwIRm80gLfK9-dg$ > NTP: Web: https://urldefense.com/v3/__http= s://nwtime.org__;!!NEt6yMaO-gk!VltPNuPO6XKkx3hxHjCA98ZeFCqyVtHYuLQi8D1AE6H= cNIFdwIRm80gVslaffA$ > = > The need of the many outweighs the greed of the few. From owner-svn-src-all@freebsd.org Thu Jul 9 04:02:58 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 00F1135F32E; Thu, 9 Jul 2020 04:02:58 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from smtp-out-no.shaw.ca (smtp-out-no.shaw.ca [64.59.134.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2Mw04jHtz4TCW; Thu, 9 Jul 2020 04:02:56 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from spqr.komquats.com ([70.67.125.17]) by shaw.ca with ESMTPA id tNlsjaULE62brtNltjrTDC; Wed, 08 Jul 2020 22:02:54 -0600 X-Authority-Analysis: v=2.3 cv=LKf9vKe9 c=1 sm=1 tr=0 a=VFtTW3WuZNDh6VkGe7fA3g==:117 a=VFtTW3WuZNDh6VkGe7fA3g==:17 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=_RQrkK6FrEwA:10 a=ymjG5ZiqAAAA:8 a=YxBL1-UpAAAA:8 a=6I5d2MoRAAAA:8 a=EkcXrb_YAAAA:8 a=oHSs8KqiQKmy-OUkTyQA:9 a=CjuIK1q_8ugA:10 a=UJ0tAi3fqDAA:10 a=9NY4Jsdw3mG8vwb630s1:22 a=Ia-lj3WSrqcvXOmTRaiG:22 a=IjZwj45LgO3ly-622nXo:22 a=LK5xJRSDVpKd5WXXoEvA:22 Received: from slippy.cwsent.com (slippy [IPv6:fc00:1:1:1::5b]) by spqr.komquats.com (Postfix) with ESMTPS id C0E27260; Wed, 8 Jul 2020 21:02:50 -0700 (PDT) Received: from slippy.cwsent.com (localhost [127.0.0.1]) by slippy.cwsent.com (8.15.2/8.15.2) with ESMTP id 06942njm017054; Wed, 8 Jul 2020 21:02:49 -0700 (PDT) (envelope-from Cy.Schubert@cschubert.com) Received: from slippy (cy@localhost) by slippy.cwsent.com (8.15.2/8.15.2/Submit) with ESMTP id 06942mVr015813; Wed, 8 Jul 2020 21:02:49 -0700 (PDT) (envelope-from Cy.Schubert@cschubert.com) Message-Id: <202007090402.06942mVr015813@slippy.cwsent.com> X-Authentication-Warning: slippy.cwsent.com: cy owned process doing -bs X-Mailer: exmh version 2.9.0 11/07/2018 with nmh-1.7.1 Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: "Simon J. Gerraty" cc: Cy Schubert , src-committers@FreeBSD.org, svn-src-all@FreeBSD.org, svn-src-head@FreeBSD.org Subject: Re: svn commit: r363031 - in head: contrib/bmake contrib/bmake/lst.lib contrib/bmake/mk contrib/bmake/mk/sys contrib/bmake/unit-tests usr.bin/bmake In-reply-to: <45359.1594266432@kaos.jnpr.net> References: <202007082120.068LKCeN067904@repo.freebsd.org> <202007090328.0693SNo4028242@slippy.cwsent.com> <45359.1594266432@kaos.jnpr.net> Comments: In-reply-to "Simon J. Gerraty" message dated "Wed, 08 Jul 2020 20:47:12 -0700." Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Wed, 08 Jul 2020 21:02:45 -0700 X-CMAE-Envelope: MS4wfERkGL4G5lPID3qbe1504H16XhZWe1ZI0O58Su/Gx1DEUriz15QSaankAmsV6Np9OtHAvXD6l67MnxScS8KszTMZ6uLVYNDyDKUyonDROEZYBh0UNYie D4mH1Q01aOO+vcEwDHgmj/wtCp5Bydvdp2n6WWdppPXR00Xq3GrO+6Qhe+xTJ5M8H5VvPNvvSjZDrzmv8Cf2Mbd44QFRiXnUc9F/pLSjZXv+OULLOe+m5ubY yI3Ee+HOC8gTeRUVi8Smq3UIg+vA3R0PbNv4MJcHOdybhRdLtyMMQmqtQd8IOG3l X-Rspamd-Queue-Id: 4B2Mw04jHtz4TCW X-Spamd-Bar: - Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=none (mx1.freebsd.org: domain of cy.schubert@cschubert.com has no SPF policy when checking 64.59.134.9) smtp.mailfrom=cy.schubert@cschubert.com X-Spamd-Result: default: False [-1.33 / 15.00]; HAS_REPLYTO(0.00)[Cy.Schubert@cschubert.com]; RCVD_VIA_SMTP_AUTH(0.00)[]; TO_DN_SOME(0.00)[]; MV_CASE(0.50)[]; RWL_MAILSPIKE_GOOD(0.00)[64.59.134.9:from]; HAS_XAW(0.00)[]; RCPT_COUNT_FIVE(0.00)[5]; NEURAL_HAM_SHORT(-0.74)[-0.736]; RECEIVED_SPAMHAUS_PBL(0.00)[70.67.125.17:received]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; ASN(0.00)[asn:6327, ipnet:64.59.128.0/20, country:CA]; MIME_TRACE(0.00)[0:+]; RCVD_IN_DNSWL_LOW(-0.10)[64.59.134.9:from]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-0.95)[-0.953]; RCVD_COUNT_FIVE(0.00)[5]; REPLYTO_EQ_FROM(0.00)[]; FROM_HAS_DN(0.00)[]; NEURAL_HAM_LONG(-0.95)[-0.946]; MIME_GOOD(-0.10)[text/plain]; RCVD_TLS_LAST(0.00)[]; AUTH_NA(1.00)[]; DMARC_NA(0.00)[cschubert.com: no valid DMARC record]; TO_MATCH_ENVRCPT_SOME(0.00)[]; R_SPF_NA(0.00)[no SPF record] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 04:02:58 -0000 In message <45359.1594266432@kaos.jnpr.net>, "Simon J. Gerraty" writes: > Cy Schubert wrote: > > This broke ports. > > I've reverted the change. > > Let me know if you still see issue. As I said in my email, all I did was revert cond.c, and that fixed it. You don't need to revert the whole patch. Just revert cond.c and let NetBSD know. -- Cheers, Cy Schubert FreeBSD UNIX: Web: https://FreeBSD.org NTP: Web: https://nwtime.org The need of the many outweighs the greed of the few. From owner-svn-src-all@freebsd.org Thu Jul 9 08:00:47 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2FA67363AD1; Thu, 9 Jul 2020 08:00:47 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2TBR0SWbz4fjM; Thu, 9 Jul 2020 08:00:47 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E78AFDE4D; Thu, 9 Jul 2020 08:00:46 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06980kv3062062; Thu, 9 Jul 2020 08:00:46 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06980k1K062061; Thu, 9 Jul 2020 08:00:46 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <202007090800.06980k1K062061@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Thu, 9 Jul 2020 08:00:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363036 - head/sys/geom/concat X-SVN-Group: head X-SVN-Commit-Author: delphij X-SVN-Commit-Paths: head/sys/geom/concat X-SVN-Commit-Revision: 363036 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 08:00:47 -0000 Author: delphij Date: Thu Jul 9 08:00:46 2020 New Revision: 363036 URL: https://svnweb.freebsd.org/changeset/base/363036 Log: g_concat_find_device: trim /dev/ if it is present, like other GEOM classes. Reviewed by: cem MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D25596 Modified: head/sys/geom/concat/g_concat.c Modified: head/sys/geom/concat/g_concat.c ============================================================================== --- head/sys/geom/concat/g_concat.c Thu Jul 9 03:46:07 2020 (r363035) +++ head/sys/geom/concat/g_concat.c Thu Jul 9 08:00:46 2020 (r363036) @@ -897,6 +897,9 @@ g_concat_find_device(struct g_class *mp, const char *n struct g_concat_softc *sc; struct g_geom *gp; + if (strncmp(name, _PATH_DEV, strlen(_PATH_DEV)) == 0) + name += strlen(_PATH_DEV); + LIST_FOREACH(gp, &mp->geom, geom) { sc = gp->softc; if (sc == NULL) From owner-svn-src-all@freebsd.org Thu Jul 9 09:33:35 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id A946A365787; Thu, 9 Jul 2020 09:33:35 +0000 (UTC) (envelope-from freqlabs@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2WFV6wlyz3Vgw; Thu, 9 Jul 2020 09:33:34 +0000 (UTC) (envelope-from freqlabs@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 173F1EEF0; Thu, 9 Jul 2020 09:33:34 +0000 (UTC) (envelope-from freqlabs@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0699XXOK021051; Thu, 9 Jul 2020 09:33:33 GMT (envelope-from freqlabs@FreeBSD.org) Received: (from freqlabs@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0699XXJt021046; Thu, 9 Jul 2020 09:33:33 GMT (envelope-from freqlabs@FreeBSD.org) Message-Id: <202007090933.0699XXJt021046@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: freqlabs set sender to freqlabs@FreeBSD.org using -f From: Ryan Moeller Date: Thu, 9 Jul 2020 09:33:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363037 - in stable/12: lib/libifconfig sbin/ifconfig sys/net X-SVN-Group: stable-12 X-SVN-Commit-Author: freqlabs X-SVN-Commit-Paths: in stable/12: lib/libifconfig sbin/ifconfig sys/net X-SVN-Commit-Revision: 363037 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 09:33:36 -0000 Author: freqlabs Date: Thu Jul 9 09:33:32 2020 New Revision: 363037 URL: https://svnweb.freebsd.org/changeset/base/363037 Log: MFC r362824: libifconfig: Add function to get bridge status The new function operates similarly to ifconfig_lagg_get_lagg_status and likewise is accompanied by a function to free the bridge status data structure. I have included in this patch the relocation of some strings describing STP parameters and the PV2ID macro from ifconfig into net/if_bridgevar.h as they are useful for consumers of libifconfig. Reviewed by: kp, melifaro, mmacy Relnotes: yes Differential Revision: https://reviews.freebsd.org/D25460 Added: stable/12/lib/libifconfig/libifconfig_bridge.c - copied unchanged from r362824, head/lib/libifconfig/libifconfig_bridge.c Modified: stable/12/lib/libifconfig/Makefile stable/12/lib/libifconfig/libifconfig.h stable/12/sbin/ifconfig/ifbridge.c stable/12/sys/net/if_bridgevar.h Directory Properties: stable/12/ (props changed) Modified: stable/12/lib/libifconfig/Makefile ============================================================================== --- stable/12/lib/libifconfig/Makefile Thu Jul 9 08:00:46 2020 (r363036) +++ stable/12/lib/libifconfig/Makefile Thu Jul 9 09:33:32 2020 (r363037) @@ -8,9 +8,14 @@ NO_PIC= SHLIBDIR?= /lib SHLIB_MAJOR= 1 -SRCS= libifconfig.c libifconfig_carp.c libifconfig_inet.c -SRCS+= libifconfig_inet6.c libifconfig_internal.c libifconfig_lagg.c -SRCS+= libifconfig_media.c +SRCS= libifconfig.c \ + libifconfig_bridge.c \ + libifconfig_carp.c \ + libifconfig_inet.c \ + libifconfig_inet6.c \ + libifconfig_internal.c \ + libifconfig_lagg.c \ + libifconfig_media.c INCSDIR= ${INCLUDEDIR} INCS= libifconfig.h Modified: stable/12/lib/libifconfig/libifconfig.h ============================================================================== --- stable/12/lib/libifconfig/libifconfig.h Thu Jul 9 08:00:46 2020 (r363036) +++ stable/12/lib/libifconfig/libifconfig.h Thu Jul 9 09:33:32 2020 (r363037) @@ -49,12 +49,23 @@ typedef struct ifconfig_handle ifconfig_handle_t; struct carpreq; struct ifaddrs; +struct ifbropreq; +struct ifbreq; struct in6_ndireq; struct lagg_reqall; struct lagg_reqflags; struct lagg_reqopts; struct lagg_reqport; +/** Stores extra info associated with a bridge(4) interface */ +struct ifconfig_bridge_status { + struct ifbropreq *params; /**< current operational parameters */ + struct ifbreq *members; /**< list of bridge members */ + size_t members_count; /**< how many member interfaces */ + uint32_t cache_size; /**< size of address cache */ + uint32_t cache_lifetime; /**< address cache entry lifetime */ +}; + struct ifconfig_capabilities { /** Current capabilities (ifconfig prints this as 'options')*/ int curcap; @@ -217,6 +228,16 @@ int ifconfig_inet_get_addrinfo(ifconfig_handle_t *h, int ifconfig_inet6_get_addrinfo(ifconfig_handle_t *h, const char *name, struct ifaddrs *ifa, struct ifconfig_inet6_addr *addr); +/** Retrieve additional information about a bridge(4) interface */ +int ifconfig_bridge_get_bridge_status(ifconfig_handle_t *h, + const char *name, struct ifconfig_bridge_status **bridge); + +/** Frees the structure returned by ifconfig_bridge_get_bridge_status. Does + * nothing if the argument is NULL + * @param bridge Pointer to the structure to free + */ +void ifconfig_bridge_free_bridge_status(struct ifconfig_bridge_status *bridge); + /** Retrieve additional information about a lagg(4) interface */ int ifconfig_lagg_get_lagg_status(ifconfig_handle_t *h, const char *name, struct ifconfig_lagg_status **lagg_status); @@ -225,8 +246,8 @@ int ifconfig_lagg_get_lagg_status(ifconfig_handle_t *h int ifconfig_lagg_get_laggport_status(ifconfig_handle_t *h, const char *name, struct lagg_reqport *rp); -/** Frees the structure returned by ifconfig_lagg_get_status. Does nothing if - * the argument is NULL +/** Frees the structure returned by ifconfig_lagg_get_lagg_status. Does + * nothing if the argument is NULL * @param laggstat Pointer to the structure to free */ void ifconfig_lagg_free_lagg_status(struct ifconfig_lagg_status *laggstat); Copied: stable/12/lib/libifconfig/libifconfig_bridge.c (from r362824, head/lib/libifconfig/libifconfig_bridge.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/12/lib/libifconfig/libifconfig_bridge.c Thu Jul 9 09:33:32 2020 (r363037, copy of r362824, head/lib/libifconfig/libifconfig_bridge.c) @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2020, Ryan Moeller + * + * 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 REGENTS 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 REGENTS 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. + * + * $FreeBSD$ + */ +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "libifconfig.h" +#include "libifconfig_internal.h" + +/* Internal structure used for allocations and frees */ +struct _ifconfig_bridge_status { + struct ifconfig_bridge_status inner; /* wrapped bridge status */ + struct ifbropreq params; /* operational parameters */ +}; + +static int +ifconfig_bridge_ioctlwrap(ifconfig_handle_t *h, const char *name, + unsigned long cmd, void *arg, size_t arglen, bool set) +{ + struct ifdrv ifd = { 0 }; + unsigned long req = set ? SIOCSDRVSPEC : SIOCGDRVSPEC; + + strlcpy(ifd.ifd_name, name, sizeof(ifd.ifd_name)); + ifd.ifd_cmd = cmd; + ifd.ifd_data = arg; + ifd.ifd_len = arglen; + + return (ifconfig_ioctlwrap(h, AF_LOCAL, req, &ifd)); +} + +int +ifconfig_bridge_get_bridge_status(ifconfig_handle_t *h, + const char *name, struct ifconfig_bridge_status **bridgep) +{ + struct ifbifconf members; + struct ifbrparam cache_param; + struct _ifconfig_bridge_status *bridge; + char *buf; + + *bridgep = NULL; + + bridge = calloc(1, sizeof(struct _ifconfig_bridge_status)); + if (bridge == NULL) { + h->error.errtype = OTHER; + h->error.errcode = ENOMEM; + return (-1); + } + bridge->inner.params = &bridge->params; + + if (ifconfig_bridge_ioctlwrap(h, name, BRDGGCACHE, + &cache_param, sizeof(cache_param), false) != 0) { + free(bridge); + return (-1); + } + bridge->inner.cache_size = cache_param.ifbrp_csize; + + if (ifconfig_bridge_ioctlwrap(h, name, BRDGGTO, + &cache_param, sizeof(cache_param), false) != 0) { + free(bridge); + return (-1); + } + bridge->inner.cache_lifetime = cache_param.ifbrp_ctime; + + if (ifconfig_bridge_ioctlwrap(h, name, BRDGPARAM, + &bridge->params, sizeof(bridge->params), false) != 0) { + free(bridge); + return (-1); + } + + members.ifbic_buf = NULL; + for (size_t len = 8192; + (buf = realloc(members.ifbic_buf, len)) != NULL; + len *= 2) { + members.ifbic_buf = buf; + members.ifbic_len = len; + if (ifconfig_bridge_ioctlwrap(h, name, BRDGGIFS, + &members, sizeof(members), false) != 0) { + free(buf); + free(bridge); + return (-1); + } + if (members.ifbic_len <= len) + break; + } + if (buf == NULL) { + free(members.ifbic_buf); + free(bridge); + h->error.errtype = OTHER; + h->error.errcode = ENOMEM; + return (-1); + } + bridge->inner.members = members.ifbic_req; + bridge->inner.members_count = + members.ifbic_len / sizeof(*members.ifbic_req); + + *bridgep = &bridge->inner; + + return (0); +} + +void +ifconfig_bridge_free_bridge_status(struct ifconfig_bridge_status *bridge) +{ + if (bridge != NULL) { + free(bridge->members); + free(bridge); + } +} Modified: stable/12/sbin/ifconfig/ifbridge.c ============================================================================== --- stable/12/sbin/ifconfig/ifbridge.c Thu Jul 9 08:00:46 2020 (r363036) +++ stable/12/sbin/ifconfig/ifbridge.c Thu Jul 9 09:33:32 2020 (r363037) @@ -63,36 +63,9 @@ static const char rcsid[] = #include "ifconfig.h" -#define PV2ID(pv, epri, eaddr) do { \ - epri = pv >> 48; \ - eaddr[0] = pv >> 40; \ - eaddr[1] = pv >> 32; \ - eaddr[2] = pv >> 24; \ - eaddr[3] = pv >> 16; \ - eaddr[4] = pv >> 8; \ - eaddr[5] = pv >> 0; \ -} while (0) - -static const char *stpstates[] = { - "disabled", - "listening", - "learning", - "forwarding", - "blocking", - "discarding" -}; -static const char *stpproto[] = { - "stp", - "-", - "rstp" -}; -static const char *stproles[] = { - "disabled", - "root", - "designated", - "alternate", - "backup" -}; +static const char *stpstates[] = { STP_STATES }; +static const char *stpproto[] = { STP_PROTOS }; +static const char *stproles[] = { STP_ROLES }; static int get_val(const char *cp, u_long *valp) Modified: stable/12/sys/net/if_bridgevar.h ============================================================================== --- stable/12/sys/net/if_bridgevar.h Thu Jul 9 08:00:46 2020 (r363036) +++ stable/12/sys/net/if_bridgevar.h Thu Jul 9 09:33:32 2020 (r363037) @@ -269,6 +269,36 @@ struct ifbpstpconf { #define ifbpstp_req ifbpstp_ifbpstpu.ifbpstpu_req }; +#define STP_STATES \ + "disabled", \ + "listening", \ + "learning", \ + "forwarding", \ + "blocking", \ + "discarding" + +#define STP_PROTOS \ + "stp" \ + "-" \ + "rstp" + +#define STP_ROLES \ + "disabled" \ + "root" \ + "designated" \ + "alternate" \ + "backup" + +#define PV2ID(pv, epri, eaddr) do { \ + epri = pv >> 48; \ + eaddr[0] = pv >> 40; \ + eaddr[1] = pv >> 32; \ + eaddr[2] = pv >> 24; \ + eaddr[3] = pv >> 16; \ + eaddr[4] = pv >> 8; \ + eaddr[5] = pv >> 0; \ +} while (0) + #ifdef _KERNEL #define BRIDGE_INPUT(_ifp, _m) do { \ From owner-svn-src-all@freebsd.org Thu Jul 9 10:14:04 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 29163366148; Thu, 9 Jul 2020 10:14:04 +0000 (UTC) (envelope-from hps@selasky.org) Received: from mail.turbocat.net (turbocat.net [IPv6:2a01:4f8:c17:6c4b::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2X8C3NvYz3Y8s; Thu, 9 Jul 2020 10:14:03 +0000 (UTC) (envelope-from hps@selasky.org) Received: from hps2020.home.selasky.org (unknown [178.17.145.105]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mail.turbocat.net (Postfix) with ESMTPSA id 20C44260A0D; Thu, 9 Jul 2020 12:13:55 +0200 (CEST) Subject: Re: svn commit: r362962 - head/sys/net To: Mark Johnston , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org References: <202007061452.066EqAap025536@repo.freebsd.org> From: Hans Petter Selasky Message-ID: <92dc039d-72a0-4b9d-d907-d7e310d09bc9@selasky.org> Date: Thu, 9 Jul 2020 12:13:33 +0200 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <202007061452.066EqAap025536@repo.freebsd.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 4B2X8C3NvYz3Y8s X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=pass (mx1.freebsd.org: domain of hps@selasky.org designates 2a01:4f8:c17:6c4b::2 as permitted sender) smtp.mailfrom=hps@selasky.org X-Spamd-Result: default: False [-2.18 / 15.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; ARC_NA(0.00)[]; MID_RHS_MATCH_FROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; TO_DN_SOME(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; R_SPF_ALLOW(-0.20)[+a:mail.turbocat.net]; DMARC_NA(0.00)[selasky.org]; NEURAL_SPAM_SHORT(0.08)[0.085]; NEURAL_HAM_LONG(-1.03)[-1.026]; NEURAL_HAM_MEDIUM(-0.94)[-0.943]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:24940, ipnet:2a01:4f8::/29, country:DE]; RCVD_COUNT_TWO(0.00)[2]; RCVD_TLS_ALL(0.00)[] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 10:14:04 -0000 On 2020-07-06 16:52, Mark Johnston wrote: > Author: markj > Date: Mon Jul 6 14:52:09 2020 > New Revision: 362962 > URL: https://svnweb.freebsd.org/changeset/base/362962 > > Log: > iflib: Fix handling of mbuf cluster allocation failures. > > When refilling an rx freelist, make sure we only update the hardware > producer index if at least one cluster was allocated. Otherwise the > NIC is programmed to write a previously used cluster, typically > resulting in a use-after-free when packet data is written by the > hardware. > > Also make sure that we don't update the fragment index cursor if the > last allocation attempt didn't succeed. For at least Intel drivers, > iflib assumes that the consumer index and fragment index cursor stay in > lockstep, but this assumption was violated in the face of cluster > allocation failures. > Hi Mark, Thanks for working on this. I can confirm the issue Mellanox has seen in this area is solved by your patch. --HPS From owner-svn-src-all@freebsd.org Thu Jul 9 10:50:07 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 11044366B1D; Thu, 9 Jul 2020 10:50:07 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2Xxp6kx9z3bBF; Thu, 9 Jul 2020 10:50:06 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C7A7EFA67; Thu, 9 Jul 2020 10:50:06 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069Ao6q7064729; Thu, 9 Jul 2020 10:50:06 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069Ao6sd064728; Thu, 9 Jul 2020 10:50:06 GMT (envelope-from kib@FreeBSD.org) Message-Id: <202007091050.069Ao6sd064728@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Thu, 9 Jul 2020 10:50:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363038 - stable/12/sys/kern X-SVN-Group: stable-12 X-SVN-Commit-Author: kib X-SVN-Commit-Paths: stable/12/sys/kern X-SVN-Commit-Revision: 363038 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 10:50:07 -0000 Author: kib Date: Thu Jul 9 10:50:06 2020 New Revision: 363038 URL: https://svnweb.freebsd.org/changeset/base/363038 Log: MFC r362885: Use tdfind() in pget(). Modified: stable/12/sys/kern/kern_proc.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/kern/kern_proc.c ============================================================================== --- stable/12/sys/kern/kern_proc.c Thu Jul 9 09:33:32 2020 (r363037) +++ stable/12/sys/kern/kern_proc.c Thu Jul 9 10:50:06 2020 (r363038) @@ -370,29 +370,6 @@ pfind_any(pid_t pid) return (p); } -static struct proc * -pfind_tid_locked(pid_t tid) -{ - struct proc *p; - struct thread *td; - - sx_assert(&allproc_lock, SX_LOCKED); - FOREACH_PROC_IN_SYSTEM(p) { - PROC_LOCK(p); - if (p->p_state == PRS_NEW) { - PROC_UNLOCK(p); - continue; - } - FOREACH_THREAD_IN_PROC(p, td) { - if (td->td_tid == tid) - goto found; - } - PROC_UNLOCK(p); - } -found: - return (p); -} - /* * Locate a process group by number. * The caller must hold proctree_lock. @@ -420,23 +397,24 @@ int pget(pid_t pid, int flags, struct proc **pp) { struct proc *p; + struct thread *td1; int error; p = curproc; if (p->p_pid == pid) { PROC_LOCK(p); } else { - sx_slock(&allproc_lock); if (pid <= PID_MAX) { + sx_slock(&allproc_lock); p = pfind_locked(pid); if (p == NULL && (flags & PGET_NOTWEXIT) == 0) p = zpfind_locked(pid); + sx_sunlock(&allproc_lock); } else if ((flags & PGET_NOTID) == 0) { - p = pfind_tid_locked(pid); - } else { - p = NULL; + td1 = tdfind(pid, -1); + if (td1 != NULL) + p = td1->td_proc; } - sx_sunlock(&allproc_lock); if (p == NULL) return (ESRCH); if ((flags & PGET_CANSEE) != 0) { From owner-svn-src-all@freebsd.org Thu Jul 9 10:52:02 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C2310366B9F; Thu, 9 Jul 2020 10:52:02 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2Y024kgvz3bTt; Thu, 9 Jul 2020 10:52:02 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6D127FCD9; Thu, 9 Jul 2020 10:52:02 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069Aq26q069339; Thu, 9 Jul 2020 10:52:02 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069Aq2m8069338; Thu, 9 Jul 2020 10:52:02 GMT (envelope-from kib@FreeBSD.org) Message-Id: <202007091052.069Aq2m8069338@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Thu, 9 Jul 2020 10:52:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363039 - stable/12/sys/compat/linuxkpi/common/src X-SVN-Group: stable-12 X-SVN-Commit-Author: kib X-SVN-Commit-Paths: stable/12/sys/compat/linuxkpi/common/src X-SVN-Commit-Revision: 363039 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 10:52:02 -0000 Author: kib Date: Thu Jul 9 10:52:02 2020 New Revision: 363039 URL: https://svnweb.freebsd.org/changeset/base/363039 Log: MFC r362886: linuxkpi: improvements for linux_pid_task() and linux_get_pid_task(). Modified: stable/12/sys/compat/linuxkpi/common/src/linux_current.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/compat/linuxkpi/common/src/linux_current.c ============================================================================== --- stable/12/sys/compat/linuxkpi/common/src/linux_current.c Thu Jul 9 10:50:06 2020 (r363038) +++ stable/12/sys/compat/linuxkpi/common/src/linux_current.c Thu Jul 9 10:52:02 2020 (r363039) @@ -155,65 +155,52 @@ linuxkpi_thread_dtor(void *arg __unused, struct thread put_task_struct(ts); } -struct task_struct * -linux_pid_task(pid_t pid) +static struct task_struct * +linux_get_pid_task_int(pid_t pid, const bool do_get) { struct thread *td; struct proc *p; + struct task_struct *ts; - /* try to find corresponding thread */ - td = tdfind(pid, -1); - if (td != NULL) { - struct task_struct *ts = td->td_lkpi_task; - PROC_UNLOCK(td->td_proc); - return (ts); - } - - /* try to find corresponding procedure */ - p = pfind(pid); - if (p != NULL) { - FOREACH_THREAD_IN_PROC(p, td) { - struct task_struct *ts = td->td_lkpi_task; - if (ts != NULL) { - PROC_UNLOCK(p); - return (ts); + if (pid > PID_MAX) { + /* try to find corresponding thread */ + td = tdfind(pid, -1); + if (td != NULL) { + ts = td->td_lkpi_task; + if (do_get && ts != NULL) + get_task_struct(ts); + PROC_UNLOCK(td->td_proc); + return (ts); + } + } else { + /* try to find corresponding procedure */ + p = pfind(pid); + if (p != NULL) { + FOREACH_THREAD_IN_PROC(p, td) { + ts = td->td_lkpi_task; + if (ts != NULL) { + if (do_get) + get_task_struct(ts); + PROC_UNLOCK(p); + return (ts); + } } + PROC_UNLOCK(p); } - PROC_UNLOCK(p); } return (NULL); } struct task_struct * -linux_get_pid_task(pid_t pid) +linux_pid_task(pid_t pid) { - struct thread *td; - struct proc *p; + return (linux_get_pid_task_int(pid, false)); +} - /* try to find corresponding thread */ - td = tdfind(pid, -1); - if (td != NULL) { - struct task_struct *ts = td->td_lkpi_task; - if (ts != NULL) - get_task_struct(ts); - PROC_UNLOCK(td->td_proc); - return (ts); - } - - /* try to find corresponding procedure */ - p = pfind(pid); - if (p != NULL) { - FOREACH_THREAD_IN_PROC(p, td) { - struct task_struct *ts = td->td_lkpi_task; - if (ts != NULL) { - get_task_struct(ts); - PROC_UNLOCK(p); - return (ts); - } - } - PROC_UNLOCK(p); - } - return (NULL); +struct task_struct * +linux_get_pid_task(pid_t pid) +{ + return (linux_get_pid_task_int(pid, true)); } bool From owner-svn-src-all@freebsd.org Thu Jul 9 10:54:00 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id A94D4366E0F; Thu, 9 Jul 2020 10:54:00 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2Y2J41pLz3bkJ; Thu, 9 Jul 2020 10:54:00 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6E2AF10192; Thu, 9 Jul 2020 10:54:00 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069As0ii070561; Thu, 9 Jul 2020 10:54:00 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069As06c070560; Thu, 9 Jul 2020 10:54:00 GMT (envelope-from kib@FreeBSD.org) Message-Id: <202007091054.069As06c070560@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Thu, 9 Jul 2020 10:54:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363040 - stable/12/sys/dev/mlx5/mlx5_core X-SVN-Group: stable-12 X-SVN-Commit-Author: kib X-SVN-Commit-Paths: stable/12/sys/dev/mlx5/mlx5_core X-SVN-Commit-Revision: 363040 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 10:54:00 -0000 Author: kib Date: Thu Jul 9 10:54:00 2020 New Revision: 363040 URL: https://svnweb.freebsd.org/changeset/base/363040 Log: MFC r362887: mlx5_core: remove unneccessary LFENCE instruction. Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c ============================================================================== --- stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c Thu Jul 9 10:52:02 2020 (r363039) +++ stable/12/sys/dev/mlx5/mlx5_core/mlx5_eq.c Thu Jul 9 10:54:00 2020 (r363040) @@ -240,7 +240,7 @@ static int mlx5_eq_int(struct mlx5_core_dev *dev, stru * Make sure we read EQ entry contents after we've * checked the ownership bit. */ - rmb(); + atomic_thread_fence_acq(); mlx5_core_dbg(eq->dev, "eqn %d, eqe type %s\n", eq->eqn, eqe_type_str(eqe->type)); From owner-svn-src-all@freebsd.org Thu Jul 9 11:06:30 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3F5BE366DFA; Thu, 9 Jul 2020 11:06:30 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2YJk11MVz3c6Z; Thu, 9 Jul 2020 11:06:30 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 064B910139; Thu, 9 Jul 2020 11:06:30 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069B6TrN077080; Thu, 9 Jul 2020 11:06:29 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069B6T1m077079; Thu, 9 Jul 2020 11:06:29 GMT (envelope-from kib@FreeBSD.org) Message-Id: <202007091106.069B6T1m077079@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Thu, 9 Jul 2020 11:06:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r363041 - stable/11/sys/dev/mlx5/mlx5_core X-SVN-Group: stable-11 X-SVN-Commit-Author: kib X-SVN-Commit-Paths: stable/11/sys/dev/mlx5/mlx5_core X-SVN-Commit-Revision: 363041 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 11:06:30 -0000 Author: kib Date: Thu Jul 9 11:06:29 2020 New Revision: 363041 URL: https://svnweb.freebsd.org/changeset/base/363041 Log: MFC r362887: mlx5_core: remove unneccessary LFENCE instruction. Modified: stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c ============================================================================== --- stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c Thu Jul 9 10:54:00 2020 (r363040) +++ stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c Thu Jul 9 11:06:29 2020 (r363041) @@ -240,7 +240,7 @@ static int mlx5_eq_int(struct mlx5_core_dev *dev, stru * Make sure we read EQ entry contents after we've * checked the ownership bit. */ - rmb(); + atomic_thread_fence_acq(); mlx5_core_dbg(eq->dev, "eqn %d, eqe type %s\n", eq->eqn, eqe_type_str(eqe->type)); From owner-svn-src-all@freebsd.org Thu Jul 9 13:19:01 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7094936AD6F; Thu, 9 Jul 2020 13:19:01 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2cFd2Nv7z42NS; Thu, 9 Jul 2020 13:19:01 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 309C2119AB; Thu, 9 Jul 2020 13:19:01 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069DJ154056652; Thu, 9 Jul 2020 13:19:01 GMT (envelope-from tsoome@FreeBSD.org) Received: (from tsoome@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069DJ1fv056651; Thu, 9 Jul 2020 13:19:01 GMT (envelope-from tsoome@FreeBSD.org) Message-Id: <202007091319.069DJ1fv056651@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tsoome set sender to tsoome@FreeBSD.org using -f From: Toomas Soome Date: Thu, 9 Jul 2020 13:19:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363042 - head/stand/libsa/zfs X-SVN-Group: head X-SVN-Commit-Author: tsoome X-SVN-Commit-Paths: head/stand/libsa/zfs X-SVN-Commit-Revision: 363042 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 13:19:01 -0000 Author: tsoome Date: Thu Jul 9 13:19:00 2020 New Revision: 363042 URL: https://svnweb.freebsd.org/changeset/base/363042 Log: loader: setting vdev size based on label asize is not working Because we need to read asize from vdev_tree. We also need to consider different vdev type difference. Reviewed by: allanjude Sponsored by: Netflix, Klara Inc. Differential Revision: https://reviews.freebsd.org/D25586 Modified: head/stand/libsa/zfs/zfsimpl.c Modified: head/stand/libsa/zfs/zfsimpl.c ============================================================================== --- head/stand/libsa/zfs/zfsimpl.c Thu Jul 9 11:06:29 2020 (r363041) +++ head/stand/libsa/zfs/zfsimpl.c Thu Jul 9 13:19:00 2020 (r363042) @@ -1586,6 +1586,57 @@ vdev_label_read(vdev_t *vd, int l, void *buf, uint64_t return (vdev_read_phys(vd, &bp, buf, off, size)); } +static uint64_t +vdev_get_label_asize(nvlist_t *nvl) +{ + nvlist_t *vdevs; + uint64_t asize; + const char *type; + int len; + + asize = 0; + /* Get vdev tree */ + if (nvlist_find(nvl, ZPOOL_CONFIG_VDEV_TREE, DATA_TYPE_NVLIST, + NULL, &vdevs, NULL) != 0) + return (asize); + + /* + * Get vdev type. We will calculate asize for raidz, mirror and disk. + * For raidz, the asize is raw size of all children. + */ + if (nvlist_find(vdevs, ZPOOL_CONFIG_TYPE, DATA_TYPE_STRING, + NULL, &type, &len) != 0) + goto done; + + if (memcmp(type, VDEV_TYPE_MIRROR, len) != 0 && + memcmp(type, VDEV_TYPE_DISK, len) != 0 && + memcmp(type, VDEV_TYPE_RAIDZ, len) != 0) + goto done; + + if (nvlist_find(vdevs, ZPOOL_CONFIG_ASIZE, DATA_TYPE_UINT64, + NULL, &asize, NULL) != 0) + goto done; + + if (memcmp(type, VDEV_TYPE_RAIDZ, len) == 0) { + nvlist_t *kids; + int nkids; + + if (nvlist_find(vdevs, ZPOOL_CONFIG_CHILDREN, + DATA_TYPE_NVLIST_ARRAY, &nkids, &kids, NULL) != 0) { + asize = 0; + goto done; + } + + asize /= nkids; + nvlist_destroy(kids); + } + + asize += VDEV_LABEL_START_SIZE + VDEV_LABEL_END_SIZE; +done: + nvlist_destroy(vdevs); + return (asize); +} + static nvlist_t * vdev_label_read_config(vdev_t *vd, uint64_t txg) { @@ -1631,10 +1682,9 @@ vdev_label_read_config(vdev_t *vd, uint64_t txg) * Use asize from pool config. We need this * because we can get bad value from BIOS. */ - if (nvlist_find(nvl, ZPOOL_CONFIG_ASIZE, - DATA_TYPE_UINT64, NULL, &asize, NULL) == 0) { - vd->v_psize = asize + - VDEV_LABEL_START_SIZE + VDEV_LABEL_END_SIZE; + asize = vdev_get_label_asize(nvl); + if (asize != 0) { + vd->v_psize = asize; } } nvlist_destroy(tmp); From owner-svn-src-all@freebsd.org Thu Jul 9 14:17:05 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 28C9036CD9D; Thu, 9 Jul 2020 14:17:05 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2dXd0JZpz46Yp; Thu, 9 Jul 2020 14:17:05 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DE92D126AE; Thu, 9 Jul 2020 14:17:04 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069EH4jV093585; Thu, 9 Jul 2020 14:17:04 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069EH4Cr093584; Thu, 9 Jul 2020 14:17:04 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007091417.069EH4Cr093584@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Thu, 9 Jul 2020 14:17:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363043 - stable/12/sbin/ipfw X-SVN-Group: stable-12 X-SVN-Commit-Author: markj X-SVN-Commit-Paths: stable/12/sbin/ipfw X-SVN-Commit-Revision: 363043 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 14:17:05 -0000 Author: markj Date: Thu Jul 9 14:17:04 2020 New Revision: 363043 URL: https://svnweb.freebsd.org/changeset/base/363043 Log: MFC r362619: ipfw: Support the literal IPv6 address syntax in the fwd command. Modified: stable/12/sbin/ipfw/ipfw2.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sbin/ipfw/ipfw2.c ============================================================================== --- stable/12/sbin/ipfw/ipfw2.c Thu Jul 9 13:19:00 2020 (r363042) +++ stable/12/sbin/ipfw/ipfw2.c Thu Jul 9 14:17:04 2020 (r363043) @@ -3990,8 +3990,7 @@ chkarg: * IPv4 a.b.c.d,port * IPv4 a.b.c.d:port * IPv6 w:x:y::z,port - * The ':' can only be used with hostname and IPv4 address. - * XXX-BZ Should we also support [w:x:y::z]:port? + * IPv6 [w:x:y::z]:port */ struct sockaddr_storage result; struct addrinfo *res; @@ -4001,33 +4000,45 @@ chkarg: NEED1("missing forward address[:port]"); - /* - * locate the address-port separator (':' or ',') - */ - s = strchr(*av, ','); - if (s == NULL) { - /* Distinguish between IPv4:port and IPv6 cases. */ - s = strchr(*av, ':'); - if (s && strchr(s+1, ':')) - s = NULL; /* no port */ - } - - port_number = 0; - if (s != NULL) { - /* Terminate host portion and set s to start of port. */ - *(s++) = '\0'; - i = strtoport(s, &end, 0 /* base */, 0 /* proto */); - if (s == end) - errx(EX_DATAERR, - "illegal forwarding port ``%s''", s); - port_number = (u_short)i; - } - if (_substrcmp(*av, "tablearg") == 0) { family = PF_INET; ((struct sockaddr_in*)&result)->sin_addr.s_addr = INADDR_ANY; } else { + /* + * Are we an bracket-enclosed IPv6 address? + */ + if (strchr(*av, '[')) + (*av)++; + + /* + * locate the address-port separator (':' or ',') + */ + s = strchr(*av, ','); + if (s == NULL) { + s = strchr(*av, ']'); + /* Prevent erroneous parsing on brackets. */ + if (s != NULL) + *(s++) = '\0'; + else + s = *av; + + /* Distinguish between IPv4:port and IPv6 cases. */ + s = strchr(s, ':'); + if (s && strchr(s+1, ':')) + s = NULL; /* no port */ + } + + if (s != NULL) { + /* Terminate host portion and set s to start of port. */ + *(s++) = '\0'; + i = strtoport(s, &end, 0 /* base */, 0 /* proto */); + if (s == end) + errx(EX_DATAERR, + "illegal forwarding port ``%s''", s); + port_number = (u_short)i; + } + /* * Resolve the host name or address to a family and a * network representation of the address. From owner-svn-src-all@freebsd.org Thu Jul 9 14:18:15 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2F55A36CE8E; Thu, 9 Jul 2020 14:18:15 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2dYz0Vrlz46lj; Thu, 9 Jul 2020 14:18:15 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E8F4811EF5; Thu, 9 Jul 2020 14:18:14 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069EIE8U093738; Thu, 9 Jul 2020 14:18:14 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069EIE9W093736; Thu, 9 Jul 2020 14:18:14 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007091418.069EIE9W093736@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Thu, 9 Jul 2020 14:18:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363044 - stable/12/sys/conf X-SVN-Group: stable-12 X-SVN-Commit-Author: markj X-SVN-Commit-Paths: stable/12/sys/conf X-SVN-Commit-Revision: 363044 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 14:18:15 -0000 Author: markj Date: Thu Jul 9 14:18:14 2020 New Revision: 363044 URL: https://svnweb.freebsd.org/changeset/base/363044 Log: MFC r362614, r362618: Add SCTP_SUPPORT handling to config.mk. Modified: stable/12/sys/conf/config.mk stable/12/sys/conf/kern.opts.mk Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/conf/config.mk ============================================================================== --- stable/12/sys/conf/config.mk Thu Jul 9 14:17:04 2020 (r363043) +++ stable/12/sys/conf/config.mk Thu Jul 9 14:18:14 2020 (r363044) @@ -29,6 +29,10 @@ opt_printf.h: echo "#define PRINTF_BUFR_SIZE 128" > ${.TARGET} opt_scsi.h: echo "#define SCSI_DELAY 15000" > ${.TARGET} +.if ${MK_SCTP_SUPPORT} != "no" +opt_sctp.h: + @echo "#define SCTP_SUPPORT 1" > ${.TARGET} +.endif opt_wlan.h: echo "#define IEEE80211_DEBUG 1" > ${.TARGET} echo "#define IEEE80211_AMPDU_AGE 1" >> ${.TARGET} @@ -44,6 +48,9 @@ KERN_OPTS+= INET TCP_OFFLOAD .endif .if ${MK_INET6_SUPPORT} != "no" KERN_OPTS+= INET6 +.endif +.if ${MK_SCTP_SUPPORT} != "no" +KERN_OPTS+= SCTP_SUPPORT .endif .elif !defined(KERN_OPTS) KERN_OPTS!=cat ${KERNBUILDDIR}/opt*.h | awk '{print $$2;}' | sort -u Modified: stable/12/sys/conf/kern.opts.mk ============================================================================== --- stable/12/sys/conf/kern.opts.mk Thu Jul 9 14:17:04 2020 (r363043) +++ stable/12/sys/conf/kern.opts.mk Thu Jul 9 14:18:14 2020 (r363044) @@ -43,6 +43,7 @@ __DEFAULT_YES_OPTIONS = \ NETGRAPH \ PF \ REPRODUCIBLE_BUILD \ + SCTP_SUPPORT \ SOURCELESS_HOST \ SOURCELESS_UCODE \ TESTS \ From owner-svn-src-all@freebsd.org Thu Jul 9 14:42:42 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8AF6636D3F7; Thu, 9 Jul 2020 14:42:42 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2f6B2szvz48BR; Thu, 9 Jul 2020 14:42:42 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 45DDA12AC4; Thu, 9 Jul 2020 14:42:42 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069EggO0011992; Thu, 9 Jul 2020 14:42:42 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069Egf3p011991; Thu, 9 Jul 2020 14:42:41 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007091442.069Egf3p011991@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Thu, 9 Jul 2020 14:42:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363045 - stable/12/sys/netinet X-SVN-Group: stable-12 X-SVN-Commit-Author: markj X-SVN-Commit-Paths: stable/12/sys/netinet X-SVN-Commit-Revision: 363045 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 14:42:42 -0000 Author: markj Date: Thu Jul 9 14:42:41 2020 New Revision: 363045 URL: https://svnweb.freebsd.org/changeset/base/363045 Log: MFC r362497: Move the definition of SCTP's system_base_info into sctp_crc32.c. Modified: stable/12/sys/netinet/sctp_crc32.c stable/12/sys/netinet/sctp_pcb.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/netinet/sctp_crc32.c ============================================================================== --- stable/12/sys/netinet/sctp_crc32.c Thu Jul 9 14:18:14 2020 (r363044) +++ stable/12/sys/netinet/sctp_crc32.c Thu Jul 9 14:42:41 2020 (r363045) @@ -43,7 +43,7 @@ __FBSDID("$FreeBSD$"); #include #include -#ifdef SCTP +#if defined(SCTP) || defined(SCTP_SUPPORT) #include #include #include @@ -116,6 +116,9 @@ sctp_calculate_cksum(struct mbuf *m, uint32_t offset) } #if defined(SCTP) || defined(SCTP_SUPPORT) + +VNET_DEFINE(struct sctp_base_info, system_base_info); + /* * Compute and insert the SCTP checksum in network byte order for a given * mbuf chain m which contains an SCTP packet starting at offset. @@ -126,10 +129,8 @@ sctp_delayed_cksum(struct mbuf *m, uint32_t offset) uint32_t checksum; checksum = sctp_calculate_cksum(m, offset); -#ifdef SCTP SCTP_STAT_DECR(sctps_sendhwcrc); SCTP_STAT_INCR(sctps_sendswcrc); -#endif offset += offsetof(struct sctphdr, checksum); if (offset + sizeof(uint32_t) > (uint32_t)(m->m_len)) { Modified: stable/12/sys/netinet/sctp_pcb.c ============================================================================== --- stable/12/sys/netinet/sctp_pcb.c Thu Jul 9 14:18:14 2020 (r363044) +++ stable/12/sys/netinet/sctp_pcb.c Thu Jul 9 14:42:41 2020 (r363045) @@ -57,9 +57,6 @@ __FBSDID("$FreeBSD$"); #include #include - -VNET_DEFINE(struct sctp_base_info, system_base_info); - /* FIX: we don't handle multiple link local scopes */ /* "scopeless" replacement IN6_ARE_ADDR_EQUAL */ #ifdef INET6 From owner-svn-src-all@freebsd.org Thu Jul 9 16:18:43 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1A95A36F393; Thu, 9 Jul 2020 16:18:43 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2hDy6sBBz4F70; Thu, 9 Jul 2020 16:18:42 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CEA6013E1D; Thu, 9 Jul 2020 16:18:42 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069GIgOA067997; Thu, 9 Jul 2020 16:18:42 GMT (envelope-from tuexen@FreeBSD.org) Received: (from tuexen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069GIg8o067996; Thu, 9 Jul 2020 16:18:42 GMT (envelope-from tuexen@FreeBSD.org) Message-Id: <202007091618.069GIg8o067996@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tuexen set sender to tuexen@FreeBSD.org using -f From: Michael Tuexen Date: Thu, 9 Jul 2020 16:18:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363046 - head/sys/netinet X-SVN-Group: head X-SVN-Commit-Author: tuexen X-SVN-Commit-Paths: head/sys/netinet X-SVN-Commit-Revision: 363046 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 16:18:43 -0000 Author: tuexen Date: Thu Jul 9 16:18:42 2020 New Revision: 363046 URL: https://svnweb.freebsd.org/changeset/base/363046 Log: Optimize flushing of receive queues. This addresses an issue found and reported for the userland stack in https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=21243 MFC after: 1 week Modified: head/sys/netinet/sctp_indata.c Modified: head/sys/netinet/sctp_indata.c ============================================================================== --- head/sys/netinet/sctp_indata.c Thu Jul 9 14:42:41 2020 (r363045) +++ head/sys/netinet/sctp_indata.c Thu Jul 9 16:18:42 2020 (r363046) @@ -5411,11 +5411,9 @@ sctp_kick_prsctp_reorder_queue(struct sctp_tcb *stcb, static void sctp_flush_reassm_for_str_seq(struct sctp_tcb *stcb, - struct sctp_association *asoc, - uint16_t stream, uint32_t mid, int ordered, uint32_t cumtsn) + struct sctp_association *asoc, struct sctp_stream_in *strm, + struct sctp_queued_to_read *control, int ordered, uint32_t cumtsn) { - struct sctp_queued_to_read *control; - struct sctp_stream_in *strm; struct sctp_tmit_chunk *chk, *nchk; int cnt_removed = 0; @@ -5427,12 +5425,6 @@ sctp_flush_reassm_for_str_seq(struct sctp_tcb *stcb, * it can be delivered... But for now we just dump everything on the * queue. */ - strm = &asoc->strmin[stream]; - control = sctp_find_reasm_entry(strm, mid, ordered, asoc->idata_supported); - if (control == NULL) { - /* Not found */ - return; - } if (!asoc->idata_supported && !ordered && SCTP_TSN_GT(control->fsn_included, cumtsn)) { return; } @@ -5609,7 +5601,10 @@ sctp_handle_forward_tsn(struct sctp_tcb *stcb, /* Flush all the un-ordered data based on cum-tsn */ SCTP_INP_READ_LOCK(stcb->sctp_ep); for (sid = 0; sid < asoc->streamincnt; sid++) { - sctp_flush_reassm_for_str_seq(stcb, asoc, sid, 0, 0, new_cum_tsn); + strm = &asoc->strmin[sid]; + if (!TAILQ_EMPTY(&strm->uno_inqueue)) { + sctp_flush_reassm_for_str_seq(stcb, asoc, strm, TAILQ_FIRST(&strm->uno_inqueue), 0, new_cum_tsn); + } } SCTP_INP_READ_UNLOCK(stcb->sctp_ep); } @@ -5621,7 +5616,7 @@ sctp_handle_forward_tsn(struct sctp_tcb *stcb, if (m && fwd_sz) { /* New method. */ unsigned int num_str; - uint32_t mid, cur_mid; + uint32_t mid; uint16_t sid; uint16_t ordered, flags; struct sctp_strseq *stseq, strseqbuf; @@ -5688,8 +5683,24 @@ sctp_handle_forward_tsn(struct sctp_tcb *stcb, asoc->fragmented_delivery_inprogress = 0; } strm = &asoc->strmin[sid]; - for (cur_mid = strm->last_mid_delivered; SCTP_MID_GE(asoc->idata_supported, mid, cur_mid); cur_mid++) { - sctp_flush_reassm_for_str_seq(stcb, asoc, sid, cur_mid, ordered, new_cum_tsn); + if (ordered) { + TAILQ_FOREACH(control, &strm->inqueue, next_instrm) { + if (SCTP_MID_GE(asoc->idata_supported, mid, control->mid)) { + sctp_flush_reassm_for_str_seq(stcb, asoc, strm, control, ordered, new_cum_tsn); + } + } + } else { + if (asoc->idata_supported) { + TAILQ_FOREACH(control, &strm->uno_inqueue, next_instrm) { + if (SCTP_MID_GE(asoc->idata_supported, mid, control->mid)) { + sctp_flush_reassm_for_str_seq(stcb, asoc, strm, control, ordered, new_cum_tsn); + } + } + } else { + if (!TAILQ_EMPTY(&strm->uno_inqueue)) { + sctp_flush_reassm_for_str_seq(stcb, asoc, strm, TAILQ_FIRST(&strm->uno_inqueue), ordered, new_cum_tsn); + } + } } TAILQ_FOREACH(control, &stcb->sctp_ep->read_queue, next) { if ((control->sinfo_stream == sid) && From owner-svn-src-all@freebsd.org Thu Jul 9 16:28:15 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0D3A036F2CC; Thu, 9 Jul 2020 16:28:15 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2hRy6S8Xz4FjL; Thu, 9 Jul 2020 16:28:14 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C0DD51377E; Thu, 9 Jul 2020 16:28:14 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069GSEkf074380; Thu, 9 Jul 2020 16:28:14 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069GSDBv074375; Thu, 9 Jul 2020 16:28:13 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <202007091628.069GSDBv074375@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Thu, 9 Jul 2020 16:28:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363047 - in head/sys: arm/broadcom/bcm2835 conf X-SVN-Group: head X-SVN-Commit-Author: andrew X-SVN-Commit-Paths: in head/sys: arm/broadcom/bcm2835 conf X-SVN-Commit-Revision: 363047 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 16:28:15 -0000 Author: andrew Date: Thu Jul 9 16:28:13 2020 New Revision: 363047 URL: https://svnweb.freebsd.org/changeset/base/363047 Log: Add a driver to talk to the Raspberry Pi firmware Communicating with the Raspberry Pi firmware is currently handled by each driver calling into the mbox driver, however the device tree is structured such that they should be calling into a firmware driver. Add a driver for this node with an interface to communicate to the firmware via the mbox interface. There is a sysctl to get the firmware revision. This is a unix date so can be parsed with: root@generic:~ # date -j -f '%s' sysctl -n dev.bcm2835_firmware.0.revision Tue Nov 19 16:40:28 UTC 2019 Reviewed by: manu Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D25572 Added: head/sys/arm/broadcom/bcm2835/bcm2835_firmware.c (contents, props changed) head/sys/arm/broadcom/bcm2835/bcm2835_firmware.h (contents, props changed) Modified: head/sys/arm/broadcom/bcm2835/bcm2835_mbox_prop.h head/sys/arm/broadcom/bcm2835/files.bcm283x head/sys/conf/files.arm64 Added: head/sys/arm/broadcom/bcm2835/bcm2835_firmware.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/broadcom/bcm2835/bcm2835_firmware.c Thu Jul 9 16:28:13 2020 (r363047) @@ -0,0 +1,181 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2020 Andrew Turner + * + * This work was supported by Innovate UK project 105694, "Digital Security + * by Design (DSbD) Technology Platform Prototype". + * + * 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. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +struct bcm2835_firmware_softc { + device_t sc_dev; + phandle_t sc_mbox; +}; + +static struct ofw_compat_data compat_data[] = { + {"raspberrypi,bcm2835-firmware", 1}, + {NULL, 0} +}; + +static int sysctl_bcm2835_firmware_get_revision(SYSCTL_HANDLER_ARGS); + +static int +bcm2835_firmware_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "BCM2835 Firmware"); + return (BUS_PROBE_DEFAULT); +} + +static int +bcm2835_firmware_attach(device_t dev) +{ + struct bcm2835_firmware_softc *sc; + struct sysctl_ctx_list *ctx; + struct sysctl_oid *tree_node; + struct sysctl_oid_list *tree; + phandle_t node, mbox; + int rv; + + sc = device_get_softc(dev); + sc->sc_dev = dev; + + node = ofw_bus_get_node(dev); + rv = OF_getencprop(node, "mboxes", &mbox, sizeof(mbox)); + if (rv <= 0) { + device_printf(dev, "can't read mboxes property\n"); + return (ENXIO); + } + sc->sc_mbox = mbox; + + OF_device_register_xref(OF_xref_from_node(node), dev); + + ctx = device_get_sysctl_ctx(sc->sc_dev); + tree_node = device_get_sysctl_tree(sc->sc_dev); + tree = SYSCTL_CHILDREN(tree_node); + SYSCTL_ADD_PROC(ctx, tree, OID_AUTO, "revision", + CTLTYPE_UINT | CTLFLAG_RD, sc, sizeof(*sc), + sysctl_bcm2835_firmware_get_revision, "IU", + "Firmware revision"); + return (0); +} + +int +bcm2835_firmware_property(device_t dev, uint32_t prop, void *data, size_t len) +{ + struct { + struct bcm2835_mbox_hdr hdr; + struct bcm2835_mbox_tag_hdr tag_hdr; + uint32_t data[]; + } *msg_hdr; + size_t msg_len; + int err; + + /* + * The message is processed in 32-bit chunks so must be a multiple + * of 32-bits. + */ + if ((len & (sizeof(uint32_t) - 1)) != 0) + return (EINVAL); + + msg_len = sizeof(*msg_hdr) + len + sizeof(uint32_t); + msg_hdr = malloc(sizeof(*msg_hdr) + msg_len + sizeof(uint32_t), + M_DEVBUF, M_WAITOK | M_ZERO); + + msg_hdr->hdr.buf_size = msg_len; + msg_hdr->hdr.code = BCM2835_MBOX_CODE_REQ; + msg_hdr->tag_hdr.tag = prop; + msg_hdr->tag_hdr.val_buf_size = len; + memcpy(msg_hdr->data, data, len); + msg_hdr->data[len / sizeof(uint32_t)] = 0; + + err = bcm2835_mbox_property(msg_hdr, msg_len); + if (err == 0) { + memcpy(data, msg_hdr->data, len); + } + + free(msg_hdr, M_DEVBUF); + + return (err); +} + +static int +sysctl_bcm2835_firmware_get_revision(SYSCTL_HANDLER_ARGS) +{ + struct bcm2835_firmware_softc *sc = arg1; + uint32_t rev; + int err; + + if (bcm2835_firmware_property(sc->sc_dev, + BCM2835_MBOX_TAG_FIRMWARE_REVISION, &rev, sizeof(rev)) != 0) + return (ENXIO); + + err = sysctl_handle_int(oidp, &rev, sizeof(rev), req); + if (err || !req->newptr) /* error || read request */ + return (err); + + /* write request */ + return (EINVAL); +} + +static device_method_t bcm2835_firmware_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, bcm2835_firmware_probe), + DEVMETHOD(device_attach, bcm2835_firmware_attach), + + DEVMETHOD_END +}; + +static devclass_t bcm2835_firmware_devclass; +static driver_t bcm2835_firmware_driver = { + "bcm2835_firmware", + bcm2835_firmware_methods, + sizeof(struct bcm2835_firmware_softc), +}; + +DRIVER_MODULE(bcm2835_firmware, simplebus, bcm2835_firmware_driver, + bcm2835_firmware_devclass, 0, 0); Added: head/sys/arm/broadcom/bcm2835/bcm2835_firmware.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/broadcom/bcm2835/bcm2835_firmware.h Thu Jul 9 16:28:13 2020 (r363047) @@ -0,0 +1,38 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2020 Andrew Turner + * + * This work was supported by Innovate UK project 105694, "Digital Security + * by Design (DSbD) Technology Platform Prototype". + * + * 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. + * + * $FreeBSD$ + */ + +#ifndef _BCM2835_FIRMWARE_H_ +#define _BCM2835_FIRMWARE_H_ + +int bcm2835_firmware_property(device_t, uint32_t, void *, size_t); + +#endif Modified: head/sys/arm/broadcom/bcm2835/bcm2835_mbox_prop.h ============================================================================== --- head/sys/arm/broadcom/bcm2835/bcm2835_mbox_prop.h Thu Jul 9 16:18:42 2020 (r363046) +++ head/sys/arm/broadcom/bcm2835/bcm2835_mbox_prop.h Thu Jul 9 16:28:13 2020 (r363047) @@ -58,6 +58,10 @@ struct bcm2835_mbox_tag_hdr { (tag_)->tag_hdr.val_len = sizeof((tag_)->body.req); \ } while (0) +#define BCM2835_MBOX_TAG_FIRMWARE_REVISION 0x00000001 + + + #define BCM2835_MBOX_POWER_ID_EMMC 0x00000000 #define BCM2835_MBOX_POWER_ID_UART0 0x00000001 #define BCM2835_MBOX_POWER_ID_UART1 0x00000002 Modified: head/sys/arm/broadcom/bcm2835/files.bcm283x ============================================================================== --- head/sys/arm/broadcom/bcm2835/files.bcm283x Thu Jul 9 16:18:42 2020 (r363046) +++ head/sys/arm/broadcom/bcm2835/files.bcm283x Thu Jul 9 16:28:13 2020 (r363047) @@ -5,6 +5,7 @@ arm/broadcom/bcm2835/bcm2835_cpufreq.c standard arm/broadcom/bcm2835/bcm2835_dma.c standard arm/broadcom/bcm2835/bcm2835_fb.c optional sc arm/broadcom/bcm2835/bcm2835_fbd.c optional vt +arm/broadcom/bcm2835/bcm2835_firmware.c standard arm/broadcom/bcm2835/bcm2835_ft5406.c optional evdev bcm2835_ft5406 arm/broadcom/bcm2835/bcm2835_gpio.c optional gpio arm/broadcom/bcm2835/bcm2835_intr.c standard Modified: head/sys/conf/files.arm64 ============================================================================== --- head/sys/conf/files.arm64 Thu Jul 9 16:18:42 2020 (r363046) +++ head/sys/conf/files.arm64 Thu Jul 9 16:28:13 2020 (r363047) @@ -92,6 +92,7 @@ arm/broadcom/bcm2835/bcm2835_clkman.c optional soc_br arm/broadcom/bcm2835/bcm2835_cpufreq.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt arm/broadcom/bcm2835/bcm2835_dma.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt arm/broadcom/bcm2835/bcm2835_fbd.c optional vt soc_brcm_bcm2837 fdt | vt soc_brcm_bcm2838 fdt +arm/broadcom/bcm2835/bcm2835_firmware.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt arm/broadcom/bcm2835/bcm2835_ft5406.c optional evdev bcm2835_ft5406 fdt arm/broadcom/bcm2835/bcm2835_gpio.c optional gpio soc_brcm_bcm2837 fdt | gpio soc_brcm_bcm2838 fdt arm/broadcom/bcm2835/bcm2835_intr.c optional soc_brcm_bcm2837 fdt | soc_brcm_bcm2838 fdt From owner-svn-src-all@freebsd.org Thu Jul 9 16:50:03 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C40CC36F96F; Thu, 9 Jul 2020 16:50:03 +0000 (UTC) (envelope-from sjg@juniper.net) Received: from mx0b-00273201.pphosted.com (mx0b-00273201.pphosted.com [67.231.152.164]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "*.pphosted.com", Issuer "Thawte RSA CA 2018" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2hx66hdyz4Gns; Thu, 9 Jul 2020 16:50:02 +0000 (UTC) (envelope-from sjg@juniper.net) Received: from pps.filterd (m0108160.ppops.net [127.0.0.1]) by mx0b-00273201.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 069G8B18026423; Thu, 9 Jul 2020 09:16:43 -0700 Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2170.outbound.protection.outlook.com [104.47.55.170]) by mx0b-00273201.pphosted.com with ESMTP id 325k2y9vsv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 09 Jul 2020 09:16:43 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=baOOlYrxkCmzX0WpfwGRJvSH2jPj4+/p+Vv7Ptapx5VABSdzSLuKMhGoT4u7Q5+YnH7w+AM9Tca0vTKkVz0CQEqbExYX1nUtSQ+OCYhufnsCJkYBOzrXbUUvILvb6SLXviKg9YgsJOhlhK3pux/hXOZvo7fYUTdvUQhFJa9vKsZHqJuYnipNr+TNt1osNDJDUQLuwSdeD2x5Aoxa56n/6JQcTNO0NNOe8bnX55Y+JgdM/mz31C1aLRM9ON1+UjT5MEWO10K48GeOk8HWGGbW7gAbUj0FdIBiFrDJBy0kjgmqLGd0HrEZyW6wjWNjxWrpd2veA69Obf2xKC406TPsTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QpBQR+xQo+0+c6wEbVTPN6URV2k8MONYJ2yinV0j44M=; b=SAZvk8O0m2Syq8NT5Z2oAZ8II+CsaFuX6DhtPj4r/R0kAyWZNGk0E0x7CmJyK+PlFHyYRshxKgfCM8Q0UdXD4SO3RuYcWIFvFBSC50GlhfUtfdf1CcTM9dyicM3exJVgL1FKZX7ooSxxfkKVhjZ17C/C/f51tgcS5Iu4MRemktKXzhxG2QzgrMdw50REMf3OkhzbeEktXBT+Z6S4zoLocWe/UlUL3mhPExbLAoKzH2jaUuLJrkWEU9VfrPKQ8VvCyykig0zZNPp9GehbpzCHQNXhLNTuZbEaTzZJSN5qm8plssTpjW4H7DAWlAQWn/m62EILgixDMKjvqKKY8ZaMmA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=softfail (sender ip is 66.129.239.13) smtp.rcpttodomain=freebsd.org smtp.mailfrom=juniper.net; dmarc=fail (p=reject sp=reject pct=100) action=oreject header.from=juniper.net; dkim=none (message not signed); arc=none Received: from MWHPR21CA0055.namprd21.prod.outlook.com (2603:10b6:300:db::17) by CY4PR05MB3064.namprd05.prod.outlook.com (2603:10b6:903:fe::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3174.13; Thu, 9 Jul 2020 16:16:41 +0000 Received: from CO1NAM05FT028.eop-nam05.prod.protection.outlook.com (2603:10b6:300:db:cafe::2b) by MWHPR21CA0055.outlook.office365.com (2603:10b6:300:db::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3195.4 via Frontend Transport; Thu, 9 Jul 2020 16:16:41 +0000 X-MS-Exchange-Authentication-Results: spf=softfail (sender IP is 66.129.239.13) smtp.mailfrom=juniper.net; FreeBSD.org; dkim=none (message not signed) header.d=none;FreeBSD.org; dmarc=fail action=oreject header.from=juniper.net; Received-SPF: SoftFail (protection.outlook.com: domain of transitioning juniper.net discourages use of 66.129.239.13 as permitted sender) Received: from P-EXFEND-EQX-02.jnpr.net (66.129.239.13) by CO1NAM05FT028.mail.protection.outlook.com (10.152.96.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.3195.9 via Frontend Transport; Thu, 9 Jul 2020 16:16:40 +0000 Received: from P-EXBEND-EQX-02.jnpr.net (10.104.8.53) by P-EXFEND-EQX-02.jnpr.net (10.104.8.55) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 9 Jul 2020 09:16:39 -0700 Received: from P-EXBEND-EQX-01.jnpr.net (10.104.8.52) by P-EXBEND-EQX-02.jnpr.net (10.104.8.53) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 9 Jul 2020 09:16:39 -0700 Received: from p-mailhub01.juniper.net (10.104.20.6) by P-EXBEND-EQX-01.jnpr.net (10.104.8.52) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Thu, 9 Jul 2020 09:16:39 -0700 Received: from kaos.jnpr.net (kaos.jnpr.net [172.23.255.254]) by p-mailhub01.juniper.net (8.14.4/8.11.3) with ESMTP id 069GGcCD010220; Thu, 9 Jul 2020 09:16:39 -0700 (envelope-from sjg@juniper.net) Received: by kaos.jnpr.net (Postfix, from userid 1377) id D5EDB6E5F5; Thu, 9 Jul 2020 09:16:38 -0700 (PDT) Received: from kaos.jnpr.net (localhost [127.0.0.1]) by kaos.jnpr.net (Postfix) with ESMTP id D44226E5F4; Thu, 9 Jul 2020 09:16:38 -0700 (PDT) To: Cy Schubert CC: , , , Subject: Re: svn commit: r363031 - in head: contrib/bmake contrib/bmake/lst.lib contrib/bmake/mk contrib/bmake/mk/sys contrib/bmake/unit-tests usr.bin/bmake In-Reply-To: <202007090402.06942mVr015813@slippy.cwsent.com> References: <202007082120.068LKCeN067904@repo.freebsd.org> <202007090328.0693SNo4028242@slippy.cwsent.com> <45359.1594266432@kaos.jnpr.net> <202007090402.06942mVr015813@slippy.cwsent.com> Comments: In-reply-to: Cy Schubert message dated "Wed, 08 Jul 2020 21:02:45 -0700." From: "Simon J. Gerraty" X-Mailer: MH-E 8.6+git; nmh 1.7.1; GNU Emacs 26.3 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <22100.1594311398.1@kaos.jnpr.net> Date: Thu, 9 Jul 2020 09:16:38 -0700 Message-ID: <26265.1594311398@kaos.jnpr.net> X-EXCLAIMER-MD-CONFIG: e3cb0ff2-54e7-4646-8a04-0dae4ac7b136 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:66.129.239.13; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:P-EXFEND-EQX-02.jnpr.net; PTR:InfoDomainNonexistent; CAT:NONE; SFTY:; SFS:(4636009)(136003)(376002)(346002)(396003)(39860400002)(46966005)(82740400003)(8676002)(7696005)(55016002)(8936002)(107886003)(86362001)(83380400001)(4326008)(26005)(5660300002)(6266002)(6916009)(356005)(336012)(81166007)(82310400002)(7126003)(54906003)(316002)(47076004)(478600001)(2906002)(9686003)(70586007)(70206006)(186003); DIR:OUT; SFP:1102; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e0c3f14d-db3e-41e0-3b23-08d824237681 X-MS-TrafficTypeDiagnostic: CY4PR05MB3064: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bUJIDcuy33ZcBn+KWdvobMt6Ydp7yzEa9qpya6vcaCVZoTK9rYrkEZkyGDBKAdWyTPwqF3oovb8B5ZifDZVi9mFCpHTUheW709X34T30Bb9CkPDTzIY0V+FPrL8PgG93lFuBJEP1RfHh2cTLnrM68mVSIvfkSVn9420OlUUUhG0NxOsDoaW3MkTtZH0a9akL81FBMdVDZqG0PbVfPVCPmJG9HgJuXIOJitZyKEvY3Zt23wdW1UkvzUYDHWi+fNPuN77JDTYZSKcZuIc80B1DOFAlvSHWuv4wVnL+C8ATvH0XPv/dgx8wJYgu8iXqVG3q3z2CIav409+lDo3IPNFggRDQH7hxHh9TDF9Y5vombtJhlFK3x4DvSQeAE5/UljLvkYtdw/vkyJ+7uNZpJFnxZw== X-OriginatorOrg: juniper.net X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2020 16:16:40.2621 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e0c3f14d-db3e-41e0-3b23-08d824237681 X-MS-Exchange-CrossTenant-Id: bea78b3c-4cdb-4130-854a-1d193232e5f4 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=bea78b3c-4cdb-4130-854a-1d193232e5f4; Ip=[66.129.239.13]; Helo=[P-EXFEND-EQX-02.jnpr.net] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM05FT028.eop-nam05.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR05MB3064 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.235, 18.0.687 definitions=2020-07-09_08:2020-07-09, 2020-07-09 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_spam_notspam policy=outbound_spam score=5 bulkscore=0 impostorscore=0 suspectscore=0 adultscore=0 spamscore=5 mlxlogscore=127 clxscore=1015 priorityscore=1501 phishscore=0 mlxscore=5 malwarescore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2006250000 definitions=main-2007090116 X-Rspamd-Queue-Id: 4B2hx66hdyz4Gns X-Spamd-Bar: ----- X-Spamd-Result: default: False [-5.45 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.005]; R_DKIM_ALLOW(-0.20)[juniper.net:s=PPS1017,juniper.net:s=selector1]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+ip4:67.231.152.164]; NEURAL_HAM_LONG(-0.98)[-0.983]; MIME_GOOD(-0.10)[text/plain]; ARC_ALLOW(-1.00)[microsoft.com:s=arcselector9901:i=1]; RCPT_COUNT_FIVE(0.00)[5]; TO_MATCH_ENVRCPT_SOME(0.00)[]; DKIM_TRACE(0.00)[juniper.net:+]; DMARC_POLICY_ALLOW(-0.50)[juniper.net,reject]; NEURAL_HAM_SHORT(-1.36)[-1.363]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_LAST(0.00)[]; ASN(0.00)[asn:22843, ipnet:67.231.152.0/24, country:US]; RCVD_COUNT_SEVEN(0.00)[11]; RCVD_IN_DNSWL_LOW(-0.10)[67.231.152.164:from] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 16:50:03 -0000 Cy Schubert wrote: > [External Email. Be cautious of content] > > > In message <45359.1594266432@kaos.jnpr.net>, "Simon J. Gerraty" writes: > > Cy Schubert wrote: > > > This broke ports. > > > > I've reverted the change. > > > > Let me know if you still see issue. > > As I said in my email, all I did was revert cond.c, and that fixed it. You > don't need to revert the whole patch. Just revert cond.c and let NetBSD > know. Ah I missed that bit - rats. I think I've a fix for cond.c, but unfortunately I'm so far unable to construct a unit-test that triggers the problem. Even with bsd.compiler.mk I was unable to get it to fail in debugger, so added an abort and looked at the core file. The problem is in something like: .if 1 || ${something-complicated} > 0 the ${something-complicated} isn't resolved because we do not need to evaluate anything after '1', but the comparator check is still applied. Fix should be simple, but in unit-tests the above does not trigger the problem ;-) From owner-svn-src-all@freebsd.org Thu Jul 9 16:58:53 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id ABBFC36FA58; Thu, 9 Jul 2020 16:58:53 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2j7K44Xsz4HNq; Thu, 9 Jul 2020 16:58:53 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6F2DF14557; Thu, 9 Jul 2020 16:58:53 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069GwrHU092424; Thu, 9 Jul 2020 16:58:53 GMT (envelope-from brooks@FreeBSD.org) Received: (from brooks@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069GwrWo092423; Thu, 9 Jul 2020 16:58:53 GMT (envelope-from brooks@FreeBSD.org) Message-Id: <202007091658.069GwrWo092423@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: brooks set sender to brooks@FreeBSD.org using -f From: Brooks Davis Date: Thu, 9 Jul 2020 16:58:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363048 - stable/12/cddl/contrib/opensolaris/tools/ctf/cvt X-SVN-Group: stable-12 X-SVN-Commit-Author: brooks X-SVN-Commit-Paths: stable/12/cddl/contrib/opensolaris/tools/ctf/cvt X-SVN-Commit-Revision: 363048 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 16:58:53 -0000 Author: brooks Date: Thu Jul 9 16:58:53 2020 New Revision: 363048 URL: https://svnweb.freebsd.org/changeset/base/363048 Log: MFC r362979: Fix a -Wvoid-pointer-to-enum-cast warning missed in r359978. This pattern is used in callbacks with void * data arguments and seems both relatively uncommon and relatively harmless. Silence the warning by casting through uintptr_t. This warning is on by default in Clang 11. Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D24425 Modified: stable/12/cddl/contrib/opensolaris/tools/ctf/cvt/iidesc.c Directory Properties: stable/12/ (props changed) Modified: stable/12/cddl/contrib/opensolaris/tools/ctf/cvt/iidesc.c ============================================================================== --- stable/12/cddl/contrib/opensolaris/tools/ctf/cvt/iidesc.c Thu Jul 9 16:28:13 2020 (r363047) +++ stable/12/cddl/contrib/opensolaris/tools/ctf/cvt/iidesc.c Thu Jul 9 16:58:53 2020 (r363048) @@ -179,7 +179,7 @@ int iidesc_count_type(void *data, void *private) { iidesc_t *ii = data; - iitype_t match = (iitype_t)private; + iitype_t match = (iitype_t)(uintptr_t)private; return (ii->ii_type == match); } From owner-svn-src-all@freebsd.org Thu Jul 9 17:10:19 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 264F43503FC; Thu, 9 Jul 2020 17:10:19 +0000 (UTC) (envelope-from gallatin@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2jNW09XLz4JNr; Thu, 9 Jul 2020 17:10:19 +0000 (UTC) (envelope-from gallatin@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DD4EB14370; Thu, 9 Jul 2020 17:10:18 +0000 (UTC) (envelope-from gallatin@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069HAI7l099271; Thu, 9 Jul 2020 17:10:18 GMT (envelope-from gallatin@FreeBSD.org) Received: (from gallatin@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069HAIuP099270; Thu, 9 Jul 2020 17:10:18 GMT (envelope-from gallatin@FreeBSD.org) Message-Id: <202007091710.069HAIuP099270@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gallatin set sender to gallatin@FreeBSD.org using -f From: Andrew Gallatin Date: Thu, 9 Jul 2020 17:10:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363049 - stable/12/sys/x86/x86 X-SVN-Group: stable-12 X-SVN-Commit-Author: gallatin X-SVN-Commit-Paths: stable/12/sys/x86/x86 X-SVN-Commit-Revision: 363049 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 17:10:19 -0000 Author: gallatin Date: Thu Jul 9 17:10:18 2020 New Revision: 363049 URL: https://svnweb.freebsd.org/changeset/base/363049 Log: MFC r362112 x86: Bump default msi/msix vector limit to 2048 Modified: stable/12/sys/x86/x86/msi.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/x86/x86/msi.c ============================================================================== --- stable/12/sys/x86/x86/msi.c Thu Jul 9 16:58:53 2020 (r363048) +++ stable/12/sys/x86/x86/msi.c Thu Jul 9 17:10:18 2020 (r363049) @@ -154,7 +154,7 @@ struct pic msi_pic = { u_int first_msi_irq; -u_int num_msi_irqs = 512; +u_int num_msi_irqs = 2048; SYSCTL_UINT(_machdep, OID_AUTO, num_msi_irqs, CTLFLAG_RDTUN, &num_msi_irqs, 0, "Number of IRQs reserved for MSI and MSI-X interrupts"); From owner-svn-src-all@freebsd.org Thu Jul 9 17:12:22 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id F0315350719; Thu, 9 Jul 2020 17:12:22 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2jQt5vfvz4JmM; Thu, 9 Jul 2020 17:12:22 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id AF48E146D8; Thu, 9 Jul 2020 17:12:22 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069HCMpG005110; Thu, 9 Jul 2020 17:12:22 GMT (envelope-from brooks@FreeBSD.org) Received: (from brooks@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069HCMgO005109; Thu, 9 Jul 2020 17:12:22 GMT (envelope-from brooks@FreeBSD.org) Message-Id: <202007091712.069HCMgO005109@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: brooks set sender to brooks@FreeBSD.org using -f From: Brooks Davis Date: Thu, 9 Jul 2020 17:12:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r363050 - stable/11/cddl/contrib/opensolaris/tools/ctf/cvt X-SVN-Group: stable-11 X-SVN-Commit-Author: brooks X-SVN-Commit-Paths: stable/11/cddl/contrib/opensolaris/tools/ctf/cvt X-SVN-Commit-Revision: 363050 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 17:12:23 -0000 Author: brooks Date: Thu Jul 9 17:12:22 2020 New Revision: 363050 URL: https://svnweb.freebsd.org/changeset/base/363050 Log: MFC r362979: Fix a -Wvoid-pointer-to-enum-cast warning missed in r359978. This pattern is used in callbacks with void * data arguments and seems both relatively uncommon and relatively harmless. Silence the warning by casting through uintptr_t. This warning is on by default in Clang 11. Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D24425 Modified: stable/11/cddl/contrib/opensolaris/tools/ctf/cvt/iidesc.c Directory Properties: stable/11/ (props changed) Modified: stable/11/cddl/contrib/opensolaris/tools/ctf/cvt/iidesc.c ============================================================================== --- stable/11/cddl/contrib/opensolaris/tools/ctf/cvt/iidesc.c Thu Jul 9 17:10:18 2020 (r363049) +++ stable/11/cddl/contrib/opensolaris/tools/ctf/cvt/iidesc.c Thu Jul 9 17:12:22 2020 (r363050) @@ -179,7 +179,7 @@ int iidesc_count_type(void *data, void *private) { iidesc_t *ii = data; - iitype_t match = (iitype_t)private; + iitype_t match = (iitype_t)(uintptr_t)private; return (ii->ii_type == match); } From owner-svn-src-all@freebsd.org Thu Jul 9 17:26:50 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0E45B350CF7; Thu, 9 Jul 2020 17:26:50 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2jlY6T8pz4KTk; Thu, 9 Jul 2020 17:26:49 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BD0FE143EC; Thu, 9 Jul 2020 17:26:49 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069HQnLo011192; Thu, 9 Jul 2020 17:26:49 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069HQnWU011190; Thu, 9 Jul 2020 17:26:49 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007091726.069HQnWU011190@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Thu, 9 Jul 2020 17:26:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363051 - in head: lib/libc/sys sys/kern X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: in head: lib/libc/sys sys/kern X-SVN-Commit-Revision: 363051 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 17:26:50 -0000 Author: markj Date: Thu Jul 9 17:26:49 2020 New Revision: 363051 URL: https://svnweb.freebsd.org/changeset/base/363051 Log: Avoid copying out kernel pointers from msgctl(IPC_STAT). While this behaviour is harmless, it is really just an artifact of the fact that the msgctl(2) implementation uses a user-visible structure as part of the internal implementation, so it is not deliberate and these pointers are not useful to userspace. Thus, NULL them out before copying out, and remove references to them from the manual page. Reported by: Jeffball Reviewed by: emaste, kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D25600 Modified: head/lib/libc/sys/msgctl.2 head/sys/kern/sysv_msg.c Modified: head/lib/libc/sys/msgctl.2 ============================================================================== --- head/lib/libc/sys/msgctl.2 Thu Jul 9 17:12:22 2020 (r363050) +++ head/lib/libc/sys/msgctl.2 Thu Jul 9 17:26:49 2020 (r363051) @@ -31,7 +31,7 @@ .\" .\" $FreeBSD$ .\"/ -.Dd July 9, 2009 +.Dd July 9, 2020 .Dt MSGCTL 2 .Os .Sh NAME @@ -63,8 +63,6 @@ and contains (amongst others) the following members: .Bd -literal struct msqid_ds { struct ipc_perm msg_perm; /* msg queue permission bits */ - struct msg *__msg_first; /* kernel data, don't use */ - struct msg *__msg_last; /* kernel data, don't use */ msglen_t msg_cbytes; /* number of bytes in use on the queue */ msgqnum_t msg_qnum; /* number of msgs in the queue */ msglen_t msg_qbytes; /* max # of bytes on the queue */ Modified: head/sys/kern/sysv_msg.c ============================================================================== --- head/sys/kern/sysv_msg.c Thu Jul 9 17:12:22 2020 (r363050) +++ head/sys/kern/sysv_msg.c Thu Jul 9 17:26:49 2020 (r363051) @@ -613,6 +613,13 @@ kern_msgctl(struct thread *td, int msqid, int cmd, str *msqbuf = msqkptr->u; if (td->td_ucred->cr_prison != msqkptr->cred->cr_prison) msqbuf->msg_perm.key = IPC_PRIVATE; + + /* + * Try to hide the fact that the structure layout is shared by + * both the kernel and userland. These pointers are not useful + * to userspace. + */ + msqbuf->__msg_first = msqbuf->__msg_last = NULL; break; default: From owner-svn-src-all@freebsd.org Thu Jul 9 17:27:14 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D936135077A; Thu, 9 Jul 2020 17:27:14 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2jm25S05z4KbQ; Thu, 9 Jul 2020 17:27:14 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9E15714AB4; Thu, 9 Jul 2020 17:27:14 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069HREnn011261; Thu, 9 Jul 2020 17:27:14 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069HREhk011260; Thu, 9 Jul 2020 17:27:14 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007091727.069HREhk011260@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Thu, 9 Jul 2020 17:27:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363052 - head/usr.bin/whois X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: head/usr.bin/whois X-SVN-Commit-Revision: 363052 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 17:27:14 -0000 Author: markj Date: Thu Jul 9 17:27:14 2020 New Revision: 363052 URL: https://svnweb.freebsd.org/changeset/base/363052 Log: whois: Handle referrals to rwhois servers. PR: 243862 Submitted by: ben@desync.com Differential Revision: https://reviews.freebsd.org/D25156 Modified: head/usr.bin/whois/whois.c Modified: head/usr.bin/whois/whois.c ============================================================================== --- head/usr.bin/whois/whois.c Thu Jul 9 17:26:49 2020 (r363051) +++ head/usr.bin/whois/whois.c Thu Jul 9 17:27:14 2020 (r363052) @@ -117,6 +117,7 @@ static struct { WHOIS_REFERRAL("Whois Server:"), WHOIS_REFERRAL("Registrar WHOIS Server:"), /* corporatedomains.com */ WHOIS_REFERRAL("ReferralServer: whois://"), /* ARIN */ + WHOIS_REFERRAL("ReferralServer: rwhois://"), /* ARIN */ WHOIS_REFERRAL("descr: region. Please query"), /* AfriNIC */ { NULL, 0 } }; @@ -156,10 +157,10 @@ reset_rir(void) { static const char *port = DEFAULT_PORT; static const char *choose_server(char *); -static struct addrinfo *gethostinfo(char const *host, int exitnoname); +static struct addrinfo *gethostinfo(const char *, const char *, int); static void s_asprintf(char **ret, const char *format, ...) __printflike(2, 3); static void usage(void); -static void whois(const char *, const char *, int); +static void whois(const char *, const char *, const char *, int); int main(int argc, char *argv[]) @@ -255,11 +256,11 @@ main(int argc, char *argv[]) if (country != NULL) { char *qnichost; s_asprintf(&qnichost, "%s%s", country, QNICHOST_TAIL); - whois(*argv, qnichost, flags); + whois(*argv, qnichost, port, flags); free(qnichost); } else whois(*argv, host != NULL ? host : - choose_server(*argv), flags); + choose_server(*argv), port, flags); reset_rir(); argv++; } @@ -283,7 +284,7 @@ choose_server(char *domain) } static struct addrinfo * -gethostinfo(char const *host, int exit_on_noname) +gethostinfo(const char *host, const char *hport, int exit_on_noname) { struct addrinfo hints, *res; int error; @@ -293,7 +294,7 @@ gethostinfo(char const *host, int exit_on_noname) hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; res = NULL; - error = getaddrinfo(host, port, &hints, &res); + error = getaddrinfo(host, hport, &hints, &res); if (error && (exit_on_noname || error != EAI_NONAME)) err(EX_NOHOST, "%s: %s", host, gai_strerror(error)); return (res); @@ -444,15 +445,15 @@ done: } static void -whois(const char *query, const char *hostname, int flags) +whois(const char *query, const char *hostname, const char *hostport, int flags) { FILE *fp; struct addrinfo *hostres; - char *buf, *host, *nhost, *p; + char *buf, *host, *nhost, *nport, *p; int comment, s, f; size_t len, i; - hostres = gethostinfo(hostname, 1); + hostres = gethostinfo(hostname, hostport, 1); s = connect_to_any_host(hostres); if (s == -1) err(EX_OSERR, "connect()"); @@ -532,14 +533,35 @@ whois(const char *query, const char *hostname, int fla SCAN(p, buf+len, *p == ' '); host = p; SCAN(p, buf+len, ishost(*p)); - if (p > host) + if (p > host) { + char *pstr; + s_asprintf(&nhost, "%.*s", (int)(p - host), host); + + if (*p != ':') { + s_asprintf(&nport, "%s", port); + break; + } + + pstr = ++p; + SCAN(p, buf+len, isdigit(*p)); + if (p > pstr && (p - pstr) < 6) { + s_asprintf(&nport, "%.*s", + (int)(p - pstr), pstr); + break; + } + + /* Invalid port; don't recurse */ + free(nhost); + nhost = NULL; + } break; } for (i = 0; actually_arin[i] != NULL; i++) { if (strncmp(buf, actually_arin[i], len) == 0) { s_asprintf(&nhost, "%s", ANICHOST); + s_asprintf(&nport, "%s", port); break; } } @@ -565,17 +587,19 @@ whois(const char *query, const char *hostname, int fla /* Do we need to find an alternative RIR? */ if (try_rir[i].loop != 0 && nhost != NULL && strcasecmp(try_rir[i].host, nhost) == 0) { - free(nhost); - nhost = NULL; - f = 1; + free(nhost); + nhost = NULL; + free(nport); + nport = NULL; + f = 1; } } if (f) { /* Find a replacement RIR */ for (i = 0; try_rir[i].host != NULL; i++) { if (try_rir[i].loop == 0) { - s_asprintf(&nhost, "%s", - try_rir[i].host); + s_asprintf(&nhost, "%s", try_rir[i].host); + s_asprintf(&nport, "%s", port); break; } } @@ -584,9 +608,10 @@ whois(const char *query, const char *hostname, int fla /* Ignore self-referrals */ if (strcasecmp(hostname, nhost) != 0) { printf("# %s\n\n", nhost); - whois(query, nhost, flags); + whois(query, nhost, nport, flags); } free(nhost); + free(nport); } } From owner-svn-src-all@freebsd.org Thu Jul 9 17:42:32 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0BDB6351581; Thu, 9 Jul 2020 17:42:32 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2k5g6YHMz4LqK; Thu, 9 Jul 2020 17:42:31 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C5A3814C9F; Thu, 9 Jul 2020 17:42:31 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069HgV4t023726; Thu, 9 Jul 2020 17:42:31 GMT (envelope-from jilles@FreeBSD.org) Received: (from jilles@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069HgVxq023725; Thu, 9 Jul 2020 17:42:31 GMT (envelope-from jilles@FreeBSD.org) Message-Id: <202007091742.069HgVxq023725@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jilles set sender to jilles@FreeBSD.org using -f From: Jilles Tjoelker Date: Thu, 9 Jul 2020 17:42:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363053 - stable/12/bin/sh/tests/execution X-SVN-Group: stable-12 X-SVN-Commit-Author: jilles X-SVN-Commit-Paths: stable/12/bin/sh/tests/execution X-SVN-Commit-Revision: 363053 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 17:42:32 -0000 Author: jilles Date: Thu Jul 9 17:42:31 2020 New Revision: 363053 URL: https://svnweb.freebsd.org/changeset/base/363053 Log: MFC r362737: sh/tests: Fix flaky execution/bg12.0 When job control is not enabled, the shell ignores SIGINT while waiting for a foreground process unless that process exits on SIGINT. In this case, the foreground process is sleep and it does not exit on SIGINT because the signal is only sent to the shell. Depending on order of events, this could cause the SIGINT to be unexpectedly ignored. On lightly loaded bare metal, the chance of this happening tends to be less than 0.01% but with higher loads and/or virtualization it becomes more likely. Starting the sleep in background and using the wait builtin ensures SIGINT will not be ignored. PR: 247559 Reported by: lwhsu Modified: stable/12/bin/sh/tests/execution/bg12.0 Directory Properties: stable/12/ (props changed) Modified: stable/12/bin/sh/tests/execution/bg12.0 ============================================================================== --- stable/12/bin/sh/tests/execution/bg12.0 Thu Jul 9 17:27:14 2020 (r363052) +++ stable/12/bin/sh/tests/execution/bg12.0 Thu Jul 9 17:42:31 2020 (r363053) @@ -4,7 +4,7 @@ T=`mktemp -d ${TMPDIR:-/tmp}/sh-test.XXXXXXXX` trap 'rm -rf $T' 0 cd $T || exit 3 mkfifo fifo1 -{ trap - INT; : >fifo1; sleep 5; exit 4; } & +{ trap - INT; : >fifo1; sleep 5 & wait; exit 4; } & : Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B1F3B351529; Thu, 9 Jul 2020 17:43:25 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2k6j4JNKz4LhB; Thu, 9 Jul 2020 17:43:25 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7716D14E9E; Thu, 9 Jul 2020 17:43:25 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069HhPEI023833; Thu, 9 Jul 2020 17:43:25 GMT (envelope-from jilles@FreeBSD.org) Received: (from jilles@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069HhP35023832; Thu, 9 Jul 2020 17:43:25 GMT (envelope-from jilles@FreeBSD.org) Message-Id: <202007091743.069HhP35023832@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jilles set sender to jilles@FreeBSD.org using -f From: Jilles Tjoelker Date: Thu, 9 Jul 2020 17:43:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363054 - stable/12/bin/sh/tests X-SVN-Group: stable-12 X-SVN-Commit-Author: jilles X-SVN-Commit-Paths: stable/12/bin/sh/tests X-SVN-Commit-Revision: 363054 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 17:43:25 -0000 Author: jilles Date: Thu Jul 9 17:43:25 2020 New Revision: 363054 URL: https://svnweb.freebsd.org/changeset/base/363054 Log: MFC r362738: sh/tests: Re-enable bin.sh.execution.functional_test.bg12.0 PR: 247559 Modified: stable/12/bin/sh/tests/functional_test.sh Directory Properties: stable/12/ (props changed) Modified: stable/12/bin/sh/tests/functional_test.sh ============================================================================== --- stable/12/bin/sh/tests/functional_test.sh Thu Jul 9 17:42:31 2020 (r363053) +++ stable/12/bin/sh/tests/functional_test.sh Thu Jul 9 17:43:25 2020 (r363054) @@ -27,7 +27,6 @@ # $FreeBSD$ SRCDIR=$(atf_get_srcdir) -CATEGORY=$(basename ${SRCDIR}) check() { @@ -61,20 +60,7 @@ add_testcase() esac atf_test_case ${tc_escaped} - - if [ "$(atf_config_get ci false)" = "true" ]; then - case "${CATEGORY}/${tc}" in - execution/bg12.0) - eval "${tc_escaped}_body() { atf_skip 'https://bugs.freebsd.org/247559'; }" - ;; - *) - eval "${tc_escaped}_body() { check ${tc}; }" - ;; - esac - else - eval "${tc_escaped}_body() { check ${tc}; }" - fi - + eval "${tc_escaped}_body() { check ${tc}; }" atf_add_test_case ${tc_escaped} } From owner-svn-src-all@freebsd.org Thu Jul 9 18:34:55 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 35C5F352C73; Thu, 9 Jul 2020 18:34:55 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2lG70S9cz4TDx; Thu, 9 Jul 2020 18:34:55 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E280D1584B; Thu, 9 Jul 2020 18:34:54 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069IYsPf059804; Thu, 9 Jul 2020 18:34:54 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069IYsmL059802; Thu, 9 Jul 2020 18:34:54 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007091834.069IYsmL059802@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Thu, 9 Jul 2020 18:34:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363055 - in head: lib/libc/sys sys/kern X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: in head: lib/libc/sys sys/kern X-SVN-Commit-Revision: 363055 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 18:34:55 -0000 Author: markj Date: Thu Jul 9 18:34:54 2020 New Revision: 363055 URL: https://svnweb.freebsd.org/changeset/base/363055 Log: Apply the logic from r363051 to semctl(2) and __sem_base field. Reported by: Jeffball MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D25600 Modified: head/lib/libc/sys/semctl.2 head/sys/kern/sysv_sem.c Modified: head/lib/libc/sys/semctl.2 ============================================================================== --- head/lib/libc/sys/semctl.2 Thu Jul 9 17:43:25 2020 (r363054) +++ head/lib/libc/sys/semctl.2 Thu Jul 9 18:34:54 2020 (r363055) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 23, 2018 +.Dd July 9, 2020 .Dt SEMCTL 2 .Os .Sh NAME @@ -148,7 +148,6 @@ is defined as follows: .Bd -literal struct semid_ds { struct ipc_perm sem_perm; /* operation permission struct */ - struct sem *__sem_base; /* kernel data, don't use */ u_short sem_nsems; /* number of sems in set */ time_t sem_otime; /* last operation time */ time_t sem_ctime; /* last change time */ Modified: head/sys/kern/sysv_sem.c ============================================================================== --- head/sys/kern/sysv_sem.c Thu Jul 9 17:43:25 2020 (r363054) +++ head/sys/kern/sysv_sem.c Thu Jul 9 18:34:54 2020 (r363055) @@ -798,6 +798,13 @@ kern_semctl(struct thread *td, int semid, int semnum, bcopy(&semakptr->u, arg->buf, sizeof(struct semid_ds)); if (cred->cr_prison != semakptr->cred->cr_prison) arg->buf->sem_perm.key = IPC_PRIVATE; + + /* + * Try to hide the fact that the structure layout is shared by + * both the kernel and userland. This pointer is not useful to + * userspace. + */ + arg->buf->__sem_base = NULL; break; case GETNCNT: From owner-svn-src-all@freebsd.org Thu Jul 9 19:11:58 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3CB903536CB; Thu, 9 Jul 2020 19:11:58 +0000 (UTC) (envelope-from mckusick@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2m4t0G8xz4VYV; Thu, 9 Jul 2020 19:11:58 +0000 (UTC) (envelope-from mckusick@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E06F115CEC; Thu, 9 Jul 2020 19:11:57 +0000 (UTC) (envelope-from mckusick@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069JBvKf082561; Thu, 9 Jul 2020 19:11:57 GMT (envelope-from mckusick@FreeBSD.org) Received: (from mckusick@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069JBvHe082549; Thu, 9 Jul 2020 19:11:57 GMT (envelope-from mckusick@FreeBSD.org) Message-Id: <202007091911.069JBvHe082549@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mckusick set sender to mckusick@FreeBSD.org using -f From: Kirk McKusick Date: Thu, 9 Jul 2020 19:11:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363056 - stable/12/lib/libufs X-SVN-Group: stable-12 X-SVN-Commit-Author: mckusick X-SVN-Commit-Paths: stable/12/lib/libufs X-SVN-Commit-Revision: 363056 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 19:11:58 -0000 Author: mckusick Date: Thu Jul 9 19:11:57 2020 New Revision: 363056 URL: https://svnweb.freebsd.org/changeset/base/363056 Log: MFC of 362560 Correctly describe libufs library sbget() and sbput() return values. Modified: stable/12/lib/libufs/sbread.3 Directory Properties: stable/12/ (props changed) Modified: stable/12/lib/libufs/sbread.3 ============================================================================== --- stable/12/lib/libufs/sbread.3 Thu Jul 9 18:34:54 2020 (r363055) +++ stable/12/lib/libufs/sbread.3 Thu Jul 9 19:11:57 2020 (r363056) @@ -109,28 +109,30 @@ function will write to all the alternate superblock lo .Fa all value is non-zero. .Sh RETURN VALUES -.Rv -std sbget sbput sbread sbwrite -.Sh ERRORS +.Rv -std sbread sbwrite The .Fn sbget and +.Fn sbput +functions return the value 0 if successful; +otherwise they return one of the errors described below. +.Sh ERRORS +The errors returned by +.Fn sbget +and .Fn sbread -functions may fail and set -.Va errno -for any of the errors specified for the library function +include any of the errors specified for the library function .Xr bread 3 . -Additionally, it may follow the +Additionally, they may follow the .Xr libufs 3 error methodologies in situations where no usable superblock could be found. .Pp -The +The errors returned by .Fn sbput and .Fn sbwrite -functions may fail and set -.Va errno -for any of the errors specified for the library function +include any of the errors specified for the library function .Xr bwrite 3 . .Sh SEE ALSO .Xr bread 3 , From owner-svn-src-all@freebsd.org Thu Jul 9 20:53:56 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D5675356283; Thu, 9 Jul 2020 20:53:56 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2pLX583xz4cMV; Thu, 9 Jul 2020 20:53:56 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 93F7C171B1; Thu, 9 Jul 2020 20:53:56 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069KruJj047188; Thu, 9 Jul 2020 20:53:56 GMT (envelope-from jilles@FreeBSD.org) Received: (from jilles@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069KruGl047187; Thu, 9 Jul 2020 20:53:56 GMT (envelope-from jilles@FreeBSD.org) Message-Id: <202007092053.069KruGl047187@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jilles set sender to jilles@FreeBSD.org using -f From: Jilles Tjoelker Date: Thu, 9 Jul 2020 20:53:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363057 - head/bin/sh X-SVN-Group: head X-SVN-Commit-Author: jilles X-SVN-Commit-Paths: head/bin/sh X-SVN-Commit-Revision: 363057 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 20:53:56 -0000 Author: jilles Date: Thu Jul 9 20:53:56 2020 New Revision: 363057 URL: https://svnweb.freebsd.org/changeset/base/363057 Log: sh: Do not ignore INTOFF during a trap INTOFF postpones SIGINT processing and INTON enables it again. This is important so an interactive shell can return to the top level prompt when Ctrl+C is pressed. Given that INTON is automatically done when a builtin completes, the part where onsig() ignores suppressint when in_dotrap is true is both unnecessary and unsafe. If the trap is for some other signal than SIGINT, arbitrary code could have been interrupted. Historically, INTOFF remained in effect for longer. Reviewed by: bdrewery MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D25270 Modified: head/bin/sh/trap.c Modified: head/bin/sh/trap.c ============================================================================== --- head/bin/sh/trap.c Thu Jul 9 19:11:57 2020 (r363056) +++ head/bin/sh/trap.c Thu Jul 9 20:53:56 2020 (r363057) @@ -382,12 +382,7 @@ onsig(int signo) { if (signo == SIGINT && trap[SIGINT] == NULL) { - /* - * The !in_dotrap here is safe. The only way we can arrive - * here with in_dotrap set is that a trap handler set SIGINT to - * SIG_DFL and killed itself. - */ - if (suppressint && !in_dotrap) + if (suppressint) SET_PENDING_INT; else onint(); From owner-svn-src-all@freebsd.org Thu Jul 9 20:54:17 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id EEE27355E73; Thu, 9 Jul 2020 20:54:17 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2pLx62J5z4cSx; Thu, 9 Jul 2020 20:54:17 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 985F517311; Thu, 9 Jul 2020 20:54:17 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069KsHgw047256; Thu, 9 Jul 2020 20:54:17 GMT (envelope-from kaktus@FreeBSD.org) Received: (from kaktus@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069KsH9S047255; Thu, 9 Jul 2020 20:54:17 GMT (envelope-from kaktus@FreeBSD.org) Message-Id: <202007092054.069KsH9S047255@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kaktus set sender to kaktus@FreeBSD.org using -f From: Pawel Biernacki Date: Thu, 9 Jul 2020 20:54:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363058 - stable/12/usr.sbin/bhyve X-SVN-Group: stable-12 X-SVN-Commit-Author: kaktus X-SVN-Commit-Paths: stable/12/usr.sbin/bhyve X-SVN-Commit-Revision: 363058 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 20:54:18 -0000 Author: kaktus Date: Thu Jul 9 20:54:16 2020 New Revision: 363058 URL: https://svnweb.freebsd.org/changeset/base/363058 Log: MFC r362612 bhyve: allow for automatic destruction on power-off Modified: stable/12/usr.sbin/bhyve/bhyve.8 stable/12/usr.sbin/bhyve/bhyverun.c Modified: stable/12/usr.sbin/bhyve/bhyve.8 ============================================================================== --- stable/12/usr.sbin/bhyve/bhyve.8 Thu Jul 9 20:53:56 2020 (r363057) +++ stable/12/usr.sbin/bhyve/bhyve.8 Thu Jul 9 20:54:16 2020 (r363058) @@ -113,6 +113,8 @@ If a is specified more than once the last one has precedence. .It Fl C Include guest memory in core file. +.It Fl D +Destroy the VM on guest initiated power-off. .It Fl e Force .Nm Modified: stable/12/usr.sbin/bhyve/bhyverun.c ============================================================================== --- stable/12/usr.sbin/bhyve/bhyverun.c Thu Jul 9 20:53:56 2020 (r363057) +++ stable/12/usr.sbin/bhyve/bhyverun.c Thu Jul 9 20:54:16 2020 (r363058) @@ -173,6 +173,7 @@ static int gdb_port = 0; static int guest_vmexit_on_hlt, guest_vmexit_on_pause; static int virtio_msix = 1; static int x2apic_mode = 0; /* default is xAPIC */ +static int destroy_on_poweroff = 0; static int strictio; static int strictmsr = 1; @@ -212,7 +213,7 @@ usage(int code) { fprintf(stderr, - "Usage: %s [-abehuwxACHPSWY]\n" + "Usage: %s [-abehuwxACDHPSWY]\n" " %*s [-c [[cpus=]numcpus][,sockets=n][,cores=n][,threads=n]]\n" " %*s [-g ] [-l ]\n" " %*s [-m mem] [-p vcpu:hostcpu] [-s ] [-U uuid] \n" @@ -220,6 +221,7 @@ usage(int code) " -A: create ACPI tables\n" " -c: number of cpus and/or topology specification\n" " -C: include guest memory in core file\n" + " -D: destroy on power-off\n" " -e: exit on unhandled I/O access\n" " -g: gdb port\n" " -h: help\n" @@ -761,6 +763,8 @@ vmexit_suspend(struct vmctx *ctx, struct vm_exit *vmex case VM_SUSPEND_RESET: exit(0); case VM_SUSPEND_POWEROFF: + if (destroy_on_poweroff) + vm_destroy(ctx); exit(1); case VM_SUSPEND_HALT: exit(2); @@ -1021,7 +1025,7 @@ main(int argc, char *argv[]) rtc_localtime = 1; memflags = 0; - optstr = "abehuwxACHIPSWYp:g:G:c:s:m:l:U:"; + optstr = "abehuwxACDHIPSWYp:g:G:c:s:m:l:U:"; while ((c = getopt(argc, argv, optstr)) != -1) { switch (c) { case 'a': @@ -1032,6 +1036,9 @@ main(int argc, char *argv[]) break; case 'b': bvmcons = 1; + break; + case 'D': + destroy_on_poweroff = 1; break; case 'p': if (pincpu_parse(optarg) != 0) { From owner-svn-src-all@freebsd.org Thu Jul 9 20:55:19 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 510A13562A3; Thu, 9 Jul 2020 20:55:19 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2pN71WrNz4cfC; Thu, 9 Jul 2020 20:55:19 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 17877174DC; Thu, 9 Jul 2020 20:55:19 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069KtIHK047390; Thu, 9 Jul 2020 20:55:18 GMT (envelope-from kaktus@FreeBSD.org) Received: (from kaktus@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069KtIP2047388; Thu, 9 Jul 2020 20:55:18 GMT (envelope-from kaktus@FreeBSD.org) Message-Id: <202007092055.069KtIP2047388@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kaktus set sender to kaktus@FreeBSD.org using -f From: Pawel Biernacki Date: Thu, 9 Jul 2020 20:55:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r363059 - stable/11/usr.sbin/bhyve X-SVN-Group: stable-11 X-SVN-Commit-Author: kaktus X-SVN-Commit-Paths: stable/11/usr.sbin/bhyve X-SVN-Commit-Revision: 363059 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 20:55:19 -0000 Author: kaktus Date: Thu Jul 9 20:55:18 2020 New Revision: 363059 URL: https://svnweb.freebsd.org/changeset/base/363059 Log: MFC r362612 bhyve: allow for automatic destruction on power-off Modified: stable/11/usr.sbin/bhyve/bhyve.8 stable/11/usr.sbin/bhyve/bhyverun.c Modified: stable/11/usr.sbin/bhyve/bhyve.8 ============================================================================== --- stable/11/usr.sbin/bhyve/bhyve.8 Thu Jul 9 20:54:16 2020 (r363058) +++ stable/11/usr.sbin/bhyve/bhyve.8 Thu Jul 9 20:55:18 2020 (r363059) @@ -112,6 +112,8 @@ If a is specified more than once the last one has precedence. .It Fl C Include guest memory in core file. +.It Fl D +Destroy the VM on guest initiated power-off. .It Fl e Force .Nm Modified: stable/11/usr.sbin/bhyve/bhyverun.c ============================================================================== --- stable/11/usr.sbin/bhyve/bhyverun.c Thu Jul 9 20:54:16 2020 (r363058) +++ stable/11/usr.sbin/bhyve/bhyverun.c Thu Jul 9 20:55:18 2020 (r363059) @@ -171,6 +171,7 @@ char *guest_uuid_str; static int guest_vmexit_on_hlt, guest_vmexit_on_pause; static int virtio_msix = 1; static int x2apic_mode = 0; /* default is xAPIC */ +static int destroy_on_poweroff = 0; static int strictio; static int strictmsr = 1; @@ -210,7 +211,7 @@ usage(int code) { fprintf(stderr, - "Usage: %s [-abehuwxACHPSWY]\n" + "Usage: %s [-abehuwxACDHPSWY]\n" " %*s [-c [[cpus=]numcpus][,sockets=n][,cores=n][,threads=n]]\n" " %*s [-g ] [-l ]\n" " %*s [-m mem] [-p vcpu:hostcpu] [-s ] [-U uuid] \n" @@ -218,6 +219,7 @@ usage(int code) " -A: create ACPI tables\n" " -c: number of cpus and/or topology specification\n" " -C: include guest memory in core file\n" + " -D: destroy on power-off\n" " -e: exit on unhandled I/O access\n" " -g: gdb port\n" " -h: help\n" @@ -788,6 +790,8 @@ vmexit_suspend(struct vmctx *ctx, struct vm_exit *vmex case VM_SUSPEND_RESET: exit(0); case VM_SUSPEND_POWEROFF: + if (destroy_on_poweroff) + vm_destroy(ctx); exit(1); case VM_SUSPEND_HALT: exit(2); @@ -1021,7 +1025,7 @@ main(int argc, char *argv[]) rtc_localtime = 1; memflags = 0; - optstr = "abehuwxACHIPSWYp:g:c:s:m:l:U:"; + optstr = "abehuwxACDHIPSWYp:g:c:s:m:l:U:"; while ((c = getopt(argc, argv, optstr)) != -1) { switch (c) { case 'a': @@ -1032,6 +1036,9 @@ main(int argc, char *argv[]) break; case 'b': bvmcons = 1; + break; + case 'D': + destroy_on_poweroff = 1; break; case 'p': if (pincpu_parse(optarg) != 0) { From owner-svn-src-all@freebsd.org Thu Jul 9 22:38:38 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 468E93581DF; Thu, 9 Jul 2020 22:38:38 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2rgL16bTz3Vg3; Thu, 9 Jul 2020 22:38:38 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 05DEB18708; Thu, 9 Jul 2020 22:38:38 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069McbKA014231; Thu, 9 Jul 2020 22:38:37 GMT (envelope-from scottl@FreeBSD.org) Received: (from scottl@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069McbU4014226; Thu, 9 Jul 2020 22:38:37 GMT (envelope-from scottl@FreeBSD.org) Message-Id: <202007092238.069McbU4014226@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: scottl set sender to scottl@FreeBSD.org using -f From: Scott Long Date: Thu, 9 Jul 2020 22:38:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363060 - in head: stand/defaults sys/amd64/amd64 sys/powerpc/aim sys/vm X-SVN-Group: head X-SVN-Commit-Author: scottl X-SVN-Commit-Paths: in head: stand/defaults sys/amd64/amd64 sys/powerpc/aim sys/vm X-SVN-Commit-Revision: 363060 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 22:38:38 -0000 Author: scottl Date: Thu Jul 9 22:38:36 2020 New Revision: 363060 URL: https://svnweb.freebsd.org/changeset/base/363060 Log: Revert r362998, r326999 while a better compatibility strategy is devised. Modified: head/stand/defaults/loader.conf head/sys/amd64/amd64/pmap.c head/sys/powerpc/aim/mmu_radix.c head/sys/vm/vm_page.c head/sys/vm/vm_page.h Modified: head/stand/defaults/loader.conf ============================================================================== --- head/stand/defaults/loader.conf Thu Jul 9 20:55:18 2020 (r363059) +++ head/stand/defaults/loader.conf Thu Jul 9 22:38:36 2020 (r363060) @@ -53,7 +53,7 @@ entropy_cache_type="boot_entropy_cache" # Required for ram_excludelist_load="NO" # Set this to YES to load a file # containing a list of addresses to # exclude from the running system. -ram_excludelist_name="/boot/excludelist.txt" # Set this to the name of the file +ram_excludeist_name="/boot/excludelist.txt" # Set this to the name of the file ram_excludelist_type="ram_excludelist" # Required for the kernel to find # the blacklist module Modified: head/sys/amd64/amd64/pmap.c ============================================================================== --- head/sys/amd64/amd64/pmap.c Thu Jul 9 20:55:18 2020 (r363059) +++ head/sys/amd64/amd64/pmap.c Thu Jul 9 22:38:36 2020 (r363060) @@ -2060,7 +2060,7 @@ pmap_init(void) int error, i, ret, skz63; /* L1TF, reserve page @0 unconditionally */ - vm_page_excludelist_add(0, bootverbose); + vm_page_blacklist_add(0, bootverbose); /* Detect bare-metal Skylake Server and Skylake-X. */ if (vm_guest == VM_GUEST_NO && cpu_vendor_id == CPU_VENDOR_INTEL && @@ -2081,7 +2081,7 @@ pmap_init(void) printf("SKZ63: skipping 4M RAM starting " "at physical 1G\n"); for (i = 0; i < atop(0x400000); i++) { - ret = vm_page_excludelist_add(0x40000000 + + ret = vm_page_blacklist_add(0x40000000 + ptoa(i), FALSE); if (!ret && bootverbose) printf("page at %#lx already used\n", Modified: head/sys/powerpc/aim/mmu_radix.c ============================================================================== --- head/sys/powerpc/aim/mmu_radix.c Thu Jul 9 20:55:18 2020 (r363059) +++ head/sys/powerpc/aim/mmu_radix.c Thu Jul 9 22:38:36 2020 (r363060) @@ -3557,7 +3557,7 @@ mmu_radix_init() int error, i, pv_npg; /* L1TF, reserve page @0 unconditionally */ - vm_page_excludelist_add(0, bootverbose); + vm_page_blacklist_add(0, bootverbose); zone_radix_pgd = uma_zcache_create("radix_pgd_cache", RADIX_PGD_SIZE, NULL, NULL, Modified: head/sys/vm/vm_page.c ============================================================================== --- head/sys/vm/vm_page.c Thu Jul 9 20:55:18 2020 (r363059) +++ head/sys/vm/vm_page.c Thu Jul 9 22:38:36 2020 (r363060) @@ -155,11 +155,10 @@ vm_page_t vm_page_array; long vm_page_array_size; long first_page; -static TAILQ_HEAD(, vm_page) excludelist_head; -static int sysctl_vm_page_excludelist(SYSCTL_HANDLER_ARGS); -SYSCTL_PROC(_vm, OID_AUTO, page_excludelist, CTLTYPE_STRING | CTLFLAG_RD | - CTLFLAG_MPSAFE, NULL, 0, sysctl_vm_page_excludelist, "A", - "Blacklist pages"); +static TAILQ_HEAD(, vm_page) blacklist_head; +static int sysctl_vm_page_blacklist(SYSCTL_HANDLER_ARGS); +SYSCTL_PROC(_vm, OID_AUTO, page_blacklist, CTLTYPE_STRING | CTLFLAG_RD | + CTLFLAG_MPSAFE, NULL, 0, sysctl_vm_page_blacklist, "A", "Blacklist pages"); static uma_zone_t fakepg_zone; @@ -259,16 +258,16 @@ vm_set_page_size(void) } /* - * vm_page_excludelist_next: + * vm_page_blacklist_next: * - * Find the next entry in the provided string of excludelist + * Find the next entry in the provided string of blacklist * addresses. Entries are separated by space, comma, or newline. * If an invalid integer is encountered then the rest of the * string is skipped. Updates the list pointer to the next * character, or NULL if the string is exhausted or invalid. */ static vm_paddr_t -vm_page_excludelist_next(char **list, char *end) +vm_page_blacklist_next(char **list, char *end) { vm_paddr_t bad; char *cp, *pos; @@ -315,13 +314,13 @@ vm_page_excludelist_next(char **list, char *end) *list = cp; return (trunc_page(bad)); } - printf("Garbage in RAM excludelist, skipping\n"); + printf("Garbage in RAM blacklist, skipping\n"); *list = NULL; return (0); } bool -vm_page_excludelist_add(vm_paddr_t pa, bool verbose) +vm_page_blacklist_add(vm_paddr_t pa, bool verbose) { struct vm_domain *vmd; vm_page_t m; @@ -337,7 +336,7 @@ vm_page_excludelist_add(vm_paddr_t pa, bool verbose) vm_domain_free_unlock(vmd); if (ret != 0) { vm_domain_freecnt_inc(vmd, -1); - TAILQ_INSERT_TAIL(&excludelist_head, m, listq); + TAILQ_INSERT_TAIL(&blacklist_head, m, listq); if (verbose) printf("Skipping page with pa 0x%jx\n", (uintmax_t)pa); } @@ -345,35 +344,35 @@ vm_page_excludelist_add(vm_paddr_t pa, bool verbose) } /* - * vm_page_excludelist_check: + * vm_page_blacklist_check: * - * Iterate through the provided string of excludelist addresses, pulling + * Iterate through the provided string of blacklist addresses, pulling * each entry out of the physical allocator free list and putting it - * onto a list for reporting via the vm.page_excludelist sysctl. + * onto a list for reporting via the vm.page_blacklist sysctl. */ static void -vm_page_excludelist_check(char *list, char *end) +vm_page_blacklist_check(char *list, char *end) { vm_paddr_t pa; char *next; next = list; while (next != NULL) { - if ((pa = vm_page_excludelist_next(&next, end)) == 0) + if ((pa = vm_page_blacklist_next(&next, end)) == 0) continue; - vm_page_excludelist_add(pa, bootverbose); + vm_page_blacklist_add(pa, bootverbose); } } /* - * vm_page_excludelist_load: + * vm_page_blacklist_load: * - * Search for a special module named "ram_excludelist". It'll be a + * Search for a special module named "ram_blacklist". It'll be a * plain text file provided by the user via the loader directive * of the same name. */ static void -vm_page_excludelist_load(char **list, char **end) +vm_page_blacklist_load(char **list, char **end) { void *mod; u_char *ptr; @@ -382,7 +381,7 @@ vm_page_excludelist_load(char **list, char **end) mod = NULL; ptr = NULL; - mod = preload_search_by_type("ram_excludelist"); + mod = preload_search_by_type("ram_blacklist"); if (mod != NULL) { ptr = preload_fetch_addr(mod); len = preload_fetch_size(mod); @@ -396,7 +395,7 @@ vm_page_excludelist_load(char **list, char **end) } static int -sysctl_vm_page_excludelist(SYSCTL_HANDLER_ARGS) +sysctl_vm_page_blacklist(SYSCTL_HANDLER_ARGS) { vm_page_t m; struct sbuf sbuf; @@ -407,7 +406,7 @@ sysctl_vm_page_excludelist(SYSCTL_HANDLER_ARGS) if (error != 0) return (error); sbuf_new_for_sysctl(&sbuf, NULL, 128, req); - TAILQ_FOREACH(m, &excludelist_head, listq) { + TAILQ_FOREACH(m, &blacklist_head, listq) { sbuf_printf(&sbuf, "%s%#jx", first ? "" : ",", (uintmax_t)m->phys_addr); first = 0; @@ -794,14 +793,14 @@ vm_page_startup(vm_offset_t vaddr) } /* - * Remove excludelisted pages from the physical memory allocator. + * Remove blacklisted pages from the physical memory allocator. */ - TAILQ_INIT(&excludelist_head); - vm_page_excludelist_load(&list, &listend); - vm_page_excludelist_check(list, listend); + TAILQ_INIT(&blacklist_head); + vm_page_blacklist_load(&list, &listend); + vm_page_blacklist_check(list, listend); - list = kern_getenv("vm.excludelist"); - vm_page_excludelist_check(list, NULL); + list = kern_getenv("vm.blacklist"); + vm_page_blacklist_check(list, NULL); freeenv(list); #if VM_NRESERVLEVEL > 0 Modified: head/sys/vm/vm_page.h ============================================================================== --- head/sys/vm/vm_page.h Thu Jul 9 20:55:18 2020 (r363059) +++ head/sys/vm/vm_page.h Thu Jul 9 22:38:36 2020 (r363060) @@ -613,7 +613,7 @@ vm_page_t vm_page_alloc_contig_domain(vm_object_t obje vm_page_t vm_page_alloc_freelist(int, int); vm_page_t vm_page_alloc_freelist_domain(int, int, int); void vm_page_bits_set(vm_page_t m, vm_page_bits_t *bits, vm_page_bits_t set); -bool vm_page_excludelist_add(vm_paddr_t pa, bool verbose); +bool vm_page_blacklist_add(vm_paddr_t pa, bool verbose); vm_page_t vm_page_grab(vm_object_t, vm_pindex_t, int); vm_page_t vm_page_grab_unlocked(vm_object_t, vm_pindex_t, int); int vm_page_grab_pages(vm_object_t object, vm_pindex_t pindex, int allocflags, From owner-svn-src-all@freebsd.org Thu Jul 9 22:54:18 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 39A5435892E; Thu, 9 Jul 2020 22:54:18 +0000 (UTC) (envelope-from oliver.pntr@gmail.com) Received: from mail-yb1-xb31.google.com (mail-yb1-xb31.google.com [IPv6:2607:f8b0:4864:20::b31]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2s1P6K48z3WKF; Thu, 9 Jul 2020 22:54:17 +0000 (UTC) (envelope-from oliver.pntr@gmail.com) Received: by mail-yb1-xb31.google.com with SMTP id 133so1771435ybu.7; Thu, 09 Jul 2020 15:54:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=Oim7yTt5GoujOZiP87SE5YHfxZInGp2WTFnAeolgfJ4=; b=tNehUkknyL1jxdcPDSmSgNiOrK+nMaps36M3bdPRt/SZtTuPArM2XQEb75oMrhLMxt pyGLaH49hyWyaaSSCC4cq5szyLZLE/wP5DgiRLD0tkiONP6ySCWa1l/89+HWYG4nhXs3 PYFkP4yCFBTP5mXnwE82uZpxS0UhG+55Z3hceIRrpWBlfZmoYBSAs/AQ5j77eCszXb4Z YfkuAYzBLFKpeEFMgWm0ufBZGAIDNz2NbAsmXKkl6J0drXIwE7+Xu7Cu9I57YouJTB/U D3BMZNSDs5oQbWeglN5tn6trpU8d4rcZrGMoWcBqpDfnYf61uhDZmaL3UJyaIU8T1sDn 5sWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Oim7yTt5GoujOZiP87SE5YHfxZInGp2WTFnAeolgfJ4=; b=rb1F7AepA4BWyHZXzRdWAjqrDzRdx3UZAYRMt033m2N7WgTmrJAf74k8KYQ5tEqX4I ts98PQ+cakE8EVyzxgkWfrAuGfHvW30f/RDxlPqJWt3QIW3uEcJe8YUEyYOJWMXlX6tl jTII3tOVJfX5nG4XsV8uf+OCGkrubCy5CH0WtMgO6iZYq2T0Z+v6ZMQ9DwsSMCcL0Yh6 cwwiusslGJdqJPQ10YNA2J0lkaP8t69Y1ke9ExitvlHlXACY2feGNqFFgipcO2gelw/A 8Hq2bVkYXdCJZgRHt8IJEizQVGNGzdcGVozExK8Qr9ic4W/MegefSa+J5WOAnmO1dsUB SyyA== X-Gm-Message-State: AOAM530O7wod1fiwbhRlHK1vX+RK8bpDnw85+mNRGBJU0zQtZ0QRBBzG z0Ea68QC2Z8UPBBHrRuqJfI0zDHwFn1Et6mEfK7F6w== X-Google-Smtp-Source: ABdhPJxMoOqBctqQJT1cYFo4ZcNXpgp60X2V3utboZEEAemYDXnsNIaN2aiFuaBuh2sHUYPRCVyZDRKPBdgJL5mW9IQ= X-Received: by 2002:a25:d843:: with SMTP id p64mr44987852ybg.68.1594335255868; Thu, 09 Jul 2020 15:54:15 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a5b:30b:0:0:0:0:0 with HTTP; Thu, 9 Jul 2020 15:54:15 -0700 (PDT) In-Reply-To: <202007092238.069McbU4014226@repo.freebsd.org> References: <202007092238.069McbU4014226@repo.freebsd.org> From: Oliver Pinter Date: Fri, 10 Jul 2020 00:54:15 +0200 Message-ID: Subject: Re: svn commit: r363060 - in head: stand/defaults sys/amd64/amd64 sys/powerpc/aim sys/vm To: Scott Long Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" X-Rspamd-Queue-Id: 4B2s1P6K48z3WKF X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; TAGGED_FROM(0.00)[]; REPLY(-4.00)[] Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.33 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 22:54:18 -0000 On Friday, July 10, 2020, Scott Long wrote: > Author: scottl > Date: Thu Jul 9 22:38:36 2020 > New Revision: 363060 > URL: https://svnweb.freebsd.org/changeset/base/363060 > > Log: > Revert r362998, r326999 while a better compatibility strategy is devised. > > Modified: > head/stand/defaults/loader.conf > head/sys/amd64/amd64/pmap.c > head/sys/powerpc/aim/mmu_radix.c > head/sys/vm/vm_page.c > head/sys/vm/vm_page.h > > Modified: head/stand/defaults/loader.conf > ============================================================ > ================== > --- head/stand/defaults/loader.conf Thu Jul 9 20:55:18 2020 > (r363059) > +++ head/stand/defaults/loader.conf Thu Jul 9 22:38:36 2020 > (r363060) > @@ -53,7 +53,7 @@ entropy_cache_type="boot_entropy_cache" # > Required for > ram_excludelist_load="NO" # Set this to YES to load a file > # containing a list of addresses to > # exclude from the running system. > -ram_excludelist_name="/boot/excludelist.txt" # Set this to the name of > the file > +ram_excludeist_name="/boot/excludelist.txt" # Set this to the name of > the file Hi! This part of the revert seems still broken. > ram_excludelist_type="ram_excludelist" # Required for the kernel to find > # the blacklist module > > > Modified: head/sys/amd64/amd64/pmap.c > ============================================================ > ================== > --- head/sys/amd64/amd64/pmap.c Thu Jul 9 20:55:18 2020 (r363059) > +++ head/sys/amd64/amd64/pmap.c Thu Jul 9 22:38:36 2020 (r363060) > @@ -2060,7 +2060,7 @@ pmap_init(void) > int error, i, ret, skz63; > > /* L1TF, reserve page @0 unconditionally */ > - vm_page_excludelist_add(0, bootverbose); > + vm_page_blacklist_add(0, bootverbose); > > /* Detect bare-metal Skylake Server and Skylake-X. */ > if (vm_guest == VM_GUEST_NO && cpu_vendor_id == CPU_VENDOR_INTEL && > @@ -2081,7 +2081,7 @@ pmap_init(void) > printf("SKZ63: skipping 4M RAM starting " > "at physical 1G\n"); > for (i = 0; i < atop(0x400000); i++) { > - ret = vm_page_excludelist_add(0x40000000 + > + ret = vm_page_blacklist_add(0x40000000 + > ptoa(i), FALSE); > if (!ret && bootverbose) > printf("page at %#lx already > used\n", > > Modified: head/sys/powerpc/aim/mmu_radix.c > ============================================================ > ================== > --- head/sys/powerpc/aim/mmu_radix.c Thu Jul 9 20:55:18 2020 > (r363059) > +++ head/sys/powerpc/aim/mmu_radix.c Thu Jul 9 22:38:36 2020 > (r363060) > @@ -3557,7 +3557,7 @@ mmu_radix_init() > int error, i, pv_npg; > > /* L1TF, reserve page @0 unconditionally */ > - vm_page_excludelist_add(0, bootverbose); > + vm_page_blacklist_add(0, bootverbose); > > zone_radix_pgd = uma_zcache_create("radix_pgd_cache", > RADIX_PGD_SIZE, NULL, NULL, > > Modified: head/sys/vm/vm_page.c > ============================================================ > ================== > --- head/sys/vm/vm_page.c Thu Jul 9 20:55:18 2020 (r363059) > +++ head/sys/vm/vm_page.c Thu Jul 9 22:38:36 2020 (r363060) > @@ -155,11 +155,10 @@ vm_page_t vm_page_array; > long vm_page_array_size; > long first_page; > > -static TAILQ_HEAD(, vm_page) excludelist_head; > -static int sysctl_vm_page_excludelist(SYSCTL_HANDLER_ARGS); > -SYSCTL_PROC(_vm, OID_AUTO, page_excludelist, CTLTYPE_STRING | CTLFLAG_RD | > - CTLFLAG_MPSAFE, NULL, 0, sysctl_vm_page_excludelist, "A", > - "Blacklist pages"); > +static TAILQ_HEAD(, vm_page) blacklist_head; > +static int sysctl_vm_page_blacklist(SYSCTL_HANDLER_ARGS); > +SYSCTL_PROC(_vm, OID_AUTO, page_blacklist, CTLTYPE_STRING | CTLFLAG_RD | > + CTLFLAG_MPSAFE, NULL, 0, sysctl_vm_page_blacklist, "A", "Blacklist > pages"); > > static uma_zone_t fakepg_zone; > > @@ -259,16 +258,16 @@ vm_set_page_size(void) > } > > /* > - * vm_page_excludelist_next: > + * vm_page_blacklist_next: > * > - * Find the next entry in the provided string of excludelist > + * Find the next entry in the provided string of blacklist > * addresses. Entries are separated by space, comma, or newline. > * If an invalid integer is encountered then the rest of the > * string is skipped. Updates the list pointer to the next > * character, or NULL if the string is exhausted or invalid. > */ > static vm_paddr_t > -vm_page_excludelist_next(char **list, char *end) > +vm_page_blacklist_next(char **list, char *end) > { > vm_paddr_t bad; > char *cp, *pos; > @@ -315,13 +314,13 @@ vm_page_excludelist_next(char **list, char *end) > *list = cp; > return (trunc_page(bad)); > } > - printf("Garbage in RAM excludelist, skipping\n"); > + printf("Garbage in RAM blacklist, skipping\n"); > *list = NULL; > return (0); > } > > bool > -vm_page_excludelist_add(vm_paddr_t pa, bool verbose) > +vm_page_blacklist_add(vm_paddr_t pa, bool verbose) > { > struct vm_domain *vmd; > vm_page_t m; > @@ -337,7 +336,7 @@ vm_page_excludelist_add(vm_paddr_t pa, bool verbose) > vm_domain_free_unlock(vmd); > if (ret != 0) { > vm_domain_freecnt_inc(vmd, -1); > - TAILQ_INSERT_TAIL(&excludelist_head, m, listq); > + TAILQ_INSERT_TAIL(&blacklist_head, m, listq); > if (verbose) > printf("Skipping page with pa 0x%jx\n", > (uintmax_t)pa); > } > @@ -345,35 +344,35 @@ vm_page_excludelist_add(vm_paddr_t pa, bool verbose) > } > > /* > - * vm_page_excludelist_check: > + * vm_page_blacklist_check: > * > - * Iterate through the provided string of excludelist addresses, > pulling > + * Iterate through the provided string of blacklist addresses, pulling > * each entry out of the physical allocator free list and putting it > - * onto a list for reporting via the vm.page_excludelist sysctl. > + * onto a list for reporting via the vm.page_blacklist sysctl. > */ > static void > -vm_page_excludelist_check(char *list, char *end) > +vm_page_blacklist_check(char *list, char *end) > { > vm_paddr_t pa; > char *next; > > next = list; > while (next != NULL) { > - if ((pa = vm_page_excludelist_next(&next, end)) == 0) > + if ((pa = vm_page_blacklist_next(&next, end)) == 0) > continue; > - vm_page_excludelist_add(pa, bootverbose); > + vm_page_blacklist_add(pa, bootverbose); > } > } > > /* > - * vm_page_excludelist_load: > + * vm_page_blacklist_load: > * > - * Search for a special module named "ram_excludelist". It'll be a > + * Search for a special module named "ram_blacklist". It'll be a > * plain text file provided by the user via the loader directive > * of the same name. > */ > static void > -vm_page_excludelist_load(char **list, char **end) > +vm_page_blacklist_load(char **list, char **end) > { > void *mod; > u_char *ptr; > @@ -382,7 +381,7 @@ vm_page_excludelist_load(char **list, char **end) > mod = NULL; > ptr = NULL; > > - mod = preload_search_by_type("ram_excludelist"); > + mod = preload_search_by_type("ram_blacklist"); > if (mod != NULL) { > ptr = preload_fetch_addr(mod); > len = preload_fetch_size(mod); > @@ -396,7 +395,7 @@ vm_page_excludelist_load(char **list, char **end) > } > > static int > -sysctl_vm_page_excludelist(SYSCTL_HANDLER_ARGS) > +sysctl_vm_page_blacklist(SYSCTL_HANDLER_ARGS) > { > vm_page_t m; > struct sbuf sbuf; > @@ -407,7 +406,7 @@ sysctl_vm_page_excludelist(SYSCTL_HANDLER_ARGS) > if (error != 0) > return (error); > sbuf_new_for_sysctl(&sbuf, NULL, 128, req); > - TAILQ_FOREACH(m, &excludelist_head, listq) { > + TAILQ_FOREACH(m, &blacklist_head, listq) { > sbuf_printf(&sbuf, "%s%#jx", first ? "" : ",", > (uintmax_t)m->phys_addr); > first = 0; > @@ -794,14 +793,14 @@ vm_page_startup(vm_offset_t vaddr) > } > > /* > - * Remove excludelisted pages from the physical memory allocator. > + * Remove blacklisted pages from the physical memory allocator. > */ > - TAILQ_INIT(&excludelist_head); > - vm_page_excludelist_load(&list, &listend); > - vm_page_excludelist_check(list, listend); > + TAILQ_INIT(&blacklist_head); > + vm_page_blacklist_load(&list, &listend); > + vm_page_blacklist_check(list, listend); > > - list = kern_getenv("vm.excludelist"); > - vm_page_excludelist_check(list, NULL); > + list = kern_getenv("vm.blacklist"); > + vm_page_blacklist_check(list, NULL); > > freeenv(list); > #if VM_NRESERVLEVEL > 0 > > Modified: head/sys/vm/vm_page.h > ============================================================ > ================== > --- head/sys/vm/vm_page.h Thu Jul 9 20:55:18 2020 (r363059) > +++ head/sys/vm/vm_page.h Thu Jul 9 22:38:36 2020 (r363060) > @@ -613,7 +613,7 @@ vm_page_t vm_page_alloc_contig_domain(vm_object_t obje > vm_page_t vm_page_alloc_freelist(int, int); > vm_page_t vm_page_alloc_freelist_domain(int, int, int); > void vm_page_bits_set(vm_page_t m, vm_page_bits_t *bits, vm_page_bits_t > set); > -bool vm_page_excludelist_add(vm_paddr_t pa, bool verbose); > +bool vm_page_blacklist_add(vm_paddr_t pa, bool verbose); > vm_page_t vm_page_grab(vm_object_t, vm_pindex_t, int); > vm_page_t vm_page_grab_unlocked(vm_object_t, vm_pindex_t, int); > int vm_page_grab_pages(vm_object_t object, vm_pindex_t pindex, int > allocflags, > _______________________________________________ > svn-src-head@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/svn-src-head > To unsubscribe, send any mail to "svn-src-head-unsubscribe@freebsd.org" > From owner-svn-src-all@freebsd.org Thu Jul 9 23:01:37 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 150D4358E0A; Thu, 9 Jul 2020 23:01:37 +0000 (UTC) (envelope-from cy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2s9r6wPfz3X0b; Thu, 9 Jul 2020 23:01:36 +0000 (UTC) (envelope-from cy@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D0C0218BF0; Thu, 9 Jul 2020 23:01:36 +0000 (UTC) (envelope-from cy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 069N1aNM028805; Thu, 9 Jul 2020 23:01:36 GMT (envelope-from cy@FreeBSD.org) Received: (from cy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 069N1aof028804; Thu, 9 Jul 2020 23:01:36 GMT (envelope-from cy@FreeBSD.org) Message-Id: <202007092301.069N1aof028804@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: cy set sender to cy@FreeBSD.org using -f From: Cy Schubert Date: Thu, 9 Jul 2020 23:01:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363061 - in head/usr.sbin/wpa: hostapd wpa_supplicant X-SVN-Group: head X-SVN-Commit-Author: cy X-SVN-Commit-Paths: in head/usr.sbin/wpa: hostapd wpa_supplicant X-SVN-Commit-Revision: 363061 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 23:01:37 -0000 Author: cy Date: Thu Jul 9 23:01:36 2020 New Revision: 363061 URL: https://svnweb.freebsd.org/changeset/base/363061 Log: Enable support for IEEE 802.11N, 802.11W, 802.11AC and 802.11.AX to hostapd and wpa_supplicant. Submitted by: bz MFC after: 2 weeks Relnotes: yes Sponsored by: Rubicon Communications, LLC (d/b/a "Netgate") Modified: head/usr.sbin/wpa/hostapd/Makefile head/usr.sbin/wpa/wpa_supplicant/Makefile Modified: head/usr.sbin/wpa/hostapd/Makefile ============================================================================== --- head/usr.sbin/wpa/hostapd/Makefile Thu Jul 9 22:38:36 2020 (r363060) +++ head/usr.sbin/wpa/hostapd/Makefile Thu Jul 9 23:01:36 2020 (r363061) @@ -45,11 +45,15 @@ SRCS= accounting.c \ ieee802_11.c \ ieee802_11_auth.c \ ieee802_11_common.c \ + ieee802_11_he.c \ + ieee802_11_ht.c \ ieee802_11_shared.c \ + ieee802_11_vht.c \ ieee802_1x.c \ ip_addr.c \ l2_packet_freebsd.c \ main.c \ + mbo_ap.c \ ms_funcs.c \ neighbor_db.c \ os_unix.c \ @@ -103,6 +107,11 @@ CFLAGS+=-I${.CURDIR:H}/wpa_supplicant \ -DCONFIG_DRIVER_BSD \ -DCONFIG_DRIVER_RADIUS_ACL \ -DCONFIG_HS20 \ + -DCONFIG_MBO \ + -DCONFIG_IEEE80211N \ + -DCONFIG_IEEE80211W \ + -DCONFIG_IEEE80211AC \ + -DCONFIG_IEEE80211AX \ -DCONFIG_INTERWORKING \ -DCONFIG_PEERKEY \ -DCONFIG_RSN_PREAUTH \ Modified: head/usr.sbin/wpa/wpa_supplicant/Makefile ============================================================================== --- head/usr.sbin/wpa/wpa_supplicant/Makefile Thu Jul 9 22:38:36 2020 (r363060) +++ head/usr.sbin/wpa/wpa_supplicant/Makefile Thu Jul 9 23:01:36 2020 (r363061) @@ -42,6 +42,10 @@ CFLAGS+=-DCONFIG_BACKEND_FILE \ -DCONFIG_DRIVER_WIRED \ -DCONFIG_GAS \ -DCONFIG_IEEE80211R \ + -DCONFIG_IEEE80211N \ + -DCONFIG_IEEE80211W \ + -DCONFIG_IEEE80211AC \ + -DCONFIG_IEEE80211AX \ -DCONFIG_PEERKEY \ -DCONFIG_PRIVSEP \ -DCONFIG_SMARTCARD \ From owner-svn-src-all@freebsd.org Fri Jul 10 00:03:07 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0F71A3595F5; Fri, 10 Jul 2020 00:03:07 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2tXp6dHtz3ZPb; Fri, 10 Jul 2020 00:03:06 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C779F19559; Fri, 10 Jul 2020 00:03:06 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06A036qT068715; Fri, 10 Jul 2020 00:03:06 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06A036D0068714; Fri, 10 Jul 2020 00:03:06 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <202007100003.06A036D0068714@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Fri, 10 Jul 2020 00:03:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363062 - head/sys/sys X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/sys/sys X-SVN-Commit-Revision: 363062 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 00:03:07 -0000 Author: kevans Date: Fri Jul 10 00:03:06 2020 New Revision: 363062 URL: https://svnweb.freebsd.org/changeset/base/363062 Log: shmfd: make shm_size a vm_ooffset_t On 32-bit platforms, this expands the shm_size to a 64-bit quantity and resolves a mismatch between the shmfd size and underlying vm_object size. The implementation did not account for this kind of mismatch. Reviewed by: kib MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D25602 Modified: head/sys/sys/mman.h Modified: head/sys/sys/mman.h ============================================================================== --- head/sys/sys/mman.h Thu Jul 9 23:01:36 2020 (r363061) +++ head/sys/sys/mman.h Fri Jul 10 00:03:06 2020 (r363062) @@ -254,7 +254,7 @@ typedef __size_t size_t; struct file; struct shmfd { - size_t shm_size; + vm_ooffset_t shm_size; vm_object_t shm_object; int shm_refs; uid_t shm_uid; From owner-svn-src-all@freebsd.org Fri Jul 10 00:07:01 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 53AED359FC3 for ; Fri, 10 Jul 2020 00:07:01 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-qk1-x72e.google.com (mail-qk1-x72e.google.com [IPv6:2607:f8b0:4864:20::72e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2tdJ3M9zz3Zgg for ; Fri, 10 Jul 2020 00:07:00 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: by mail-qk1-x72e.google.com with SMTP id z63so3650927qkb.8 for ; Thu, 09 Jul 2020 17:07:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=z7zHzOnnOD1X95u7VZdM5hwkOErUuHtBOIOb4P67EME=; b=cnPTxuPo9VWD5d81Tt/gVzmd7Tafv5+Dm5e6/5/rZNvgYkp0FEyazJDV3ojRk2fUJF 8vuTCbcUXo+OsH0ramkbHiH6+btaACVJuJSk81InCqFZwCM1z9ZEyik+e66kJoXVlhJI uw8wyMns0PX0DenoCsx8qwjdwj0SwIuo6kOjFUmcb/U2PBSJEx57zaFeKgC+zk2HIE/K Q3Z2Z3RLGBy+lz437VhohnTGkEeI7jA7fI4OpdyuKdkrD9JDt2gkSMQtuYnOy+mL6Fbz xV38hm+CwMKSuuom2xy4WsPNstGylLkxU95hGqpmZIhvr1/9oVznw0+5Xsagh/4IKkqz Ng0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=z7zHzOnnOD1X95u7VZdM5hwkOErUuHtBOIOb4P67EME=; b=YG7xdNpmgl4/7GxQGPuIuVRFwS0K1M7O6YI6sDCDhaoNer39PBolT/g3z/GqAwJG7U oy6eHac9Pm/EkEgH+7yOTR1mXrDHHS5JEICSP1Shjy5sZuKe3NgjOGDnjDFEAwmm0wn3 cWmWW7HRDKg0mXcPycCmb0KGpRRLCzgR05dTUj326RoQlJzyEWAUsAv/+mdnvilwdUlv /7sERfq+sRH9zfzZ9YQmuAY3qDPiEbN6btrBsNtsK2ozMWcHI3Hy+4eAp5d6Vs6Y1BDs r9arXYgnwHPfEmRb9QhEfJ8v6ofJ7ztgRmeFdMNbbFqK9+wtevhCDlNy4TCruq7KoFxV 8d8A== X-Gm-Message-State: AOAM531IPmrvxAOqFSMnZu5rqolAnfcrdXYqgRZ7W5nyeYpwbCFq8Etb LsNpNMBUIyatow799WRP/quS6xrgjQfRbwAmHmPnJVWH6y2W+Q== X-Google-Smtp-Source: ABdhPJwyRWhaHXrSlzMouoPAaSNr0GfNI812WG0SvmmhwKiaDIAU0EytCDfhauMfrKXIX0ua8TaE63d004NNF46yfdM= X-Received: by 2002:a37:4bcd:: with SMTP id y196mr2649186qka.495.1594339619279; Thu, 09 Jul 2020 17:06:59 -0700 (PDT) MIME-Version: 1.0 References: <202007092238.069McbU4014226@repo.freebsd.org> In-Reply-To: From: Warner Losh Date: Thu, 9 Jul 2020 18:06:48 -0600 Message-ID: Subject: Re: svn commit: r363060 - in head: stand/defaults sys/amd64/amd64 sys/powerpc/aim sys/vm To: Oliver Pinter Cc: Scott Long , "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" X-Rspamd-Queue-Id: 4B2tdJ3M9zz3Zgg X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=bsdimp-com.20150623.gappssmtp.com header.s=20150623 header.b=cnPTxuPo; dmarc=none; spf=none (mx1.freebsd.org: domain of wlosh@bsdimp.com has no SPF policy when checking 2607:f8b0:4864:20::72e) smtp.mailfrom=wlosh@bsdimp.com X-Spamd-Result: default: False [-2.23 / 15.00]; TO_DN_EQ_ADDR_SOME(0.00)[]; ARC_NA(0.00)[]; R_DKIM_ALLOW(-0.20)[bsdimp-com.20150623.gappssmtp.com:s=20150623]; RCVD_TLS_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; NEURAL_HAM_MEDIUM(-0.88)[-0.876]; NEURAL_HAM_LONG(-0.88)[-0.876]; TAGGED_RCPT(0.00)[]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; PREVIOUSLY_DELIVERED(0.00)[svn-src-all@freebsd.org]; RCPT_COUNT_FIVE(0.00)[5]; DMARC_NA(0.00)[bsdimp.com]; TO_MATCH_ENVRCPT_SOME(0.00)[]; DKIM_TRACE(0.00)[bsdimp-com.20150623.gappssmtp.com:+]; NEURAL_HAM_SHORT(-0.48)[-0.479]; RCVD_IN_DNSWL_NONE(0.00)[2607:f8b0:4864:20::72e:from]; R_SPF_NA(0.00)[no SPF record]; FREEMAIL_TO(0.00)[gmail.com]; FORGED_SENDER(0.30)[imp@bsdimp.com,wlosh@bsdimp.com]; MIME_TRACE(0.00)[0:+,1:+,2:~]; RCVD_COUNT_TWO(0.00)[2]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; FROM_NEQ_ENVFROM(0.00)[imp@bsdimp.com,wlosh@bsdimp.com] Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.33 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 00:07:01 -0000 On Thu, Jul 9, 2020 at 4:54 PM Oliver Pinter wrote: > > > On Friday, July 10, 2020, Scott Long wrote: > >> Author: scottl >> Date: Thu Jul 9 22:38:36 2020 >> New Revision: 363060 >> URL: https://svnweb.freebsd.org/changeset/base/363060 >> >> Log: >> Revert r362998, r326999 while a better compatibility strategy is >> devised. >> >> Modified: >> head/stand/defaults/loader.conf >> head/sys/amd64/amd64/pmap.c >> head/sys/powerpc/aim/mmu_radix.c >> head/sys/vm/vm_page.c >> head/sys/vm/vm_page.h >> >> Modified: head/stand/defaults/loader.conf >> >> ============================================================================== >> --- head/stand/defaults/loader.conf Thu Jul 9 20:55:18 2020 >> (r363059) >> +++ head/stand/defaults/loader.conf Thu Jul 9 22:38:36 2020 >> (r363060) >> @@ -53,7 +53,7 @@ entropy_cache_type="boot_entropy_cache" # >> Required for >> ram_excludelist_load="NO" # Set this to YES to load a file >> # containing a list of addresses >> to >> # exclude from the running system. >> -ram_excludelist_name="/boot/excludelist.txt" # Set this to the name of >> the file >> +ram_excludeist_name="/boot/excludelist.txt" # Set this to the name of >> the file > > > Hi! > > This part of the revert seems still broken. > I think youre correct. Can you look at https://reviews.freebsd.org/D25606 please and let me know if you think that's right? Warner > > >> ram_excludelist_type="ram_excludelist" # Required for the kernel to find >> # the blacklist module >> >> >> Modified: head/sys/amd64/amd64/pmap.c >> >> ============================================================================== >> --- head/sys/amd64/amd64/pmap.c Thu Jul 9 20:55:18 2020 (r363059) >> +++ head/sys/amd64/amd64/pmap.c Thu Jul 9 22:38:36 2020 (r363060) >> @@ -2060,7 +2060,7 @@ pmap_init(void) >> int error, i, ret, skz63; >> >> /* L1TF, reserve page @0 unconditionally */ >> - vm_page_excludelist_add(0, bootverbose); >> + vm_page_blacklist_add(0, bootverbose); >> >> /* Detect bare-metal Skylake Server and Skylake-X. */ >> if (vm_guest == VM_GUEST_NO && cpu_vendor_id == CPU_VENDOR_INTEL >> && >> @@ -2081,7 +2081,7 @@ pmap_init(void) >> printf("SKZ63: skipping 4M RAM starting " >> "at physical 1G\n"); >> for (i = 0; i < atop(0x400000); i++) { >> - ret = vm_page_excludelist_add(0x40000000 + >> + ret = vm_page_blacklist_add(0x40000000 + >> ptoa(i), FALSE); >> if (!ret && bootverbose) >> printf("page at %#lx already >> used\n", >> >> Modified: head/sys/powerpc/aim/mmu_radix.c >> >> ============================================================================== >> --- head/sys/powerpc/aim/mmu_radix.c Thu Jul 9 20:55:18 2020 >> (r363059) >> +++ head/sys/powerpc/aim/mmu_radix.c Thu Jul 9 22:38:36 2020 >> (r363060) >> @@ -3557,7 +3557,7 @@ mmu_radix_init() >> int error, i, pv_npg; >> >> /* L1TF, reserve page @0 unconditionally */ >> - vm_page_excludelist_add(0, bootverbose); >> + vm_page_blacklist_add(0, bootverbose); >> >> zone_radix_pgd = uma_zcache_create("radix_pgd_cache", >> RADIX_PGD_SIZE, NULL, NULL, >> >> Modified: head/sys/vm/vm_page.c >> >> ============================================================================== >> --- head/sys/vm/vm_page.c Thu Jul 9 20:55:18 2020 (r363059) >> +++ head/sys/vm/vm_page.c Thu Jul 9 22:38:36 2020 (r363060) >> @@ -155,11 +155,10 @@ vm_page_t vm_page_array; >> long vm_page_array_size; >> long first_page; >> >> -static TAILQ_HEAD(, vm_page) excludelist_head; >> -static int sysctl_vm_page_excludelist(SYSCTL_HANDLER_ARGS); >> -SYSCTL_PROC(_vm, OID_AUTO, page_excludelist, CTLTYPE_STRING | CTLFLAG_RD >> | >> - CTLFLAG_MPSAFE, NULL, 0, sysctl_vm_page_excludelist, "A", >> - "Blacklist pages"); >> +static TAILQ_HEAD(, vm_page) blacklist_head; >> +static int sysctl_vm_page_blacklist(SYSCTL_HANDLER_ARGS); >> +SYSCTL_PROC(_vm, OID_AUTO, page_blacklist, CTLTYPE_STRING | CTLFLAG_RD | >> + CTLFLAG_MPSAFE, NULL, 0, sysctl_vm_page_blacklist, "A", "Blacklist >> pages"); >> >> static uma_zone_t fakepg_zone; >> >> @@ -259,16 +258,16 @@ vm_set_page_size(void) >> } >> >> /* >> - * vm_page_excludelist_next: >> + * vm_page_blacklist_next: >> * >> - * Find the next entry in the provided string of excludelist >> + * Find the next entry in the provided string of blacklist >> * addresses. Entries are separated by space, comma, or newline. >> * If an invalid integer is encountered then the rest of the >> * string is skipped. Updates the list pointer to the next >> * character, or NULL if the string is exhausted or invalid. >> */ >> static vm_paddr_t >> -vm_page_excludelist_next(char **list, char *end) >> +vm_page_blacklist_next(char **list, char *end) >> { >> vm_paddr_t bad; >> char *cp, *pos; >> @@ -315,13 +314,13 @@ vm_page_excludelist_next(char **list, char *end) >> *list = cp; >> return (trunc_page(bad)); >> } >> - printf("Garbage in RAM excludelist, skipping\n"); >> + printf("Garbage in RAM blacklist, skipping\n"); >> *list = NULL; >> return (0); >> } >> >> bool >> -vm_page_excludelist_add(vm_paddr_t pa, bool verbose) >> +vm_page_blacklist_add(vm_paddr_t pa, bool verbose) >> { >> struct vm_domain *vmd; >> vm_page_t m; >> @@ -337,7 +336,7 @@ vm_page_excludelist_add(vm_paddr_t pa, bool verbose) >> vm_domain_free_unlock(vmd); >> if (ret != 0) { >> vm_domain_freecnt_inc(vmd, -1); >> - TAILQ_INSERT_TAIL(&excludelist_head, m, listq); >> + TAILQ_INSERT_TAIL(&blacklist_head, m, listq); >> if (verbose) >> printf("Skipping page with pa 0x%jx\n", >> (uintmax_t)pa); >> } >> @@ -345,35 +344,35 @@ vm_page_excludelist_add(vm_paddr_t pa, bool verbose) >> } >> >> /* >> - * vm_page_excludelist_check: >> + * vm_page_blacklist_check: >> * >> - * Iterate through the provided string of excludelist addresses, >> pulling >> + * Iterate through the provided string of blacklist addresses, >> pulling >> * each entry out of the physical allocator free list and putting it >> - * onto a list for reporting via the vm.page_excludelist sysctl. >> + * onto a list for reporting via the vm.page_blacklist sysctl. >> */ >> static void >> -vm_page_excludelist_check(char *list, char *end) >> +vm_page_blacklist_check(char *list, char *end) >> { >> vm_paddr_t pa; >> char *next; >> >> next = list; >> while (next != NULL) { >> - if ((pa = vm_page_excludelist_next(&next, end)) == 0) >> + if ((pa = vm_page_blacklist_next(&next, end)) == 0) >> continue; >> - vm_page_excludelist_add(pa, bootverbose); >> + vm_page_blacklist_add(pa, bootverbose); >> } >> } >> >> /* >> - * vm_page_excludelist_load: >> + * vm_page_blacklist_load: >> * >> - * Search for a special module named "ram_excludelist". It'll be a >> + * Search for a special module named "ram_blacklist". It'll be a >> * plain text file provided by the user via the loader directive >> * of the same name. >> */ >> static void >> -vm_page_excludelist_load(char **list, char **end) >> +vm_page_blacklist_load(char **list, char **end) >> { >> void *mod; >> u_char *ptr; >> @@ -382,7 +381,7 @@ vm_page_excludelist_load(char **list, char **end) >> mod = NULL; >> ptr = NULL; >> >> - mod = preload_search_by_type("ram_excludelist"); >> + mod = preload_search_by_type("ram_blacklist"); >> if (mod != NULL) { >> ptr = preload_fetch_addr(mod); >> len = preload_fetch_size(mod); >> @@ -396,7 +395,7 @@ vm_page_excludelist_load(char **list, char **end) >> } >> >> static int >> -sysctl_vm_page_excludelist(SYSCTL_HANDLER_ARGS) >> +sysctl_vm_page_blacklist(SYSCTL_HANDLER_ARGS) >> { >> vm_page_t m; >> struct sbuf sbuf; >> @@ -407,7 +406,7 @@ sysctl_vm_page_excludelist(SYSCTL_HANDLER_ARGS) >> if (error != 0) >> return (error); >> sbuf_new_for_sysctl(&sbuf, NULL, 128, req); >> - TAILQ_FOREACH(m, &excludelist_head, listq) { >> + TAILQ_FOREACH(m, &blacklist_head, listq) { >> sbuf_printf(&sbuf, "%s%#jx", first ? "" : ",", >> (uintmax_t)m->phys_addr); >> first = 0; >> @@ -794,14 +793,14 @@ vm_page_startup(vm_offset_t vaddr) >> } >> >> /* >> - * Remove excludelisted pages from the physical memory allocator. >> + * Remove blacklisted pages from the physical memory allocator. >> */ >> - TAILQ_INIT(&excludelist_head); >> - vm_page_excludelist_load(&list, &listend); >> - vm_page_excludelist_check(list, listend); >> + TAILQ_INIT(&blacklist_head); >> + vm_page_blacklist_load(&list, &listend); >> + vm_page_blacklist_check(list, listend); >> >> - list = kern_getenv("vm.excludelist"); >> - vm_page_excludelist_check(list, NULL); >> + list = kern_getenv("vm.blacklist"); >> + vm_page_blacklist_check(list, NULL); >> >> freeenv(list); >> #if VM_NRESERVLEVEL > 0 >> >> Modified: head/sys/vm/vm_page.h >> >> ============================================================================== >> --- head/sys/vm/vm_page.h Thu Jul 9 20:55:18 2020 (r363059) >> +++ head/sys/vm/vm_page.h Thu Jul 9 22:38:36 2020 (r363060) >> @@ -613,7 +613,7 @@ vm_page_t vm_page_alloc_contig_domain(vm_object_t obje >> vm_page_t vm_page_alloc_freelist(int, int); >> vm_page_t vm_page_alloc_freelist_domain(int, int, int); >> void vm_page_bits_set(vm_page_t m, vm_page_bits_t *bits, vm_page_bits_t >> set); >> -bool vm_page_excludelist_add(vm_paddr_t pa, bool verbose); >> +bool vm_page_blacklist_add(vm_paddr_t pa, bool verbose); >> vm_page_t vm_page_grab(vm_object_t, vm_pindex_t, int); >> vm_page_t vm_page_grab_unlocked(vm_object_t, vm_pindex_t, int); >> int vm_page_grab_pages(vm_object_t object, vm_pindex_t pindex, int >> allocflags, >> _______________________________________________ >> svn-src-head@freebsd.org mailing list >> https://lists.freebsd.org/mailman/listinfo/svn-src-head >> To unsubscribe, send any mail to "svn-src-head-unsubscribe@freebsd.org" >> > From owner-svn-src-all@freebsd.org Fri Jul 10 00:24:06 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D8B2835A688; Fri, 10 Jul 2020 00:24:06 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2v125MXfz3bjS; Fri, 10 Jul 2020 00:24:06 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9C1E51999C; Fri, 10 Jul 2020 00:24:06 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06A0O6ut081136; Fri, 10 Jul 2020 00:24:06 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06A0O67t081135; Fri, 10 Jul 2020 00:24:06 GMT (envelope-from imp@FreeBSD.org) Message-Id: <202007100024.06A0O67t081135@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Fri, 10 Jul 2020 00:24:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363063 - head/stand/defaults X-SVN-Group: head X-SVN-Commit-Author: imp X-SVN-Commit-Paths: head/stand/defaults X-SVN-Commit-Revision: 363063 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 00:24:06 -0000 Author: imp Date: Fri Jul 10 00:24:06 2020 New Revision: 363063 URL: https://svnweb.freebsd.org/changeset/base/363063 Log: Properly backout r362998 Correct a small mistake in r363060's backaout of r362998 by reverse-applying r362998 by hand to loader.conf. Differential Revision: https://reviews.freebsd.org/D25606 Modified: head/stand/defaults/loader.conf Modified: head/stand/defaults/loader.conf ============================================================================== --- head/stand/defaults/loader.conf Fri Jul 10 00:03:06 2020 (r363062) +++ head/stand/defaults/loader.conf Fri Jul 10 00:24:06 2020 (r363063) @@ -49,12 +49,12 @@ entropy_cache_type="boot_entropy_cache" # Required for # must not change value even if the # _name above does change! -### RAM Excludelist configuration ############################ -ram_excludelist_load="NO" # Set this to YES to load a file +### RAM Blacklist configuration ############################ +ram_blacklist_load="NO" # Set this to YES to load a file # containing a list of addresses to # exclude from the running system. -ram_excludeist_name="/boot/excludelist.txt" # Set this to the name of the file -ram_excludelist_type="ram_excludelist" # Required for the kernel to find +ram_blacklist_name="/boot/blacklist.txt" # Set this to the name of the file +ram_blacklist_type="ram_blacklist" # Required for the kernel to find # the blacklist module ### Microcode loading configuration ######################## From owner-svn-src-all@freebsd.org Fri Jul 10 00:24:42 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E92F535A68A; Fri, 10 Jul 2020 00:24:42 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2v1k5wDfz3bVk; Fri, 10 Jul 2020 00:24:42 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id AE223196F0; Fri, 10 Jul 2020 00:24:42 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06A0Og1D081216; Fri, 10 Jul 2020 00:24:42 GMT (envelope-from eugen@FreeBSD.org) Received: (from eugen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06A0OgPW081215; Fri, 10 Jul 2020 00:24:42 GMT (envelope-from eugen@FreeBSD.org) Message-Id: <202007100024.06A0OgPW081215@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: eugen set sender to eugen@FreeBSD.org using -f From: Eugene Grosbein Date: Fri, 10 Jul 2020 00:24:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363064 - head/usr.bin/xinstall X-SVN-Group: head X-SVN-Commit-Author: eugen X-SVN-Commit-Paths: head/usr.bin/xinstall X-SVN-Commit-Revision: 363064 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 00:24:43 -0000 Author: eugen Date: Fri Jul 10 00:24:42 2020 New Revision: 363064 URL: https://svnweb.freebsd.org/changeset/base/363064 Log: Optimize install(1) a bit. Currently, "install -s -S" behaviour is inefficient for upgrade. First it finds that destination file already exists and copies source file to temporary file. Then it calls strip(1) with name of temporary file as single agrument and our strip(1) creates another temporary file in the /tmp (or TMPDIR) making another copy that is finally copied to DESTDIR third time. Meantime, strip(1) has an option "-o dst" to specify destination so install(1) is allowed to skip initial copying from obj to DESTDIR. This change makes it do so. Take a look at https://reviews.freebsd.org/D25551 for details and efficiency numbers (in short: upto 32% gained for installword). MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D25551 Modified: head/usr.bin/xinstall/xinstall.c Modified: head/usr.bin/xinstall/xinstall.c ============================================================================== --- head/usr.bin/xinstall/xinstall.c Fri Jul 10 00:24:06 2020 (r363063) +++ head/usr.bin/xinstall/xinstall.c Fri Jul 10 00:24:42 2020 (r363064) @@ -147,7 +147,7 @@ static void install_dir(char *); static void metadata_log(const char *, const char *, struct timespec *, const char *, const char *, off_t); static int parseid(const char *, id_t *); -static void strip(const char *); +static int strip(const char *, const char *, char **); static int trymmap(int); static void usage(void); @@ -767,12 +767,13 @@ install(const char *from_name, const char *to_name, u_ { struct stat from_sb, temp_sb, to_sb; struct timespec tsb[2]; - int devnull, files_match, from_fd, serrno, target; + int devnull, files_match, from_fd, serrno, stripped, target; int tempcopy, temp_fd, to_fd; char backup[MAXPATHLEN], *p, pathbuf[MAXPATHLEN], tempfile[MAXPATHLEN]; char *digestresult; - files_match = 0; + digestresult = NULL; + files_match = stripped = 0; from_fd = -1; to_fd = -1; @@ -858,19 +859,24 @@ install(const char *from_name, const char *to_name, u_ (void)printf("install: %s -> %s\n", from_name, to_name); } - if (!devnull) - digestresult = copy(from_fd, from_name, to_fd, - tempcopy ? tempfile : to_name, from_sb.st_size); - else - digestresult = NULL; + if (!devnull) { + if (dostrip) + stripped = strip(tempcopy ? tempfile : to_name, + from_name, &digestresult); + else + digestresult = copy(from_fd, from_name, to_fd, + tempcopy ? tempfile : to_name, from_sb.st_size); + } } if (dostrip) { - strip(tempcopy ? tempfile : to_name); + if (!stripped) + (void)strip(tempcopy ? tempfile : to_name, NULL, + &digestresult); /* - * Re-open our fd on the target, in case we used a strip - * that does not work in-place -- like GNU binutils strip. + * Re-open our fd on the target, in case + * we did not strip in-place. */ close(to_fd); to_fd = open(tempcopy ? tempfile : to_name, O_RDONLY, 0); @@ -1057,7 +1063,9 @@ install(const char *from_name, const char *to_name, u_ /* * compare -- - * compare two files; non-zero means files differ + * Compare two files; non-zero means files differ. + * Compute digest and return its address in *dresp + * unless it points to pre-computed digest. */ static int compare(int from_fd, const char *from_name __unused, size_t from_len, @@ -1066,15 +1074,17 @@ compare(int from_fd, const char *from_name __unused, s { char *p, *q; int rv; - int done_compare; + int do_digest, done_compare; DIGEST_CTX ctx; rv = 0; if (from_len != to_len) return 1; + do_digest = (digesttype != DIGEST_NONE && dresp != NULL && + *dresp == NULL); if (from_len <= MAX_CMP_SIZE) { - if (dresp != NULL) + if (do_digest) digest_init(&ctx); done_compare = 0; if (trymmap(from_fd) && trymmap(to_fd)) { @@ -1090,7 +1100,7 @@ compare(int from_fd, const char *from_name __unused, s } rv = memcmp(p, q, from_len); - if (dresp != NULL) + if (do_digest) digest_update(&ctx, p, from_len); munmap(p, from_len); munmap(q, from_len); @@ -1117,7 +1127,8 @@ compare(int from_fd, const char *from_name __unused, s rv = 1; /* out of sync */ } else rv = 1; /* read failure */ - digest_update(&ctx, buf1, n1); + if (do_digest) + digest_update(&ctx, buf1, n1); } lseek(from_fd, 0, SEEK_SET); lseek(to_fd, 0, SEEK_SET); @@ -1125,7 +1136,7 @@ compare(int from_fd, const char *from_name __unused, s } else rv = 1; /* don't bother in this case */ - if (dresp != NULL) { + if (do_digest) { if (rv == 0) *dresp = digest_end(&ctx, NULL); else @@ -1298,13 +1309,16 @@ copy(int from_fd, const char *from_name, int to_fd, co /* * strip -- - * use strip(1) to strip the target file + * Use strip(1) to strip the target file. + * Just invoke strip(1) on to_name if from_name is NULL, + * else try to run "strip -o to_name -- from_name" and return 0 on failure. + * Return 1 on success and assign result of digest_file(to_name) to *dresp. */ -static void -strip(const char *to_name) +static int +strip(const char *to_name, const char *from_name, char **dresp) { const char *stripbin; - const char *args[3]; + const char *args[6]; pid_t pid; int error, status; @@ -1312,8 +1326,16 @@ strip(const char *to_name) if (stripbin == NULL) stripbin = "strip"; args[0] = stripbin; - args[1] = to_name; - args[2] = NULL; + if (from_name == NULL) { + args[1] = to_name; + args[2] = NULL; + } else { + args[1] = "-o"; + args[2] = to_name; + args[3] = "--"; + args[4] = from_name; + args[5] = NULL; + } error = posix_spawnp(&pid, stripbin, NULL, NULL, __DECONST(char **, args), environ); if (error != 0) { @@ -1329,9 +1351,14 @@ strip(const char *to_name) } if (status != 0) { (void)unlink(to_name); + if (from_name != NULL) + return (0); errx(EX_SOFTWARE, "strip command %s failed on %s", stripbin, to_name); } + if (dresp != NULL) + *dresp = digest_file(to_name); + return (1); } /* From owner-svn-src-all@freebsd.org Fri Jul 10 00:43:46 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1AD0535A6D1; Fri, 10 Jul 2020 00:43:46 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2vRj6zXxz3cPS; Fri, 10 Jul 2020 00:43:45 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D21F419A48; Fri, 10 Jul 2020 00:43:45 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06A0hjD9093132; Fri, 10 Jul 2020 00:43:45 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06A0hjo1093130; Fri, 10 Jul 2020 00:43:45 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <202007100043.06A0hjo1093130@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Fri, 10 Jul 2020 00:43:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363065 - in head/sys: kern sys X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: in head/sys: kern sys X-SVN-Commit-Revision: 363065 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 00:43:46 -0000 Author: kevans Date: Fri Jul 10 00:43:45 2020 New Revision: 363065 URL: https://svnweb.freebsd.org/changeset/base/363065 Log: shm_open2: Implement SHM_GROW_ON_WRITE Lack of SHM_GROW_ON_WRITE is actively breaking Python's memfd_create tests, so go ahead and implement it. A future change will make memfd_create always set SHM_GROW_ON_WRITE, to match Linux behavior and unbreak Python's tests on -CURRENT. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D25502 Modified: head/sys/kern/uipc_shm.c head/sys/sys/mman.h Modified: head/sys/kern/uipc_shm.c ============================================================================== --- head/sys/kern/uipc_shm.c Fri Jul 10 00:24:42 2020 (r363064) +++ head/sys/kern/uipc_shm.c Fri Jul 10 00:43:45 2020 (r363065) @@ -313,6 +313,7 @@ shm_write(struct file *fp, struct uio *uio, struct ucr struct shmfd *shmfd; void *rl_cookie; int error; + off_t size; shmfd = fp->f_data; #ifdef MAC @@ -321,17 +322,42 @@ shm_write(struct file *fp, struct uio *uio, struct ucr return (error); #endif foffset_lock_uio(fp, uio, flags); + if (uio->uio_resid > OFF_MAX - uio->uio_offset) { + /* + * Overflow is only an error if we're supposed to expand on + * write. Otherwise, we'll just truncate the write to the + * size of the file, which can only grow up to OFF_MAX. + */ + if ((shmfd->shm_flags & SHM_GROW_ON_WRITE) != 0) { + foffset_unlock_uio(fp, uio, flags); + return (EFBIG); + } + + size = shmfd->shm_size; + } else { + size = uio->uio_offset + uio->uio_resid; + } if ((flags & FOF_OFFSET) == 0) { rl_cookie = rangelock_wlock(&shmfd->shm_rl, 0, OFF_MAX, &shmfd->shm_mtx); } else { rl_cookie = rangelock_wlock(&shmfd->shm_rl, uio->uio_offset, - uio->uio_offset + uio->uio_resid, &shmfd->shm_mtx); + size, &shmfd->shm_mtx); } - if ((shmfd->shm_seals & F_SEAL_WRITE) != 0) + if ((shmfd->shm_seals & F_SEAL_WRITE) != 0) { error = EPERM; - else - error = uiomove_object(shmfd->shm_object, shmfd->shm_size, uio); + } else { + error = 0; + if ((shmfd->shm_flags & SHM_GROW_ON_WRITE) != 0 && + size > shmfd->shm_size) { + VM_OBJECT_WLOCK(shmfd->shm_object); + error = shm_dotruncate_locked(shmfd, size, rl_cookie); + VM_OBJECT_WUNLOCK(shmfd->shm_object); + } + if (error == 0) + error = uiomove_object(shmfd->shm_object, + shmfd->shm_size, uio); + } rangelock_unlock(&shmfd->shm_rl, rl_cookie, &shmfd->shm_mtx); foffset_unlock_uio(fp, uio, flags); return (error); @@ -748,7 +774,7 @@ kern_shm_open2(struct thread *td, const char *userpath mode_t cmode; int error, fd, initial_seals; - if ((shmflags & ~SHM_ALLOW_SEALING) != 0) + if ((shmflags & ~(SHM_ALLOW_SEALING | SHM_GROW_ON_WRITE)) != 0) return (EINVAL); initial_seals = F_SEAL_SEAL; @@ -921,6 +947,7 @@ kern_shm_open2(struct thread *td, const char *userpath } } + shmfd->shm_flags = shmflags; finit(fp, FFLAGS(flags & O_ACCMODE), DTYPE_SHM, shmfd, &shm_ops); td->td_retval[0] = fd; Modified: head/sys/sys/mman.h ============================================================================== --- head/sys/sys/mman.h Fri Jul 10 00:24:42 2020 (r363064) +++ head/sys/sys/mman.h Fri Jul 10 00:43:45 2020 (r363065) @@ -190,6 +190,7 @@ * shmflags for shm_open2() */ #define SHM_ALLOW_SEALING 0x00000001 +#define SHM_GROW_ON_WRITE 0x00000002 /* * Flags for memfd_create(). @@ -278,6 +279,7 @@ struct shmfd { struct rangelock shm_rl; struct mtx shm_mtx; + int shm_flags; int shm_seals; }; #endif From owner-svn-src-all@freebsd.org Fri Jul 10 00:45:17 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DB6C935A6E5; Fri, 10 Jul 2020 00:45:17 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2vTT5SyFz3cjb; Fri, 10 Jul 2020 00:45:17 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 86552199CC; Fri, 10 Jul 2020 00:45:17 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06A0jHNd093280; Fri, 10 Jul 2020 00:45:17 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06A0jGCl093277; Fri, 10 Jul 2020 00:45:16 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <202007100045.06A0jGCl093277@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Fri, 10 Jul 2020 00:45:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363066 - in head: lib/libc/sys sys/compat/linux tests/sys/kern X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: in head: lib/libc/sys sys/compat/linux tests/sys/kern X-SVN-Commit-Revision: 363066 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 00:45:17 -0000 Author: kevans Date: Fri Jul 10 00:45:16 2020 New Revision: 363066 URL: https://svnweb.freebsd.org/changeset/base/363066 Log: memfd_create: turn on SHM_GROW_ON_WRITE memfd_create fds will no longer require an ftruncate(2) to set the size; they'll grow (to the extent that it's possible) upon write(2)-like syscalls. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D25502 Modified: head/lib/libc/sys/shm_open.c head/sys/compat/linux/linux_file.c head/tests/sys/kern/memfd_test.c Modified: head/lib/libc/sys/shm_open.c ============================================================================== --- head/lib/libc/sys/shm_open.c Fri Jul 10 00:43:45 2020 (r363065) +++ head/lib/libc/sys/shm_open.c Fri Jul 10 00:45:16 2020 (r363066) @@ -84,7 +84,7 @@ memfd_create(const char *name, unsigned int flags) /* We've already validated that we're sufficiently sized. */ snprintf(memfd_name, NAME_MAX + 1, "%s%s", MEMFD_NAME_PREFIX, name); oflags = O_RDWR; - shmflags = 0; + shmflags = SHM_GROW_ON_WRITE; if ((flags & MFD_CLOEXEC) != 0) oflags |= O_CLOEXEC; if ((flags & MFD_ALLOW_SEALING) != 0) Modified: head/sys/compat/linux/linux_file.c ============================================================================== --- head/sys/compat/linux/linux_file.c Fri Jul 10 00:43:45 2020 (r363065) +++ head/sys/compat/linux/linux_file.c Fri Jul 10 00:45:16 2020 (r363066) @@ -1758,7 +1758,7 @@ linux_memfd_create(struct thread *td, struct linux_mem if ((flags & MFD_HUGETLB) != 0) return (ENOSYS); oflags = O_RDWR; - shmflags = 0; + shmflags = SHM_GROW_ON_WRITE; if ((flags & MFD_CLOEXEC) != 0) oflags |= O_CLOEXEC; if ((flags & MFD_ALLOW_SEALING) != 0) Modified: head/tests/sys/kern/memfd_test.c ============================================================================== --- head/tests/sys/kern/memfd_test.c Fri Jul 10 00:43:45 2020 (r363065) +++ head/tests/sys/kern/memfd_test.c Fri Jul 10 00:45:16 2020 (r363066) @@ -30,6 +30,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -38,18 +39,26 @@ __FBSDID("$FreeBSD$"); ATF_TC_WITHOUT_HEAD(basic); ATF_TC_BODY(basic, tc) { + struct stat sb; int fd; char buf[8]; ATF_REQUIRE((fd = memfd_create("...", 0)) != -1); - /* File size should be initially 0 */ - ATF_REQUIRE(write(fd, buf, sizeof(buf)) == 0); + /* write(2) should grow us out automatically. */ + ATF_REQUIRE(write(fd, buf, sizeof(buf)) == sizeof(buf)); + ATF_REQUIRE(fstat(fd, &sb) == 0); + ATF_REQUIRE(sb.st_size == sizeof(buf)); /* ftruncate(2) must succeed without seals */ - ATF_REQUIRE(ftruncate(fd, sizeof(buf) - 1) == 0); + ATF_REQUIRE(ftruncate(fd, 2 * (sizeof(buf) - 1)) == 0); - ATF_REQUIRE(write(fd, buf, sizeof(buf)) == sizeof(buf) - 1); + /* write(2) again must not be limited by ftruncate(2) size. */ + ATF_REQUIRE(write(fd, buf, sizeof(buf)) == sizeof(buf)); + + /* Sanity check. */ + ATF_REQUIRE(fstat(fd, &sb) == 0); + ATF_REQUIRE(sb.st_size == 2 * sizeof(buf)); close(fd); } From owner-svn-src-all@freebsd.org Fri Jul 10 00:45:35 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1D85235AAE9; Fri, 10 Jul 2020 00:45:35 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B2vTp71kGz3cqc; Fri, 10 Jul 2020 00:45:34 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D5ADA19C3A; Fri, 10 Jul 2020 00:45:34 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06A0jYhI093336; Fri, 10 Jul 2020 00:45:34 GMT (envelope-from eugen@FreeBSD.org) Received: (from eugen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06A0jYIX093335; Fri, 10 Jul 2020 00:45:34 GMT (envelope-from eugen@FreeBSD.org) Message-Id: <202007100045.06A0jYIX093335@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: eugen set sender to eugen@FreeBSD.org using -f From: Eugene Grosbein Date: Fri, 10 Jul 2020 00:45:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363067 - head/usr.bin/xinstall X-SVN-Group: head X-SVN-Commit-Author: eugen X-SVN-Commit-Paths: head/usr.bin/xinstall X-SVN-Commit-Revision: 363067 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 00:45:35 -0000 Author: eugen Date: Fri Jul 10 00:45:34 2020 New Revision: 363067 URL: https://svnweb.freebsd.org/changeset/base/363067 Log: install(1): correction after r363064 Make it not break if STRIPBIN points to strip version without -o support. In that case, perform extra copy just like before r363064. MFC after: 1 month X-MFC-With: 363064 Modified: head/usr.bin/xinstall/xinstall.c Modified: head/usr.bin/xinstall/xinstall.c ============================================================================== --- head/usr.bin/xinstall/xinstall.c Fri Jul 10 00:45:16 2020 (r363066) +++ head/usr.bin/xinstall/xinstall.c Fri Jul 10 00:45:34 2020 (r363067) @@ -863,7 +863,7 @@ install(const char *from_name, const char *to_name, u_ if (dostrip) stripped = strip(tempcopy ? tempfile : to_name, from_name, &digestresult); - else + if (!stripped) digestresult = copy(from_fd, from_name, to_fd, tempcopy ? tempfile : to_name, from_sb.st_size); } From owner-svn-src-all@freebsd.org Fri Jul 10 06:00:11 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2CD18360085 for ; Fri, 10 Jul 2020 06:00:11 +0000 (UTC) (envelope-from sales@hotnewsbizbest.live) Received: from hotnewsbizbest.live (hotnewsbizbest.live [106.75.84.23]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4B32SD4Fkzz48mQ for ; Fri, 10 Jul 2020 05:59:38 +0000 (UTC) (envelope-from sales@hotnewsbizbest.live) From: "EXCEL TECHNICAL & INDUSTRIAL SUPPLIES LLC" To: svn-src-all@freebsd.org Subject: Re: MTO Date: 10 Jul 2020 05:48:31 +0000 Message-ID: <20200710054829.0149170F07E6305D@hotnewsbizbest.live> MIME-Version: 1.0 X-Rspamd-Queue-Id: 4B32SD4Fkzz48mQ X-Spamd-Bar: +++++++ X-Spamd-Result: default: False [7.86 / 15.00]; MIME_DOUBLE_BAD_EXTENSION(6.00)[pdf!=exe]; RWL_MAILSPIKE_GOOD(0.00)[106.75.84.23:from]; R_SPF_ALLOW(-0.20)[+a:c]; HAS_ATTACHMENT(0.00)[]; TO_DN_NONE(0.00)[]; DKIM_TRACE(0.00)[hotnewsbizbest.live:+]; DMARC_POLICY_ALLOW(-0.50)[hotnewsbizbest.live,quarantine]; SUBJ_ALL_CAPS(0.23)[3]; NEURAL_HAM_SHORT(-0.43)[-0.433]; RCVD_COUNT_ZERO(0.00)[0]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+,1:~,2:-,2:~]; ASN(0.00)[asn:9808, ipnet:106.75.80.0/20, country:CN]; MID_RHS_MATCH_FROM(0.00)[]; ARC_NA(0.00)[]; FAKE_REPLY(1.00)[]; R_DKIM_ALLOW(-0.20)[hotnewsbizbest.live:s=default]; NEURAL_HAM_MEDIUM(-0.84)[-0.839]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; NEURAL_HAM_LONG(-0.90)[-0.897]; MIME_GOOD(-0.10)[multipart/mixed]; MIME_BAD_ATTACHMENT(1.60)[z]; RCPT_COUNT_ONE(0.00)[1]; MIME_HTML_ONLY(0.20)[]; MIME_BAD_EXTENSION(2.00)[exe]; GREYLIST(0.00)[pass,body] X-Spam: Yes Content-Type: application/octet-stream; name="MTO.PDF.Z" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="MTO.PDF.Z" X-Content-Filtered-By: Mailman/MimeDel 2.1.33 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 06:00:11 -0000 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 1WYlKri7XvgwXNFHpbjCtEN/YmXHkOaYqa3o2Vdwj2vm9sqw0VomY6pu41KjW+pueyCry+uN 3nHvn3sY05O4++6SeI2xDBf69Kx9ri/3ZOI36Wbaf+tKE9RLII4Z8rGvKu/dfcuDVSOM9vs/ eJHdX2XqvbL8/scavxuhswl6et3Nf5ysaIUfHvGqK7eZruQksyrfkd1HBaQXia+GFZqs8DPt aBPy/yhzV40jVqrE2YR9QeuLX06gd15UH/bE8cTGYunw1SLvQkUKtUkFuO5apPzeCZlY10Zx 8HHnZ9lBFkvQya4Q1wgDcUG15axPNISs9lfs9ARzOFl9H18nxJ7JjS7t38aRxvktw9t4Kxa5 qK++3CRONSC39Mehsd3PcUXkZVnRy7bbHcb/8NCaV7wtGP+ow+vtojDwyvV7nqLoH69Mue+p jHjnnIainjful4sDsJL1zV6L73ZUFudO34/uGwdqEayU/XuEyD657hUGVB3p3jUaZGMsaLc2 lfk/l5fOXQo9tWCPr/B39b0/+oYHr1jmPCgUFUvvePn5JlKdT9fX0xyTw2nURhGVZkxhKFYJ Z231Y6SedYdyk3l7KyDcp+rxsXxgtURcXyefCblBwao4TGeYVauFqnCkdZekkZCEmfSaiBnX WetiR6nMfhfI8T00nSIn3gyPRqv8nqGFeH4u+zkEtxnVlMy/wnBbI6hXei79L0MwhT1Y9Zzy YFQDrNqsi/O/quaRBU+5uPdqj2Z+SPsmPxv/y/WZgXNzgavjpHtpIC9PqehHO7CpbxO07xLT DfVca9tOM4denTqXs4MLt+lrCHElZZ56DMyz9zxHAVP9ei4kZkbCJ0Pi7uR2l+a9haCc13LJ Z+FfKetd+h+uDR2j2q83r/JSS0tly7k10zJ9v3xkgmfDfOXRRHFL4zdCdn12ORtnB2vlbwst 2aZevb7GyV6b64eQaRMGEVewe+vChuIv46Y8Vq7VUiPPEZ3s9jpfqw4HJtkdc3RmB6Uzq4La t6Sk/fTo+Ts5tsR1ToKsRutbsl7PdXub2t/fJE0jK27eW818/qta8cU5b+o1tXnFplw/Unua uXWcRK3VYwoHZoe5obS6Yr6ROrkfCbXYV2oaqv/NdVPeD6Q6tp5Ifj0MOE/v7qdV1WnyXKPu VKCgI5s5dpZ+b6No1oxVRgfvFdvEh7PLZVkLQ+FwbkZgjtxBT3NWoVCRcub7vxS0UW5yp/IF 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 zwlnqRZY2m7+vj7vff6k9wvW8ypmqt5NKJ0zs8y+LhudmWssjc0D8gqov+lnuTeD+8KhX8td xicp+6MRyTv6fjWPz1vOm45VFm/REe0Eifl8u799AMVOXN2HMIGnkE0bizpXg1bdUayeU50f J7+PkXz4+NGggEyAcLAZ3xctUC5pJLpvWJpm5+QsrNB9QrzxwIIT+eWux5xRkDa9HY2YkHzm q7STOqJW2B/ui/GzubyD64l5tGQVzkBvmWbe9WkfekUM91FEtQfPkeMsA+ohUzb3uNsvSeez MF+CNNAUOW6lHUZn6PZtcC6M1uptI9xpoPOiT5nSOnT7B9FotwCUoV7iF/6XMD9OMXE8/X1R mUk49HBQLljraW7STBSKZJoiCnHkFHfh306jipadfuoMerxVGiVScOtnlOlpsvg0xAt3/kaK zNgb6IIfeW/m/7dFFgYTrT5jONSF8/hzVx6XKF2ZjEbryBaWSDuiisb9l+4bQmNp1qe8ttQx VvzO5FE+SSGg44FTs3lhPWkG0CY5SETmLHpDz1s98nULnhJJl45QJV6ZN5MFJJqeI4/5URbr lKHMxsRkDdKKWFxV/bN8ku9rmiAIYzQoVA+y7byQ8eo1l5sRlxKj7nrcNEYaqhFEmWnrGqjW MpPyuvXcTzCSurc09KrB4wLhuVWCMSoPg6YYFzOqnJcYRSJ+6w4i19QTzKAW0nccwiEZpk4D Sqs1AmoxQpqRBOBotF8ycxrxyRHc7ZPGIfnfuIV3ncATQepXUVsTIfCs+h5zTbqg5giXhdDv TVtci+qOWBtHdhF18Oz6rQTg5mcBdm0p5rEnMcNA1qU7IH7EadgeZRkL89nLvLf5Qp+fFWL5 gY68QKkRwoqWhEJwjN/QhZiGiHSTzhh1EHIBmF6DnEKEcY5WGE/RPcnGUWAtjEQVGES/Xl6Q b+6v7+FfoYqbPF14SJA99+hu/TvL39osgj4sO0na4M6eTCE2jq8lSN7+v79qqP6MVUR5omr4 ygKmeUkC/pw+BsFnHylijXbQCg5p9lKMlMfv3uUDjhEYsx55GEAMlZq1rybb8UBpb4WWu452 ItI1ODICbcPogywftK2oUw2PA0fg7FlKUcnjdNOx09/McqxUWVTnCTRZoD+TCTzOiz/7/Log eifWuWiQp27NQa6tvuh+WFTZfBUtlVdbzFSoXOjYfH/IBXPmdZJ6lY51lL1Kp5Yf97eiBqLZ S8J6kFxSle+KR9cDOU9Ni7A0roVqh3HhPbR2wuKNpUkbYvMC8sRxyfP0c4T/oeGshTKxS04w /EBAD5ojwmgclTxnSnz0T4/jnMxdvQo4ZKxQjI2VmrePy3RS0Jpx/mGRj9iDW8yHnJnQyq/X WRpcQd3eQDSYwQ0JrzTF4ho6zEeRENcr5NsQ3yOKXM7H9qyb01n6ODYOEmU/VveG+GrfJk6/ ieiAw1h1fjhCAI0GTuxX/+ZZx1cZRDwqnRo/iPGs+MlmTQw8HpDYwRyivY3/wDz819UeZvzq /FKoKkqmAHYk3Drg6NgnF/KirvhFGEeZFSJ1lk8S7rzeLDOZ6eeVofzkqyIhriJAJZCJ2KJT py54wdNRlHhxi73x0nHGJedpXk4LVFIlT8SLakipKsw61dxJSwlB8vLUpgDSTs/zN3Lu93XT NcfzE3aTcdNNYO7v5ucZ8qxCa6yXeeg9AdnLTaf9FY5idx8x6Sgc/YUJVjl0HpplSXc2aiq1 D2G1QT2nsd2gyTX5EF+2epJpr5o+RpIhPqzau7LKmbdqC+Gssxnw+BFIzh/Uf9EIcSeqgf4z I53OFf4K6zdVXqJ7CcQ/nKYvYs2ijMVkPy5tD7DiUrp8RurZfX+aJQ/5ThJiwmRzWc7tDVm3 os6tKzVsTaxi3onAcBH262PIeGQHTBcSN0zYc6u+F0xYjGiIl5kjqw24Z0yvu3A4DZUROXAg 5w8xBmFiDkI7b/YnF/hi4Xa6/NRx8Ud8qZbphF4ensvaeN4OsnMDYQGvYVWWJWsmGp0PnHn9 i41Axgs389cpYgbKLSwm6vuv2SOWkODg2brJ7sYNRCkVCxrbMSQyJblV7X3htcQ5SPgGcePG PZr8Dr/g4xgjTTWx5qgIY2az2gGysV7uUbUEEY3BM8nNQEMlCeIKPWY7Dk38f4R4eSgtMKyI G0UkJG41rZdWfycckpmf3P5BVqeyGSOVkFzRri9d5GfjvuhtmvvrCVUC7A3scQUfVjpE6dQ3 pIQlRM7Mt0W/y7PXKg/ZpRit8wGS1Xk6Vjh5EtsMvzWlbVMhol74+0fee8uTdhYX/n9nPm7L RpVvNvPu7GZFPLsjC+5n/SvnR7zwjUXMMoHZ4sncYPScZHBLmoLkv+IY9QFZTNwK/z49P6re ZPP+lv6a3jW0zcl2AOGL8mlxJDH+4Pc8vIag+84a0nTd+JqE4yfGzwk+0GYxGXem4u4b6vS6 nIXtt9Jna9b1INRb4iA2sOIx0uwj1pb/HKq2AcDf9R1HLmjrfoumIHnoRPSiLZRidu3VhOj7 90B+kjDObvcd03mxM6cV9x5/Cz+0BGX961nZucpEhK9cKt4+f3EsE8Ln5+HZ2rUYx+Exleq3 +MswfbikC7VzLw6/b0lcbLyAcgiyEPlKeYeyGW+H+c3MsfW5DrUOr2//lV+zr8nXXO4cP//X kuf7Xf/naMvxHR/94oLmMvydfl6Ed7l4XWSyE7ZmbEHugKnd+cub5zm9fMA3QVPUHoFbMokx 8+Z7WdVtcESabQ4yPCUUi7meDuz5Lll7UIXsfE9GwFSwHTpu1+2g97iDRYH3EX8P/9h/sUAz iIiFF6Of8BOZJA1OPRv+RwgceuiNe+FInneMekeP7OrcZOBhg/BmAe6ZMhXN0gMnXKEp0HH8 j7j1CRtsJnpv50vK+6WWn9h8lG9N62K2VnuOfors91G85DQ5V2C737Iid5O91pZWcTBqF1rf 7TrZNQUr9FhOEWQPFrFsIgYeP7FMojw+Su1/i4uZCryECtOrNmXmlhzYgnLdAG+oaYSMyqwP 57DQ0QJYd83JwHrPNhllIKmsPOqxF5B+mS5yLWJwraPShu8PUFTRzmv6klvFfaIvWZRYLjak 2YBAoPbRf23wiOmtOGFY+9GDeHwNMuRF5W8tu1djh5FoUBZAW+Bjxx0+4j5d/pTzI6aFQOmM UGbV8ntI8m/wjcpiR3QQWEF9DtsYD0okfFMDYlpPGpDxJelQARsusJepSM3jEtnqVXYJXFNt NC2HkKDxJCodjXkzJMB9E/GmpNZSVvu/AeszMIdpG0MY8oeYm/poeAe6GNCtzLbd71h79Kno h0CZqi51oxIxic3SMjcK2m1trbtiGKzrng4Wlc5WIXIetkS3eYlRtyjE2iQoAT1yHYmYXrgO rnC2uaJx5HHK787l/vZL/KgKybLFHLyDm4GhofwVXuzzNFh/ospPnOrCCVqmIHj/hXcOIDBj fufzVCWWlYobN0hGjWAwQeEhiCQb+brm49EW/6E0imnE07Fqu0AGE2R8Pqu0wqbLhd92MIHi 4Yjp44t3Z4K9+y2ZwYNZ9nEmTv1z+oHwtt4Fe2N4gjNV2uq36xOSYTy0NqSsk+Ele50h3PCX 4v053qB8WtHyJ2I8EgnLYa/1bDQj2D0ofrm2aWLZ0Ji+bvE/zR51l4KtWLuSgon5PSYyGJ12 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 From owner-svn-src-all@freebsd.org Fri Jul 10 06:46:43 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 042C2360E4E; Fri, 10 Jul 2020 06:46:43 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B33VV68n6z4CMB; Fri, 10 Jul 2020 06:46:42 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B34271DF25; Fri, 10 Jul 2020 06:46:42 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06A6kggJ015297; Fri, 10 Jul 2020 06:46:42 GMT (envelope-from mjg@FreeBSD.org) Received: (from mjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06A6kgnX015296; Fri, 10 Jul 2020 06:46:42 GMT (envelope-from mjg@FreeBSD.org) Message-Id: <202007100646.06A6kgnX015296@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mjg set sender to mjg@FreeBSD.org using -f From: Mateusz Guzik Date: Fri, 10 Jul 2020 06:46:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363068 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: mjg X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 363068 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 06:46:43 -0000 Author: mjg Date: Fri Jul 10 06:46:42 2020 New Revision: 363068 URL: https://svnweb.freebsd.org/changeset/base/363068 Log: vfs: avoid spurious memcpy in vfs_statfs It is quite often called for the very same buffer. Modified: head/sys/kern/vfs_mount.c Modified: head/sys/kern/vfs_mount.c ============================================================================== --- head/sys/kern/vfs_mount.c Fri Jul 10 00:45:34 2020 (r363067) +++ head/sys/kern/vfs_mount.c Fri Jul 10 06:46:42 2020 (r363068) @@ -2173,7 +2173,8 @@ __vfs_statfs(struct mount *mp, struct statfs *sbp) * Filesystems only fill in part of the structure for updates, we * have to read the entirety first to get all content. */ - memcpy(sbp, &mp->mnt_stat, sizeof(*sbp)); + if (sbp != &mp->mnt_stat) + memcpy(sbp, &mp->mnt_stat, sizeof(*sbp)); /* * Set these in case the underlying filesystem fails to do so. From owner-svn-src-all@freebsd.org Fri Jul 10 06:47:59 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 00952361088; Fri, 10 Jul 2020 06:47:59 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B33Wy6FfRz4CPk; Fri, 10 Jul 2020 06:47:58 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B9E001DE38; Fri, 10 Jul 2020 06:47:58 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06A6lwWI015393; Fri, 10 Jul 2020 06:47:58 GMT (envelope-from mjg@FreeBSD.org) Received: (from mjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06A6lwCE015392; Fri, 10 Jul 2020 06:47:58 GMT (envelope-from mjg@FreeBSD.org) Message-Id: <202007100647.06A6lwCE015392@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mjg set sender to mjg@FreeBSD.org using -f From: Mateusz Guzik Date: Fri, 10 Jul 2020 06:47:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363069 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: mjg X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 363069 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 06:47:59 -0000 Author: mjg Date: Fri Jul 10 06:47:58 2020 New Revision: 363069 URL: https://svnweb.freebsd.org/changeset/base/363069 Log: vfs: depessimize getfsstat when only the count is requested This avoids relocking mountlist_mtx for each entry. Modified: head/sys/kern/vfs_syscalls.c Modified: head/sys/kern/vfs_syscalls.c ============================================================================== --- head/sys/kern/vfs_syscalls.c Fri Jul 10 06:46:42 2020 (r363068) +++ head/sys/kern/vfs_syscalls.c Fri Jul 10 06:47:58 2020 (r363069) @@ -441,7 +441,46 @@ restart: tofree = sfsp = *buf = malloc(maxcount * sizeof(struct statfs), M_STATFS, M_WAITOK); } + count = 0; + + /* + * If there is no target buffer they only want the count. + * + * This could be TAILQ_FOREACH but it is open-coded to match the original + * code below. + */ + if (sfsp == NULL) { + mtx_lock(&mountlist_mtx); + for (mp = TAILQ_FIRST(&mountlist); mp != NULL; mp = nmp) { + if (prison_canseemount(td->td_ucred, mp) != 0) { + nmp = TAILQ_NEXT(mp, mnt_list); + continue; + } +#ifdef MAC + if (mac_mount_check_stat(td->td_ucred, mp) != 0) { + nmp = TAILQ_NEXT(mp, mnt_list); + continue; + } +#endif + count++; + nmp = TAILQ_NEXT(mp, mnt_list); + } + mtx_unlock(&mountlist_mtx); + *countp = count; + return (0); + } + + /* + * They want the entire thing. + * + * Short-circuit the corner case of no room for anything, avoids + * relocking below. + */ + if (maxcount < 1) { + goto out; + } + mtx_lock(&mountlist_mtx); for (mp = TAILQ_FIRST(&mountlist); mp != NULL; mp = nmp) { if (prison_canseemount(td->td_ucred, mp) != 0) { @@ -473,53 +512,55 @@ restart: continue; } } - if (sfsp != NULL && count < maxcount) { - sp = &mp->mnt_stat; - /* - * If MNT_NOWAIT is specified, do not refresh - * the fsstat cache. - */ - if (mode != MNT_NOWAIT) { - error = VFS_STATFS(mp, sp); - if (error != 0) { - mtx_lock(&mountlist_mtx); - nmp = TAILQ_NEXT(mp, mnt_list); - vfs_unbusy(mp); - continue; - } + sp = &mp->mnt_stat; + /* + * If MNT_NOWAIT is specified, do not refresh + * the fsstat cache. + */ + if (mode != MNT_NOWAIT) { + error = VFS_STATFS(mp, sp); + if (error != 0) { + mtx_lock(&mountlist_mtx); + nmp = TAILQ_NEXT(mp, mnt_list); + vfs_unbusy(mp); + continue; } - if (priv_check_cred_vfs_generation(td->td_ucred)) { - sptmp = malloc(sizeof(struct statfs), M_STATFS, - M_WAITOK); - *sptmp = *sp; - sptmp->f_fsid.val[0] = sptmp->f_fsid.val[1] = 0; - prison_enforce_statfs(td->td_ucred, mp, sptmp); - sp = sptmp; - } else - sptmp = NULL; - if (bufseg == UIO_SYSSPACE) { - bcopy(sp, sfsp, sizeof(*sp)); - free(sptmp, M_STATFS); - } else /* if (bufseg == UIO_USERSPACE) */ { - error = copyout(sp, sfsp, sizeof(*sp)); - free(sptmp, M_STATFS); - if (error != 0) { - vfs_unbusy(mp); - return (error); - } + } + if (priv_check_cred_vfs_generation(td->td_ucred)) { + sptmp = malloc(sizeof(struct statfs), M_STATFS, + M_WAITOK); + *sptmp = *sp; + sptmp->f_fsid.val[0] = sptmp->f_fsid.val[1] = 0; + prison_enforce_statfs(td->td_ucred, mp, sptmp); + sp = sptmp; + } else + sptmp = NULL; + if (bufseg == UIO_SYSSPACE) { + bcopy(sp, sfsp, sizeof(*sp)); + free(sptmp, M_STATFS); + } else /* if (bufseg == UIO_USERSPACE) */ { + error = copyout(sp, sfsp, sizeof(*sp)); + free(sptmp, M_STATFS); + if (error != 0) { + vfs_unbusy(mp); + return (error); } - sfsp++; } + sfsp++; count++; + + if (count == maxcount) { + vfs_unbusy(mp); + break; + } + mtx_lock(&mountlist_mtx); nmp = TAILQ_NEXT(mp, mnt_list); vfs_unbusy(mp); } mtx_unlock(&mountlist_mtx); - if (sfsp != NULL && count > maxcount) - *countp = maxcount; - else - *countp = count; +out: + *countp = count; return (0); } From owner-svn-src-all@freebsd.org Fri Jul 10 07:26:51 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id F3E44361D13; Fri, 10 Jul 2020 07:26:50 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B34Np6Dnlz4FBq; Fri, 10 Jul 2020 07:26:50 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B4D6C1E2E7; Fri, 10 Jul 2020 07:26:50 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06A7QoOE039621; Fri, 10 Jul 2020 07:26:50 GMT (envelope-from grehan@FreeBSD.org) Received: (from grehan@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06A7Qok6039620; Fri, 10 Jul 2020 07:26:50 GMT (envelope-from grehan@FreeBSD.org) Message-Id: <202007100726.06A7Qok6039620@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: grehan set sender to grehan@FreeBSD.org using -f From: Peter Grehan Date: Fri, 10 Jul 2020 07:26:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363070 - head/usr.sbin/bhyve X-SVN-Group: head X-SVN-Commit-Author: grehan X-SVN-Commit-Paths: head/usr.sbin/bhyve X-SVN-Commit-Revision: 363070 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 07:26:51 -0000 Author: grehan Date: Fri Jul 10 07:26:50 2020 New Revision: 363070 URL: https://svnweb.freebsd.org/changeset/base/363070 Log: Advertise 64-bit physical-address capability. This fixes a coredump with NetBSD guests when XHCI is configured. On seeing the AC64 flag clear, the NetBSD XHCI driver was only writing to the lower 32-bits of 64-bit physical address registers. The emulation relies on a write to the hi 32-bits to calculate a host virtual address for internal use, and has always supported 64-bit addressing. All other guests were seen to write to both the lo- and hi- address registers, regardless of the AC64 setting. Discussed with: Leon Dang (author) Tested with: Ubuntu 16/18/20, Windows10, OpenBSD UEFI guests. MFC after: 2 weeks. Modified: head/usr.sbin/bhyve/pci_xhci.c Modified: head/usr.sbin/bhyve/pci_xhci.c ============================================================================== --- head/usr.sbin/bhyve/pci_xhci.c Fri Jul 10 06:47:58 2020 (r363069) +++ head/usr.sbin/bhyve/pci_xhci.c Fri Jul 10 07:26:50 2020 (r363070) @@ -2805,7 +2805,8 @@ pci_xhci_init(struct vmctx *ctx, struct pci_devinst *p sc->hcsparams2 = XHCI_SET_HCSP2_ERSTMAX(XHCI_ERST_MAX) | XHCI_SET_HCSP2_IST(0x04); sc->hcsparams3 = 0; /* no latency */ - sc->hccparams1 = XHCI_SET_HCCP1_NSS(1) | /* no 2nd-streams */ + sc->hccparams1 = XHCI_SET_HCCP1_AC64(1) | /* 64-bit addrs */ + XHCI_SET_HCCP1_NSS(1) | /* no 2nd-streams */ XHCI_SET_HCCP1_SPC(1) | /* short packet */ XHCI_SET_HCCP1_MAXPSA(XHCI_STREAMS_MAX); sc->hccparams2 = XHCI_SET_HCCP2_LEC(1) | From owner-svn-src-all@freebsd.org Fri Jul 10 08:25:49 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B4A833637C8; Fri, 10 Jul 2020 08:25:49 +0000 (UTC) (envelope-from pstef@freebsd.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2610:1c1:1:6074::16:84]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "freefall.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B35hs4LQBz4Jq4; Fri, 10 Jul 2020 08:25:49 +0000 (UTC) (envelope-from pstef@freebsd.org) Received: by freefall.freebsd.org (Postfix, from userid 1403) id 8A3E5149E4; Fri, 10 Jul 2020 08:25:49 +0000 (UTC) Date: Fri, 10 Jul 2020 10:25:49 +0200 From: "Piotr P. Stefaniak" Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r363068 - head/sys/kern Message-ID: <20200710082549.GC74062@freefall.freebsd.org> References: <202007100646.06A6kgnX015296@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <202007100646.06A6kgnX015296@repo.freebsd.org> X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 08:25:49 -0000 > */ >- memcpy(sbp, &mp->mnt_stat, sizeof(*sbp)); >+ if (sbp != &mp->mnt_stat) >+ memcpy(sbp, &mp->mnt_stat, sizeof(*sbp)); > Slightly unrelated question: wouldn't it be prudent to incorporate this logic into memcpy? From owner-svn-src-all@freebsd.org Fri Jul 10 08:31:37 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B73C9363AC9; Fri, 10 Jul 2020 08:31:37 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: from mail-wr1-x434.google.com (mail-wr1-x434.google.com [IPv6:2a00:1450:4864:20::434]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B35qY2vtXz4K2m; Fri, 10 Jul 2020 08:31:37 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: by mail-wr1-x434.google.com with SMTP id r12so4993123wrj.13; Fri, 10 Jul 2020 01:31:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=lh7bGPU8c9s+eFe9uuMTRa9i2HBwixWoNS04ade9yuk=; b=jJCA0uMF2nfBpcYFT7V/i0jtrtLuNdlWv8CF81hfRgyGHW1E4eIWqRX0RjfGfO4gkr yO9fY0vEvJRdg4V/Ecr+Xj+i1UzquFDzc5wpQcjrTbGkNwYSfk7DzL+ITEF6BTj8jtCB vpIPAkPsSEMthd6wuJgm5oY7CJ5Cj2mOM15FfxFRcRZ8EmMjbRr4fd/mdt/X6/I3+rPp 4j+gV06tAEXYqXurPqnTbe6sO1WTpPzHVryVXYSVborYJ8T2G3a7SdzgwrE4FlBMcAV5 8O9LXmQ+bc25o0l31gO+qUvhEYREzZIKfRjeUfpVmYwHu9mMUVtlaW56gAVWESerCVxM O7NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=lh7bGPU8c9s+eFe9uuMTRa9i2HBwixWoNS04ade9yuk=; b=CgbySZpqXGCB6LcuuAH4siykMAMiOj/MpuFajSKGAuSUO3bmGOqfEdxtI6mA0NgX0M cP5/Rolxt4g6sNdToWW2gYVjE0JE9aAVkr2pOlmrlW48pJxjMVTX/+bmvyqQx56Qb2Eo xpLLg71/NqZ+hIZNBclSI5CDJ0Kh973HXFQs1p1yjS8SDVdCxpmVlJKrIfbTrjof7g1f 46Tv95Yr2ONFmmhVz6qXD/Wk3Bea8lLi7m9dDK9pMcqiWIhjNbtDXgseDfx/X6smJppd FkhL/fHroO6kU3HCEmtz1rdSLRWvgj89MTFHktj/4elv/u9vRE63P48SPyVR3hU+Y5qs B7oQ== X-Gm-Message-State: AOAM532w85z6S4aANzo8GP3krROAsDyw2MlVQ/QgmMVChxMySK/vkIHP pQCs/7djLRg10aU44NPAeBbC2LTigiPnoXE8DhOBLw== X-Google-Smtp-Source: ABdhPJxmEVj79z+ad03JSCmZzdcoPsXgeOBIomFUFB9szWyumTbj/xBHZMz5PfGXa/fbFzew6CeG6ry213gq/QRrJik= X-Received: by 2002:a05:6000:1290:: with SMTP id f16mr41014723wrx.66.1594369895255; Fri, 10 Jul 2020 01:31:35 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:adf:9d84:0:0:0:0:0 with HTTP; Fri, 10 Jul 2020 01:31:34 -0700 (PDT) In-Reply-To: <20200710082549.GC74062@freefall.freebsd.org> References: <202007100646.06A6kgnX015296@repo.freebsd.org> <20200710082549.GC74062@freefall.freebsd.org> From: Mateusz Guzik Date: Fri, 10 Jul 2020 10:31:34 +0200 Message-ID: Subject: Re: svn commit: r363068 - head/sys/kern To: "Piotr P. Stefaniak" Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4B35qY2vtXz4K2m X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 08:31:37 -0000 On 7/10/20, Piotr P. Stefaniak wrote: >> */ >>- memcpy(sbp, &mp->mnt_stat, sizeof(*sbp)); >>+ if (sbp != &mp->mnt_stat) >>+ memcpy(sbp, &mp->mnt_stat, sizeof(*sbp)); >> > > Slightly unrelated question: wouldn't it be prudent to incorporate this > logic into memcpy? > Calls like that are just abusing the routine and indicate design problems in the consumer. Adding the branch into the routine would add overhead for everyone. However, now that you mention it, it may be prudent to do something like this: dtrace -n 'fbt::memcpy:entry,fbt::memmove:entry /arg1 == arg2/ { @[stack()] = count(); }' and run your favourite workload. -- Mateusz Guzik From owner-svn-src-all@freebsd.org Fri Jul 10 08:37:35 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DAF9E363CD5; Fri, 10 Jul 2020 08:37:35 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B35yR1Ktpz4Kqb; Fri, 10 Jul 2020 08:37:34 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: by mail-wm1-x342.google.com with SMTP id 17so4982177wmo.1; Fri, 10 Jul 2020 01:37:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=XdmVb1jcH6gmU+aFH0vi4PmV0BL6UmkArM8sU1ZYUAE=; b=n+ebrB3U/dl0ArmWHlSxuSpKWJ9QZ/Ars9AIuriYVrrDssM5ZBRWpyswH5FxL4mIya aMfDes4EKNlT/Qmgnpa7XCmN53prBLgiP5LzS4T97Nns6edwG4HKiJ2nHbCEurpc+k4T QhsKJiPH7c2LI13f/gyTSyps7DsHYlt9WLCm+JjNIwxD2BaQnD3ro2jgdZwdC2/luqNO 1L0U8qvRHdjHO/E9AqJGL221utDt91K9O+0j11tZQi9Gslz3jjw20eVGXIy/pX+4bOUG kPf5sVl6pERFhlUzZ6VSwphP4UfhellRB04lJHwE/Xz2UNDGf3UBd2qjAeACPQcRP2G9 w3Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=XdmVb1jcH6gmU+aFH0vi4PmV0BL6UmkArM8sU1ZYUAE=; b=XtkBsXxb8UnYXTGOw1HUmACwVpnfZ5pE+TphbwjGQY6Uy2uac0aMtsyTbnbINRWx+8 TbGVPgJ++NUfQVYIh13OEvwwc4KBi5cFEqwkA9TA96+8fxXhaDUznrbVkMxdznEBBNqD uKm/2zkRqOpN/+OcBMdDoJxuQbUdvDVKQ7acN3cjN5eQ5ZIjJE8CxZGFz39Ea8+1p7Rq F9T5783c+WUmdRyLopTCLx1ZY1fbDf10levtVmPJLWsVndOEIEW4i+cCe/UDtTVcYh5e zB7yRLt7yc2ymlhTQ35wUE3a/CLAwDyHC9836weWrNo8bQKZTJ38xdUDnyaGuLvoiinH xUXw== X-Gm-Message-State: AOAM533WPTL4QkOh12hgstjw4Qwa4Bdab1vQJf9n/mtOl56iNTiERXjI 5y98DsAZQ+Hp5opXYpIGw31PyF95ZeDTv7uxofywOg== X-Google-Smtp-Source: ABdhPJwdwv37I+WY6Ca6BDDSUGyIx3BFAC/PIas2DmriFUyTBTpeatHuDg5SZudq23YPvETZK6eYOVAyP1AJ/tP+Kj0= X-Received: by 2002:a1c:e90d:: with SMTP id q13mr4163326wmc.187.1594370252787; Fri, 10 Jul 2020 01:37:32 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:adf:9d84:0:0:0:0:0 with HTTP; Fri, 10 Jul 2020 01:37:32 -0700 (PDT) In-Reply-To: References: <202007100646.06A6kgnX015296@repo.freebsd.org> <20200710082549.GC74062@freefall.freebsd.org> From: Mateusz Guzik Date: Fri, 10 Jul 2020 10:37:32 +0200 Message-ID: Subject: Re: svn commit: r363068 - head/sys/kern To: "Piotr P. Stefaniak" Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4B35yR1Ktpz4Kqb X-Spamd-Bar: --- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20161025 header.b=n+ebrB3U; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of mjguzik@gmail.com designates 2a00:1450:4864:20::342 as permitted sender) smtp.mailfrom=mjguzik@gmail.com X-Spamd-Result: default: False [-3.76 / 15.00]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.001]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20161025]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; FREEMAIL_FROM(0.00)[gmail.com]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36]; NEURAL_HAM_LONG(-1.04)[-1.037]; TO_DN_SOME(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::342:from]; NEURAL_HAM_SHORT(-0.73)[-0.726]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[gmail.com]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; RCVD_COUNT_TWO(0.00)[2]; RCVD_TLS_ALL(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 08:37:35 -0000 On 7/10/20, Mateusz Guzik wrote: > On 7/10/20, Piotr P. Stefaniak wrote: >>> */ >>>- memcpy(sbp, &mp->mnt_stat, sizeof(*sbp)); >>>+ if (sbp != &mp->mnt_stat) >>>+ memcpy(sbp, &mp->mnt_stat, sizeof(*sbp)); >>> >> >> Slightly unrelated question: wouldn't it be prudent to incorporate this >> logic into memcpy? >> > > Calls like that are just abusing the routine and indicate design > problems in the consumer. > Adding the branch into the routine would add overhead for everyone. > > However, now that you mention it, it may be prudent to do something like > this: > > dtrace -n 'fbt::memcpy:entry,fbt::memmove:entry /arg1 == arg2/ { > @[stack()] = count(); }' > > and run your favourite workload. > Oops, that should be: dtrace -n 'fbt::memcpy:entry,fbt::memmove:entry /arg0 == arg1/ { @[stack()] = count(); }' You can look for other abuse too, here are 0-sized calls: dtrace -n 'fbt::memcpy:entry,fbt::memmove:entry,fbt::memset:entry /arg2 == 0/ { @[probefunc,stack()] = count(); }' -- Mateusz Guzik From owner-svn-src-all@freebsd.org Fri Jul 10 09:01:37 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id EB05B364630; Fri, 10 Jul 2020 09:01:37 +0000 (UTC) (envelope-from pho@holm.cc) Received: from relay05.pair.com (relay05.pair.com [216.92.24.67]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4B36V92JZ5z4LyW; Fri, 10 Jul 2020 09:01:36 +0000 (UTC) (envelope-from pho@holm.cc) Received: from x8.osted.lan (5.186.119.8.cgn.fibianet.dk [5.186.119.8]) by relay05.pair.com (Postfix) with ESMTP id EC04D1A2C43; Fri, 10 Jul 2020 05:01:32 -0400 (EDT) Received: from x8.osted.lan (localhost [127.0.0.1]) by x8.osted.lan (8.15.2/8.15.2) with ESMTPS id 06A91VFF035242 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Fri, 10 Jul 2020 11:01:31 +0200 (CEST) (envelope-from pho@x8.osted.lan) Received: (from pho@localhost) by x8.osted.lan (8.15.2/8.15.2/Submit) id 06A91VqJ035241; Fri, 10 Jul 2020 11:01:31 +0200 (CEST) (envelope-from pho) Date: Fri, 10 Jul 2020 11:01:31 +0200 From: Peter Holm To: Mateusz Guzik Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r363069 - head/sys/kern Message-ID: <20200710090131.GA34716@x8.osted.lan> References: <202007100647.06A6lwCE015392@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <202007100647.06A6lwCE015392@repo.freebsd.org> X-Rspamd-Queue-Id: 4B36V92JZ5z4LyW X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; ASN(0.00)[asn:7859, ipnet:216.92.0.0/16, country:US]; REPLY(-4.00)[] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 09:01:38 -0000 On Fri, Jul 10, 2020 at 06:47:58AM +0000, Mateusz Guzik wrote: > Author: mjg > Date: Fri Jul 10 06:47:58 2020 > New Revision: 363069 > URL: https://svnweb.freebsd.org/changeset/base/363069 > > Log: > vfs: depessimize getfsstat when only the count is requested > > This avoids relocking mountlist_mtx for each entry. > > Modified: > head/sys/kern/vfs_syscalls.c > > Modified: head/sys/kern/vfs_syscalls.c > ============================================================================== > --- head/sys/kern/vfs_syscalls.c Fri Jul 10 06:46:42 2020 (r363068) Could this one be yours? 20200710 09:46:31 all (267/723): procfs.sh panic: lock (sleep mutex) mountlist not locked @ kern/vfs_syscalls.c:561 cpuid = 4 time = 1594367192 KDB: stack backtrace: db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe00377a6910 vpanic() at vpanic+0x182/frame 0xfffffe00377a6960 panic() at panic+0x43/frame 0xfffffe00377a69c0 witness_unlock() at witness_unlock+0x147/frame 0xfffffe00377a6a00 __mtx_unlock_flags() at __mtx_unlock_flags+0x4d/frame 0xfffffe00377a6a30 kern_getfsstat() at kern_getfsstat+0x40b/frame 0xfffffe00377a6ab0 sys_getfsstat() at sys_getfsstat+0x22/frame 0xfffffe00377a6ad0 amd64_syscall() at amd64_syscall+0x159/frame 0xfffffe00377a6bf0 fast_syscall_common() at fast_syscall_common+0x101/frame 0xfffffe00377a6bf0 --- syscall (557, FreeBSD ELF64, sys_getfsstat), rip = 0x80032db1a, rsp = 0x7fffffffd738, rbp = 0x7fffffffd790 --- KDB: enter: panic https://people.freebsd.org/~pho/stress/log/mjguzik030.txt - Peter From owner-svn-src-all@freebsd.org Fri Jul 10 09:01:38 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 87E493642E1; Fri, 10 Jul 2020 09:01:38 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B36VB35kgz4Lny; Fri, 10 Jul 2020 09:01:38 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4EE2A1F829; Fri, 10 Jul 2020 09:01:38 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06A91cYw098736; Fri, 10 Jul 2020 09:01:38 GMT (envelope-from mjg@FreeBSD.org) Received: (from mjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06A91a4C098726; Fri, 10 Jul 2020 09:01:36 GMT (envelope-from mjg@FreeBSD.org) Message-Id: <202007100901.06A91a4C098726@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mjg set sender to mjg@FreeBSD.org using -f From: Mateusz Guzik Date: Fri, 10 Jul 2020 09:01:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363071 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: mjg X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 363071 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 09:01:38 -0000 Author: mjg Date: Fri Jul 10 09:01:36 2020 New Revision: 363071 URL: https://svnweb.freebsd.org/changeset/base/363071 Log: vfs: fix trivial whitespace issues which don't interefere with blame .. even without the -w switch Modified: head/sys/kern/vfs_acl.c head/sys/kern/vfs_bio.c head/sys/kern/vfs_cluster.c head/sys/kern/vfs_export.c head/sys/kern/vfs_hash.c head/sys/kern/vfs_init.c head/sys/kern/vfs_lookup.c head/sys/kern/vfs_mountroot.c head/sys/kern/vfs_subr.c head/sys/kern/vfs_vnops.c Modified: head/sys/kern/vfs_acl.c ============================================================================== --- head/sys/kern/vfs_acl.c Fri Jul 10 07:26:50 2020 (r363070) +++ head/sys/kern/vfs_acl.c Fri Jul 10 09:01:36 2020 (r363071) @@ -89,7 +89,7 @@ acl_copy_oldacl_into_acl(const struct oldacl *source, if (source->acl_cnt < 0 || source->acl_cnt > OLDACL_MAX_ENTRIES) return (EINVAL); - + bzero(dest, sizeof(*dest)); dest->acl_cnt = source->acl_cnt; Modified: head/sys/kern/vfs_bio.c ============================================================================== --- head/sys/kern/vfs_bio.c Fri Jul 10 07:26:50 2020 (r363070) +++ head/sys/kern/vfs_bio.c Fri Jul 10 09:01:36 2020 (r363071) @@ -1336,7 +1336,7 @@ bufshutdown(int show_busybufs) int subiter; #endif - /* + /* * Sync filesystems for shutdown */ wdog_kern_pat(WD_LASTVAL); @@ -1662,7 +1662,7 @@ buf_alloc(struct bufdomain *bd) if (BUF_LOCK(bp, LK_EXCLUSIVE | LK_NOWAIT, NULL) != 0) panic("getnewbuf_empty: Locked buf %p on free queue.", bp); - + KASSERT(bp->b_vp == NULL, ("bp: %p still has vnode %p.", bp, bp->b_vp)); KASSERT((bp->b_flags & (B_DELWRI | B_NOREUSE)) == 0, @@ -1798,7 +1798,7 @@ buf_recycle(struct bufdomain *bd, bool kva) * bremfree: * * Mark the buffer for removal from the appropriate free list. - * + * */ void bremfree(struct buf *bp) @@ -2473,7 +2473,7 @@ bdirty(struct buf *bp) * * Since the buffer is not on a queue, we do not update the numfreebuffers * count. - * + * * The buffer must be on QUEUE_NONE. */ @@ -2734,7 +2734,7 @@ brelse(struct buf *bp) if (bp->b_vp != NULL) brelvp(bp); } - + /* * If the buffer has junk contents signal it and eventually * clean up B_DELWRI and diassociate the vnode so that gbincore() @@ -3823,7 +3823,7 @@ getblk(struct vnode *vp, daddr_t blkno, int size, int * * getblk() also forces a bwrite() for any B_DELWRI buffer whose * B_CACHE bit is clear. - * + * * What this means, basically, is that the caller should use B_CACHE to * determine whether the buffer is fully valid or not and should clear * B_INVAL prior to issuing a read. If the caller intends to validate @@ -4334,7 +4334,7 @@ biowait(struct bio *bp, const char *wchan) void biofinish(struct bio *bp, struct devstat *stat, int error) { - + if (error) { bp->bio_error = error; bp->bio_flags |= BIO_ERROR; @@ -4660,7 +4660,7 @@ vfs_busy_pages(struct buf *bp, int clear_modify) * b_offset itself may be offset from the beginning of the first * page. */ -void +void vfs_bio_set_valid(struct buf *bp, int base, int size) { int i, n; Modified: head/sys/kern/vfs_cluster.c ============================================================================== --- head/sys/kern/vfs_cluster.c Fri Jul 10 07:26:50 2020 (r363070) +++ head/sys/kern/vfs_cluster.c Fri Jul 10 09:01:36 2020 (r363071) @@ -173,7 +173,7 @@ cluster_read(struct vnode *vp, u_quad_t filesize, dadd LK_EXCLUSIVE | LK_NOWAIT, NULL))) { rbp->b_flags |= B_RAM; BUF_UNLOCK(rbp); - } + } } BO_RUNLOCK(bo); if (i >= maxra) { Modified: head/sys/kern/vfs_export.c ============================================================================== --- head/sys/kern/vfs_export.c Fri Jul 10 07:26:50 2020 (r363070) +++ head/sys/kern/vfs_export.c Fri Jul 10 09:01:36 2020 (r363071) @@ -512,7 +512,7 @@ vfs_export_lookup(struct mount *mp, struct sockaddr *n * Verify that a host should have access to a filesystem. */ -int +int vfs_stdcheckexp(struct mount *mp, struct sockaddr *nam, uint64_t *extflagsp, struct ucred **credanonp, int *numsecflavors, int *secflavors) { Modified: head/sys/kern/vfs_hash.c ============================================================================== --- head/sys/kern/vfs_hash.c Fri Jul 10 07:26:50 2020 (r363070) +++ head/sys/kern/vfs_hash.c Fri Jul 10 09:01:36 2020 (r363071) @@ -179,7 +179,6 @@ vfs_hash_insert(struct vnode *vp, u_int hash, int flag } if (vp2 == NULL) break; - } vp->v_hash = hash; LIST_INSERT_HEAD(vfs_hash_bucket(vp->v_mount, hash), vp, v_hashlist); Modified: head/sys/kern/vfs_init.c ============================================================================== --- head/sys/kern/vfs_init.c Fri Jul 10 07:26:50 2020 (r363070) +++ head/sys/kern/vfs_init.c Fri Jul 10 09:01:36 2020 (r363071) @@ -385,7 +385,7 @@ vfs_register(struct vfsconf *vfc) vattr_null(&va_null); once = 1; } - + if (vfc->vfc_version != VFS_VERSION) { printf("ERROR: filesystem %s, unsupported ABI version %x\n", vfc->vfc_name, vfc->vfc_version); Modified: head/sys/kern/vfs_lookup.c ============================================================================== --- head/sys/kern/vfs_lookup.c Fri Jul 10 07:26:50 2020 (r363070) +++ head/sys/kern/vfs_lookup.c Fri Jul 10 09:01:36 2020 (r363071) @@ -709,7 +709,7 @@ lookup(struct nameidata *ndp) struct componentname *cnp = &ndp->ni_cnd; int lkflags_save; int ni_dvp_unlocked; - + /* * Setup: break out flag bits into variables. */ @@ -1302,7 +1302,7 @@ relookup(struct vnode *dvp, struct vnode **vpp, struct /* ASSERT(dvp == ndp->ni_startdir) */ if (cnp->cn_flags & SAVESTART) VREF(dvp); - + if ((cnp->cn_flags & LOCKLEAF) == 0) VOP_UNLOCK(dp); return (0); Modified: head/sys/kern/vfs_mountroot.c ============================================================================== --- head/sys/kern/vfs_mountroot.c Fri Jul 10 07:26:50 2020 (r363070) +++ head/sys/kern/vfs_mountroot.c Fri Jul 10 09:01:36 2020 (r363071) @@ -1049,7 +1049,7 @@ vfs_mountroot(void) struct thread *td; time_t timebase; int error; - + mtx_assert(&Giant, MA_NOTOWNED); TSENTER(); Modified: head/sys/kern/vfs_subr.c ============================================================================== --- head/sys/kern/vfs_subr.c Fri Jul 10 07:26:50 2020 (r363070) +++ head/sys/kern/vfs_subr.c Fri Jul 10 09:01:36 2020 (r363071) @@ -1482,7 +1482,7 @@ static struct kproc_desc vnlru_kp = { }; SYSINIT(vnlru, SI_SUB_KTHREAD_UPDATE, SI_ORDER_FIRST, kproc_start, &vnlru_kp); - + /* * Routines having to do with the management of the vnode table. */ Modified: head/sys/kern/vfs_vnops.c ============================================================================== --- head/sys/kern/vfs_vnops.c Fri Jul 10 07:26:50 2020 (r363070) +++ head/sys/kern/vfs_vnops.c Fri Jul 10 09:01:36 2020 (r363071) @@ -192,7 +192,7 @@ vn_open(struct nameidata *ndp, int *flagp, int cmode, * Common code for vnode open operations via a name lookup. * Lookup the vnode and invoke VOP_CREATE if needed. * Check permissions, and call the VOP_OPEN or VOP_CREATE routine. - * + * * Note that this does NOT free nameidata for the successful case, * due to the NDINIT being done elsewhere. */ @@ -1552,7 +1552,7 @@ vn_stat(struct vnode *vp, struct stat *sb, struct ucre sb->st_birthtim.tv_sec = vap->va_birthtime.tv_sec; sb->st_birthtim.tv_nsec = vap->va_birthtime.tv_nsec; - /* + /* * According to www.opengroup.org, the meaning of st_blksize is * "a filesystem-specific preferred I/O block size for this * object. In some filesystem types, this may vary from file @@ -1561,7 +1561,7 @@ vn_stat(struct vnode *vp, struct stat *sb, struct ucre */ sb->st_blksize = max(PAGE_SIZE, vap->va_blocksize); - + sb->st_flags = vap->va_flags; if (priv_check_cred_vfs_generation(td->td_ucred)) sb->st_gen = 0; From owner-svn-src-all@freebsd.org Fri Jul 10 09:04:37 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id CC40B3644BB; Fri, 10 Jul 2020 09:04:37 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: from mail-wm1-x343.google.com (mail-wm1-x343.google.com [IPv6:2a00:1450:4864:20::343]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B36Yd3cJqz4MMm; Fri, 10 Jul 2020 09:04:37 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: by mail-wm1-x343.google.com with SMTP id l2so5099878wmf.0; Fri, 10 Jul 2020 02:04:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=Vy5mg3lg8entatbZgPkorP51EQzj6SQKyyQosg8h4fE=; b=I/SJv5+Bi0pTt/c3pbrAUTwa/JSfB2A/1NY14ybFpA2Fnlcl8UVAHzgBbMJYJmlc9H 8FnrfQtg1Ld5MGuYYWu7n8Sh1qjqIoYZkT0dzQOGKiJsdktR/Ird3WlDs2ZCPSUmlXGU /oppClfhJCZgF1xCiL9Wyy5REbTKbyjQxOZPrKdlQTuvZUiLAf/RGwmIoE/AlvN+UIDT hxlXcDYHon/3KVHraJJ86ie9kDPyhNE3+ic/HjD8mtY2ekSv69lA+7fxFByW4iODM3dO Mfrv+foATqcO5ePdtm9Fm/9gGdMWA0DfPnIy7l6nfz9ZbJ6kDkKBf8e53dfwlnaNlpLk on4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Vy5mg3lg8entatbZgPkorP51EQzj6SQKyyQosg8h4fE=; b=lKuSmiqJxrhq8cDIuq0t647RAfsDyz/bXhJBB7dTmktl5lFlCyKf7j5F361M5KpSUe 6vx4KYCmISPG8o9FBnWpZC1f7KinpRXSv0muQkE1IIuh28S3xIKqfUvLa0ZQEPFDH2dC 90qzKmYhSaDkotyycTOeRr/0mxri3VdORVNT1ju1eXcBhHEua9a18sQlLqsy0GQtnlga L8PORkJ7FwR7lE/cvvYe07Zzt32GvHPtBsIqR70Qnu9SKZpPkKvxNet8h5ctzgbmCLq/ ecTSrRxWZifscn4PuOML8vLChLbQmGKnFkt7/J9sJY94YhMO7SSJ/8rK0+a39MBREXGD xXVA== X-Gm-Message-State: AOAM530/w2KrjRxG9nW8YAAzyjEXkhXQH1jph5/LCaIiWU0FmAu1/AF+ /5MmZ+k4HsvwHdo/WnwsfcxkhRIXGcJDZjl0o0ZMiA== X-Google-Smtp-Source: ABdhPJwZNmyt4cPEplyVEvLNFglKbGGaY11n5clLldz13bnSB4LqbxuEKlqB2lRcPWbkCGrBiknPuUzS2hvIxr2g3Vc= X-Received: by 2002:a05:600c:2209:: with SMTP id z9mr4111140wml.178.1594371875214; Fri, 10 Jul 2020 02:04:35 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:adf:9d84:0:0:0:0:0 with HTTP; Fri, 10 Jul 2020 02:04:34 -0700 (PDT) In-Reply-To: <20200710090131.GA34716@x8.osted.lan> References: <202007100647.06A6lwCE015392@repo.freebsd.org> <20200710090131.GA34716@x8.osted.lan> From: Mateusz Guzik Date: Fri, 10 Jul 2020 11:04:34 +0200 Message-ID: Subject: Re: svn commit: r363069 - head/sys/kern To: Peter Holm Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4B36Yd3cJqz4MMm X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 09:04:37 -0000 On 7/10/20, Peter Holm wrote: > On Fri, Jul 10, 2020 at 06:47:58AM +0000, Mateusz Guzik wrote: >> Author: mjg >> Date: Fri Jul 10 06:47:58 2020 >> New Revision: 363069 >> URL: https://svnweb.freebsd.org/changeset/base/363069 >> >> Log: >> vfs: depessimize getfsstat when only the count is requested >> >> This avoids relocking mountlist_mtx for each entry. >> >> Modified: >> head/sys/kern/vfs_syscalls.c >> >> Modified: head/sys/kern/vfs_syscalls.c >> ============================================================================== >> --- head/sys/kern/vfs_syscalls.c Fri Jul 10 06:46:42 2020 (r363068) > > Could this one be yours? > > 20200710 09:46:31 all (267/723): procfs.sh > panic: lock (sleep mutex) mountlist not locked @ kern/vfs_syscalls.c:561 > cpuid = 4 > time = 1594367192 > KDB: stack backtrace: > db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame > 0xfffffe00377a6910 > vpanic() at vpanic+0x182/frame 0xfffffe00377a6960 > panic() at panic+0x43/frame 0xfffffe00377a69c0 > witness_unlock() at witness_unlock+0x147/frame 0xfffffe00377a6a00 > __mtx_unlock_flags() at __mtx_unlock_flags+0x4d/frame 0xfffffe00377a6a30 > kern_getfsstat() at kern_getfsstat+0x40b/frame 0xfffffe00377a6ab0 > sys_getfsstat() at sys_getfsstat+0x22/frame 0xfffffe00377a6ad0 > amd64_syscall() at amd64_syscall+0x159/frame 0xfffffe00377a6bf0 > fast_syscall_common() at fast_syscall_common+0x101/frame 0xfffffe00377a6bf0 > --- syscall (557, FreeBSD ELF64, sys_getfsstat), rip = 0x80032db1a, rsp = > 0x7fffffffd738, rbp = 0x7fffffffd790 --- > KDB: enter: panic > > https://people.freebsd.org/~pho/stress/log/mjguzik030.txt > Does this fix it for you? diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index f37a54809e24..2caf09f3412c 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -551,7 +551,7 @@ kern_getfsstat(struct thread *td, struct statfs **buf, size_t bufsize, if (count == maxcount) { vfs_unbusy(mp); - break; + goto out; } mtx_lock(&mountlist_mtx); -- Mateusz Guzik From owner-svn-src-all@freebsd.org Fri Jul 10 09:24:28 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4EE9B3646CD; Fri, 10 Jul 2020 09:24:28 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B370X18Z3z4NBG; Fri, 10 Jul 2020 09:24:28 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 063A51FEAA; Fri, 10 Jul 2020 09:24:28 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06A9ORlT012641; Fri, 10 Jul 2020 09:24:27 GMT (envelope-from mjg@FreeBSD.org) Received: (from mjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06A9ORpG012640; Fri, 10 Jul 2020 09:24:27 GMT (envelope-from mjg@FreeBSD.org) Message-Id: <202007100924.06A9ORpG012640@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mjg set sender to mjg@FreeBSD.org using -f From: Mateusz Guzik Date: Fri, 10 Jul 2020 09:24:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363072 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: mjg X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 363072 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 09:24:28 -0000 Author: mjg Date: Fri Jul 10 09:24:27 2020 New Revision: 363072 URL: https://svnweb.freebsd.org/changeset/base/363072 Log: vfs: fix early termination of kern_getfsstat The kernel would unlock already unlocked mutex if the buffer got filled up before the mount list ended. Reported by: pho Fixes: r363069 ("vfs: depessimize getfsstat when only the count is requested") Modified: head/sys/kern/vfs_syscalls.c Modified: head/sys/kern/vfs_syscalls.c ============================================================================== --- head/sys/kern/vfs_syscalls.c Fri Jul 10 09:01:36 2020 (r363071) +++ head/sys/kern/vfs_syscalls.c Fri Jul 10 09:24:27 2020 (r363072) @@ -551,7 +551,7 @@ restart: if (count == maxcount) { vfs_unbusy(mp); - break; + goto out; } mtx_lock(&mountlist_mtx); From owner-svn-src-all@freebsd.org Fri Jul 10 09:25:55 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C4FFC3649CA; Fri, 10 Jul 2020 09:25:55 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B372B5dcNz4NLR; Fri, 10 Jul 2020 09:25:54 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: by mail-wr1-x443.google.com with SMTP id a6so5208169wrm.4; Fri, 10 Jul 2020 02:25:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=H52lGY3IEINcovmX9keuh/cjqfM0QZ/kDW0+rBen2d0=; b=B+XF5ldlYX/Day3Rlqj7Vwhjf9FNOw8c20NmeTP9ftDq4xxe+dqHPr3PFE7rzoVaFB i4ZSLE6C/Mw75lQPmCb3gpX3HA63C1VZbSK0bSOXmTJJwuf/GmXDEMgLDayOZasUPS5D OcFuZ+Rt2KuDnhe2ErWWOHmNeqpg1hkLvZPdUsJOYeglSCeOuoKJDZjvAGtNEPMzDdDz j2w5XZECO9kcSk6lW28ItvOARi7VTXw4wBA75DtPZk0knGtrpLXTRjJfCCLApPsYIa4k 7RQRI5pLKrAh71nRVIGhTP4xJBSNMUDaQcagjuJSNK9EW2ebzWDjH7qyGiGZ7TPhNP6D 2ODg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=H52lGY3IEINcovmX9keuh/cjqfM0QZ/kDW0+rBen2d0=; b=ZkFfPaZWEKjywS85Xefph3LRR/E7mAHPWJkdA7w2Byl4fp+RXZePsA0yUJ6+FI+RYX 0e0BdulWjujhLFSNRVbjKXp0dHW/EOQXGESDHt6WfUXBkK6mNAPZxEM0nmqB5lnvItZ+ q1SEjQn9VSweDHwW6a7tCR27TzyxPqZAn9sMok3hRElh2h5m5mnR8YAM+qMZxLDqUtCX ltH01D2WatUbG/V96OoHKXiwvsV3PpvwyNRwwbToE8UlHLoWYEIugkA4RjAcNC8A5Ct3 kuEmf6Mq8BQbGyQOomJV80VsrYInmla7dRQzOpVDfTmqEURRxzzAkePQdtQExXTNekT9 Kgww== X-Gm-Message-State: AOAM531cyWilfR/1hjimwbX0FqTmN1jgLYfsiJ+3wfutlCruSfCHLf3A m9UF7l4wz8hZlBhQ/ESpa0t284SGjvfmnGUJaV1BmA== X-Google-Smtp-Source: ABdhPJx9U+r4izDZKWeYJnhGZLKjfRBAU/7k5zg03qqJ1P5q+kTRDSxslNeHOQYcpRGaB9xio47CbnxBsKnFBXWt32o= X-Received: by 2002:adf:ded2:: with SMTP id i18mr67574304wrn.109.1594373153244; Fri, 10 Jul 2020 02:25:53 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:adf:9d84:0:0:0:0:0 with HTTP; Fri, 10 Jul 2020 02:25:52 -0700 (PDT) In-Reply-To: References: <202007100647.06A6lwCE015392@repo.freebsd.org> <20200710090131.GA34716@x8.osted.lan> From: Mateusz Guzik Date: Fri, 10 Jul 2020 11:25:52 +0200 Message-ID: Subject: Re: svn commit: r363069 - head/sys/kern To: Peter Holm Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4B372B5dcNz4NLR X-Spamd-Bar: --- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20161025 header.b=B+XF5ldl; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of mjguzik@gmail.com designates 2a00:1450:4864:20::443 as permitted sender) smtp.mailfrom=mjguzik@gmail.com X-Spamd-Result: default: False [-3.74 / 15.00]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-0.999]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20161025]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; FREEMAIL_FROM(0.00)[gmail.com]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36]; NEURAL_HAM_LONG(-1.04)[-1.035]; TO_DN_SOME(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::443:from]; NEURAL_HAM_SHORT(-0.70)[-0.705]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[gmail.com]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; RCVD_COUNT_TWO(0.00)[2]; RCVD_TLS_ALL(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 09:25:55 -0000 On 7/10/20, Mateusz Guzik wrote: > On 7/10/20, Peter Holm wrote: >> On Fri, Jul 10, 2020 at 06:47:58AM +0000, Mateusz Guzik wrote: >>> Author: mjg >>> Date: Fri Jul 10 06:47:58 2020 >>> New Revision: 363069 >>> URL: https://svnweb.freebsd.org/changeset/base/363069 >>> >>> Log: >>> vfs: depessimize getfsstat when only the count is requested >>> >>> This avoids relocking mountlist_mtx for each entry. >>> >>> Modified: >>> head/sys/kern/vfs_syscalls.c >>> >>> Modified: head/sys/kern/vfs_syscalls.c >>> ============================================================================== >>> --- head/sys/kern/vfs_syscalls.c Fri Jul 10 06:46:42 2020 (r363068) >> >> Could this one be yours? >> >> 20200710 09:46:31 all (267/723): procfs.sh >> panic: lock (sleep mutex) mountlist not locked @ kern/vfs_syscalls.c:561 >> cpuid = 4 >> time = 1594367192 >> KDB: stack backtrace: >> db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame >> 0xfffffe00377a6910 >> vpanic() at vpanic+0x182/frame 0xfffffe00377a6960 >> panic() at panic+0x43/frame 0xfffffe00377a69c0 >> witness_unlock() at witness_unlock+0x147/frame 0xfffffe00377a6a00 >> __mtx_unlock_flags() at __mtx_unlock_flags+0x4d/frame 0xfffffe00377a6a30 >> kern_getfsstat() at kern_getfsstat+0x40b/frame 0xfffffe00377a6ab0 >> sys_getfsstat() at sys_getfsstat+0x22/frame 0xfffffe00377a6ad0 >> amd64_syscall() at amd64_syscall+0x159/frame 0xfffffe00377a6bf0 >> fast_syscall_common() at fast_syscall_common+0x101/frame >> 0xfffffe00377a6bf0 >> --- syscall (557, FreeBSD ELF64, sys_getfsstat), rip = 0x80032db1a, rsp = >> 0x7fffffffd738, rbp = 0x7fffffffd790 --- >> KDB: enter: panic >> >> https://people.freebsd.org/~pho/stress/log/mjguzik030.txt >> > > Does this fix it for you? > > diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c > index f37a54809e24..2caf09f3412c 100644 > --- a/sys/kern/vfs_syscalls.c > +++ b/sys/kern/vfs_syscalls.c > @@ -551,7 +551,7 @@ kern_getfsstat(struct thread *td, struct statfs > **buf, size_t bufsize, > > if (count == maxcount) { > vfs_unbusy(mp); > - break; > + goto out; > } > > mtx_lock(&mountlist_mtx); > Reproduced and verified the above fixes it, committed here: https://svnweb.freebsd.org/changeset/base/363072 -- Mateusz Guzik From owner-svn-src-all@freebsd.org Fri Jul 10 09:34:47 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E1A62364C44; Fri, 10 Jul 2020 09:34:47 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B37DR5jY2z4Nn8; Fri, 10 Jul 2020 09:34:47 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A77161FAF8; Fri, 10 Jul 2020 09:34:47 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06A9YlMi018749; Fri, 10 Jul 2020 09:34:47 GMT (envelope-from andrew@FreeBSD.org) Received: (from andrew@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06A9Yluw018748; Fri, 10 Jul 2020 09:34:47 GMT (envelope-from andrew@FreeBSD.org) Message-Id: <202007100934.06A9Yluw018748@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: andrew set sender to andrew@FreeBSD.org using -f From: Andrew Turner Date: Fri, 10 Jul 2020 09:34:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363073 - head/sys/arm/broadcom/bcm2835 X-SVN-Group: head X-SVN-Commit-Author: andrew X-SVN-Commit-Paths: head/sys/arm/broadcom/bcm2835 X-SVN-Commit-Revision: 363073 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 09:34:47 -0000 Author: andrew Date: Fri Jul 10 09:34:47 2020 New Revision: 363073 URL: https://svnweb.freebsd.org/changeset/base/363073 Log: Split long lines in the Raspberry Pi FB driver Sponsored by: Innovate UK Modified: head/sys/arm/broadcom/bcm2835/bcm2835_fbd.c Modified: head/sys/arm/broadcom/bcm2835/bcm2835_fbd.c ============================================================================== --- head/sys/arm/broadcom/bcm2835/bcm2835_fbd.c Fri Jul 10 09:24:27 2020 (r363072) +++ head/sys/arm/broadcom/bcm2835/bcm2835_fbd.c Fri Jul 10 09:34:47 2020 (r363073) @@ -88,17 +88,20 @@ bcm_fb_init(struct bcmsc_softc *sc, struct bcm2835_fb_ if (bcm2835_mbox_fb_get_bpp(fb) != 0) return (ENXIO); if (fb->bpp < FB_DEPTH) { - device_printf(sc->dev, "changing fb bpp from %d to %d\n", fb->bpp, FB_DEPTH); + device_printf(sc->dev, "changing fb bpp from %d to %d\n", + fb->bpp, FB_DEPTH); fb->bpp = FB_DEPTH; } else - device_printf(sc->dev, "keeping existing fb bpp of %d\n", fb->bpp); + device_printf(sc->dev, "keeping existing fb bpp of %d\n", + fb->bpp); fb->vxres = fb->xres; fb->vyres = fb->yres; fb->xoffset = fb->yoffset = 0; if ((err = bcm2835_mbox_fb_init(fb)) != 0) { - device_printf(sc->dev, "bcm2835_mbox_fb_init failed, err=%d\n", err); + device_printf(sc->dev, "bcm2835_mbox_fb_init failed, err=%d\n", + err); return (ENXIO); } From owner-svn-src-all@freebsd.org Fri Jul 10 09:54:12 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 63F793655F3; Fri, 10 Jul 2020 09:54:12 +0000 (UTC) (envelope-from pho@holm.cc) Received: from relay05.pair.com (relay05.pair.com [216.92.24.67]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4B37fq60l4z4Q1B; Fri, 10 Jul 2020 09:54:11 +0000 (UTC) (envelope-from pho@holm.cc) Received: from x8.osted.lan (5.186.119.8.cgn.fibianet.dk [5.186.119.8]) by relay05.pair.com (Postfix) with ESMTP id D41E51A27D8; Fri, 10 Jul 2020 05:54:10 -0400 (EDT) Received: from x8.osted.lan (localhost [127.0.0.1]) by x8.osted.lan (8.15.2/8.15.2) with ESMTPS id 06A9s7YF035926 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Fri, 10 Jul 2020 11:54:07 +0200 (CEST) (envelope-from pho@x8.osted.lan) Received: (from pho@localhost) by x8.osted.lan (8.15.2/8.15.2/Submit) id 06A9s7Eg035925; Fri, 10 Jul 2020 11:54:07 +0200 (CEST) (envelope-from pho) Date: Fri, 10 Jul 2020 11:54:07 +0200 From: Peter Holm To: Mateusz Guzik Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r363069 - head/sys/kern Message-ID: <20200710095407.GA35896@x8.osted.lan> References: <202007100647.06A6lwCE015392@repo.freebsd.org> <20200710090131.GA34716@x8.osted.lan> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Queue-Id: 4B37fq60l4z4Q1B X-Spamd-Bar: / Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=none (mx1.freebsd.org: domain of pho@holm.cc has no SPF policy when checking 216.92.24.67) smtp.mailfrom=pho@holm.cc X-Spamd-Result: default: False [-0.07 / 15.00]; RCVD_TLS_LAST(0.00)[]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-0.09)[-0.085]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; TO_DN_SOME(0.00)[]; NEURAL_HAM_LONG(-0.51)[-0.508]; MIME_GOOD(-0.10)[text/plain]; DMARC_NA(0.00)[freebsd.org]; AUTH_NA(1.00)[]; RWL_MAILSPIKE_GOOD(0.00)[216.92.24.67:from]; RCVD_COUNT_THREE(0.00)[3]; TO_MATCH_ENVRCPT_SOME(0.00)[]; NEURAL_HAM_SHORT(-0.58)[-0.580]; R_SPF_NA(0.00)[no SPF record]; FREEMAIL_TO(0.00)[gmail.com]; FORGED_SENDER(0.30)[pho@freebsd.org,pho@holm.cc]; RCVD_IN_DNSWL_LOW(-0.10)[216.92.24.67:from]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:7859, ipnet:216.92.0.0/16, country:US]; FROM_NEQ_ENVFROM(0.00)[pho@freebsd.org,pho@holm.cc]; RECEIVED_SPAMHAUS_PBL(0.00)[5.186.119.8:received] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 09:54:12 -0000 On Fri, Jul 10, 2020 at 11:25:52AM +0200, Mateusz Guzik wrote: > On 7/10/20, Mateusz Guzik wrote: > > On 7/10/20, Peter Holm wrote: > >> On Fri, Jul 10, 2020 at 06:47:58AM +0000, Mateusz Guzik wrote: > >>> Author: mjg > >>> Date: Fri Jul 10 06:47:58 2020 > >>> New Revision: 363069 > >>> URL: https://svnweb.freebsd.org/changeset/base/363069 > >>> > >>> Log: > >>> vfs: depessimize getfsstat when only the count is requested > >>> > >>> This avoids relocking mountlist_mtx for each entry. > >>> > >>> Modified: > >>> head/sys/kern/vfs_syscalls.c > >>> > >>> Modified: head/sys/kern/vfs_syscalls.c > >>> ============================================================================== > >>> --- head/sys/kern/vfs_syscalls.c Fri Jul 10 06:46:42 2020 (r363068) > >> > >> Could this one be yours? > >> > >> 20200710 09:46:31 all (267/723): procfs.sh > >> panic: lock (sleep mutex) mountlist not locked @ kern/vfs_syscalls.c:561 > >> cpuid = 4 > >> time = 1594367192 > >> KDB: stack backtrace: > >> db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame > >> 0xfffffe00377a6910 > >> vpanic() at vpanic+0x182/frame 0xfffffe00377a6960 > >> panic() at panic+0x43/frame 0xfffffe00377a69c0 > >> witness_unlock() at witness_unlock+0x147/frame 0xfffffe00377a6a00 > >> __mtx_unlock_flags() at __mtx_unlock_flags+0x4d/frame 0xfffffe00377a6a30 > >> kern_getfsstat() at kern_getfsstat+0x40b/frame 0xfffffe00377a6ab0 > >> sys_getfsstat() at sys_getfsstat+0x22/frame 0xfffffe00377a6ad0 > >> amd64_syscall() at amd64_syscall+0x159/frame 0xfffffe00377a6bf0 > >> fast_syscall_common() at fast_syscall_common+0x101/frame > >> 0xfffffe00377a6bf0 > >> --- syscall (557, FreeBSD ELF64, sys_getfsstat), rip = 0x80032db1a, rsp = > >> 0x7fffffffd738, rbp = 0x7fffffffd790 --- > >> KDB: enter: panic > >> > >> https://people.freebsd.org/~pho/stress/log/mjguzik030.txt > >> > > > > Does this fix it for you? > > > > diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c > > index f37a54809e24..2caf09f3412c 100644 > > --- a/sys/kern/vfs_syscalls.c > > +++ b/sys/kern/vfs_syscalls.c > > @@ -551,7 +551,7 @@ kern_getfsstat(struct thread *td, struct statfs > > **buf, size_t bufsize, > > > > if (count == maxcount) { > > vfs_unbusy(mp); > > - break; > > + goto out; > > } > > > > mtx_lock(&mountlist_mtx); > > > > Reproduced and verified the above fixes it, committed here: > https://svnweb.freebsd.org/changeset/base/363072 > > -- > Mateusz Guzik Yes, thank you. This fixed the problem for me. - Peter From owner-svn-src-all@freebsd.org Fri Jul 10 10:29:50 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E5CDE365BF8; Fri, 10 Jul 2020 10:29:50 +0000 (UTC) (envelope-from lwhsu.freebsd@gmail.com) Received: from mail-yb1-f178.google.com (mail-yb1-f178.google.com [209.85.219.178]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B38Ry4247z4Rky; Fri, 10 Jul 2020 10:29:50 +0000 (UTC) (envelope-from lwhsu.freebsd@gmail.com) Received: by mail-yb1-f178.google.com with SMTP id l19so2468034ybl.1; Fri, 10 Jul 2020 03:29:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Mz6fTyKNj3NGUIzhJPZfJD4NRKbqEURPh2yZXt87jE4=; b=cRXU20aZbbA86EDOv6o5vMeBQEDti4l8ZADDYBb9QJnTOQvs7U57tBd65UblBQ30J5 7pyiq1Ul9wbEmNJ21ZDujuWBXWpNgK0/54FbFPGOTJ+M/y/KQ7DK1JSl85gcjU/PJyqp nlvbmnVykedxwdkDhYdmeLuLQw8slYgTBFLJNbAwQbU7MFJ4ZuXWyM9jBpG1MDNw2K69 6BPNBrrbUlAsfoPnSpNryIlL5DaobGVzgJLWYB695KRKIMw+OiiswrUbdS7wdbR2p1cl nda3IzB8UuZE8W6wrzKCQIZcAgVbR+CnAdEZMqX34Gm/wfysfi5PmOtCHF90Rb6lJH9c k2AQ== X-Gm-Message-State: AOAM530UKuFCAhAp2NKIMMBwSRQTnEWxSfhQfZavxTJQ95/FJoRTtB1q w7SQ9ECHC2Q2rcThHsNKN1ZMYKR608Uq9chr6PTGz/IIWow= X-Google-Smtp-Source: ABdhPJzOJvtfUfkdbXs7ZEmFGqcD3fUEpxgmjKS0uN3Uv3pAvAQz7/fYzHxMNkHWWAmJ+s/Hjqv7orbTY/wRYluc3w8= X-Received: by 2002:a25:c712:: with SMTP id w18mr18722772ybe.127.1594376989414; Fri, 10 Jul 2020 03:29:49 -0700 (PDT) MIME-Version: 1.0 References: <202007100045.06A0jYIX093335@repo.freebsd.org> In-Reply-To: <202007100045.06A0jYIX093335@repo.freebsd.org> From: Li-Wen Hsu Date: Fri, 10 Jul 2020 18:29:38 +0800 Message-ID: Subject: Re: svn commit: r363067 - head/usr.bin/xinstall To: Eugene Grosbein Cc: src-committers , svn-src-all , svn-src-head Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4B38Ry4247z4Rky X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US]; TAGGED_FROM(0.00)[] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 10:29:51 -0000 On Fri, Jul 10, 2020 at 8:45 AM Eugene Grosbein wrote: > > Author: eugen > Date: Fri Jul 10 00:45:34 2020 > New Revision: 363067 > URL: https://svnweb.freebsd.org/changeset/base/363067 > > Log: > install(1): correction after r363064 > > Make it not break if STRIPBIN points to strip version without -o support. > In that case, perform extra copy just like before r363064. Hi Eugene, I'm not sure if this commit or r363064, there are 7 test cases related to install strip are failing these two changes: https://ci.freebsd.org/job/FreeBSD-head-amd64-test/15801/testReport/ Can you help check if the code or the test need fixing? Thanks, Li-Wen From owner-svn-src-all@freebsd.org Fri Jul 10 11:00:43 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E213F3662D0; Fri, 10 Jul 2020 11:00:43 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B397b5jTXz4SWN; Fri, 10 Jul 2020 11:00:43 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8CC7D21008; Fri, 10 Jul 2020 11:00:43 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06AB0hPL068056; Fri, 10 Jul 2020 11:00:43 GMT (envelope-from se@FreeBSD.org) Received: (from se@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06AB0f8s068046; Fri, 10 Jul 2020 11:00:41 GMT (envelope-from se@FreeBSD.org) Message-Id: <202007101100.06AB0f8s068046@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: se set sender to se@FreeBSD.org using -f From: =?UTF-8?Q?Stefan_E=c3=9fer?= Date: Fri, 10 Jul 2020 11:00:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r363074 - in vendor/bc/dist: . include manuals src tests tests/bc X-SVN-Group: vendor X-SVN-Commit-Author: se X-SVN-Commit-Paths: in vendor/bc/dist: . include manuals src tests tests/bc X-SVN-Commit-Revision: 363074 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 11:00:43 -0000 Author: se Date: Fri Jul 10 11:00:40 2020 New Revision: 363074 URL: https://svnweb.freebsd.org/changeset/base/363074 Log: Upgrade to version 3.1.3 This version fixes an incompatibility with GNU bc. Modified: vendor/bc/dist/Makefile.in vendor/bc/dist/NEWS.md vendor/bc/dist/configure.sh vendor/bc/dist/include/vm.h vendor/bc/dist/locale_install.sh vendor/bc/dist/locale_uninstall.sh vendor/bc/dist/manuals/build.md vendor/bc/dist/src/vm.c vendor/bc/dist/tests/bc/stdin.txt vendor/bc/dist/tests/bc/stdin_results.txt vendor/bc/dist/tests/stdin.sh Modified: vendor/bc/dist/Makefile.in ============================================================================== --- vendor/bc/dist/Makefile.in Fri Jul 10 09:34:47 2020 (r363073) +++ vendor/bc/dist/Makefile.in Fri Jul 10 11:00:40 2020 (r363074) @@ -29,7 +29,7 @@ # .POSIX: -VERSION = 3.1.1 +VERSION = 3.1.3 SRC = %%SRC%% OBJ = %%OBJ%% @@ -335,7 +335,7 @@ clean_tests: clean clean_config clean_coverage @$(RM) -f bc.old install_locales: - $(LOCALE_INSTALL) $(NLSPATH) $(MAIN_EXEC) $(DESTDIR) + %%INSTALL_LOCALES%% install_bc_manpage: $(SAFE_INSTALL) $(MANPAGE_INSTALL_ARGS) $(BC_MANPAGE) $(DESTDIR)$(MAN1DIR)/$(BC_MANPAGE_NAME) Modified: vendor/bc/dist/NEWS.md ============================================================================== --- vendor/bc/dist/NEWS.md Fri Jul 10 09:34:47 2020 (r363073) +++ vendor/bc/dist/NEWS.md Fri Jul 10 11:00:40 2020 (r363074) @@ -1,5 +1,25 @@ # News +## 3.1.3 + +This is a production release that fixes one minor bug: if `bc` was invoked like +the following, it would error: + +``` +echo "if (1 < 3) 1" | bc +``` + +Unless users run into this bug, they do not need to upgrade, but it is suggested +that they do. + +## 3.1.2 + +This is a production release that adds a way to install *all* locales. Users do +***NOT*** need to upgrade. + +For package maintainers wishing to make use of the change, just pass `-l` to +`configure.sh`. + ## 3.1.1 This is a production release that adds two Spanish locales. Users do ***NOT*** Modified: vendor/bc/dist/configure.sh ============================================================================== --- vendor/bc/dist/configure.sh Fri Jul 10 09:34:47 2020 (r363073) +++ vendor/bc/dist/configure.sh Fri Jul 10 11:00:40 2020 (r363074) @@ -47,12 +47,12 @@ usage() { printf 'usage: %s -h\n' "$script" printf ' %s --help\n' "$script" - printf ' %s [-bD|-dB|-c] [-EfgGHMNPT] [-O OPT_LEVEL] [-k KARATSUBA_LEN]\n' "$script" + printf ' %s [-bD|-dB|-c] [-EfgGHlMNPT] [-O OPT_LEVEL] [-k KARATSUBA_LEN]\n' "$script" printf ' %s \\\n' "$script" printf ' [--bc-only --disable-dc|--dc-only --disable-bc|--coverage] \\\n' printf ' [--debug --disable-extra-math --disable-generated-tests] \\\n' printf ' [--disable-history --disable-man-pages --disable-nls] \\\n' - printf ' [--disable-prompt --disable-strip] \\\n' + printf ' [--disable-prompt --disable-strip] [--install-all-locales] \\\n' printf ' [--opt=OPT_LEVEL] [--karatsuba-len=KARATSUBA_LEN] \\\n' printf ' [--prefix=PREFIX] [--bindir=BINDIR] [--datarootdir=DATAROOTDIR] \\\n' printf ' [--datadir=DATADIR] [--mandir=MANDIR] [--man1dir=MAN1DIR] \\\n' @@ -98,6 +98,10 @@ usage() { printf ' -k KARATSUBA_LEN, --karatsuba-len KARATSUBA_LEN\n' printf ' Set the karatsuba length to KARATSUBA_LEN (default is 64).\n' printf ' It is an error if KARATSUBA_LEN is not a number or is less than 16.\n' + printf ' -l, --install-all-locales\n' + printf ' Installs all locales, regardless of how many are on the system. This\n' + printf ' option is useful for package maintainers who want to make sure that\n' + printf ' a package contains all of the locales that end users might need.\n' printf ' -M, --disable-man-pages\n' printf ' Disable installing manpages.\n' printf ' -N, --disable-nls\n' @@ -319,8 +323,9 @@ nls=1 prompt=1 force=0 strip_bin=1 +all_locales=0 -while getopts "bBcdDEfgGhHk:MNO:PST-" opt; do +while getopts "bBcdDEfgGhHk:lMNO:PST-" opt; do case "$opt" in b) bc_only=1 ;; @@ -335,6 +340,7 @@ while getopts "bBcdDEfgGhHk:MNO:PST-" opt; do h) usage ;; H) hist=0 ;; k) karatsuba_len="$OPTARG" ;; + l) all_locales=1 ;; M) install_manpages=0 ;; N) nls=0 ;; O) optimization="$OPTARG" ;; @@ -423,6 +429,7 @@ while getopts "bBcdDEfgGhHk:MNO:PST-" opt; do disable-nls) nls=0 ;; disable-prompt) prompt=0 ;; disable-strip) strip_bin=0 ;; + install-all-locales) all_locales=1 ;; help* | bc-only* | dc-only* | coverage* | debug*) usage "No arg allowed for --$arg option" ;; disable-bc* | disable-dc* | disable-extra-math*) @@ -431,6 +438,8 @@ while getopts "bBcdDEfgGhHk:MNO:PST-" opt; do usage "No arg allowed for --$arg option" ;; disable-man-pages* | disable-nls* | disable-strip*) usage "No arg allowed for --$arg option" ;; + install-all-locales*) + usage "No arg allowed for --$arg option" ;; '') break ;; # "--" terminates argument processing * ) usage "Invalid option $LONG_OPTARG" ;; esac @@ -751,8 +760,15 @@ if [ "$nls" -ne 0 ]; then else install_locales_prereqs="" uninstall_locales_prereqs="" + all_locales=0 fi +if [ "$nls" -ne 0 ] && [ "$all_locales" -ne 0 ]; then + install_locales="\$(LOCALE_INSTALL) -l \$(NLSPATH) \$(MAIN_EXEC) \$(DESTDIR)" +else + install_locales="\$(LOCALE_INSTALL) \$(NLSPATH) \$(MAIN_EXEC) \$(DESTDIR)" +fi + if [ "$hist" -eq 1 ]; then set +e @@ -911,6 +927,7 @@ contents=$(replace "$contents" "HOSTCC" "$HOSTCC") contents=$(replace "$contents" "COVERAGE_OUTPUT" "$COVERAGE_OUTPUT") contents=$(replace "$contents" "COVERAGE_PREREQS" "$COVERAGE_PREREQS") contents=$(replace "$contents" "INSTALL_PREREQS" "$install_prereqs") +contents=$(replace "$contents" "INSTALL_LOCALES" "$install_locales") contents=$(replace "$contents" "INSTALL_LOCALES_PREREQS" "$install_locales_prereqs") contents=$(replace "$contents" "UNINSTALL_MAN_PREREQS" "$uninstall_man_prereqs") contents=$(replace "$contents" "UNINSTALL_PREREQS" "$uninstall_prereqs") Modified: vendor/bc/dist/include/vm.h ============================================================================== --- vendor/bc/dist/include/vm.h Fri Jul 10 09:34:47 2020 (r363073) +++ vendor/bc/dist/include/vm.h Fri Jul 10 11:00:40 2020 (r363074) @@ -112,10 +112,10 @@ #if BC_ENABLED -#define BC_S (BC_ENABLED && (vm.flags & BC_FLAG_S)) -#define BC_W (BC_ENABLED && (vm.flags & BC_FLAG_W)) -#define BC_L (BC_ENABLED && (vm.flags & BC_FLAG_L)) -#define BC_G (BC_ENABLED && (vm.flags & BC_FLAG_G)) +#define BC_S (vm.flags & BC_FLAG_S) +#define BC_W (vm.flags & BC_FLAG_W) +#define BC_L (vm.flags & BC_FLAG_L) +#define BC_G (vm.flags & BC_FLAG_G) #endif // BC_ENABLED Modified: vendor/bc/dist/locale_install.sh ============================================================================== --- vendor/bc/dist/locale_install.sh Fri Jul 10 09:34:47 2020 (r363073) +++ vendor/bc/dist/locale_install.sh Fri Jul 10 11:00:40 2020 (r363074) @@ -28,6 +28,9 @@ # usage() { + if [ $# -eq 1 ]; then + printf '%s\n' "$1" + fi printf "usage: %s NLSPATH main_exec [DESTDIR]\n" "$0" 1>&2 exit 1 } @@ -150,6 +153,17 @@ scriptdir=$(dirname "$script") . "$scriptdir/functions.sh" +all_locales=0 + +while getopts "l" opt; do + + case "$opt" in + l) all_locales=1 ; shift ;; + ?) usage "Invalid option $opt" ;; + esac + +done + test "$#" -ge 2 || usage nlspath="$1" @@ -180,19 +194,23 @@ fi for file in $locales_dir/*.msg; do locale=$(basename "$file" ".msg") - loc=$(gen_nlspath "$destdir/$nlspath" "$locale" "$main_exec") - localeexists "$locales" "$locale" "$destdir" - err="$?" + if [ "$all_locales" -eq 0 ]; then - if [ "$err" -eq 0 ]; then - continue + localeexists "$locales" "$locale" "$destdir" + err="$?" + + if [ "$err" -eq 0 ]; then + continue + fi fi if [ -L "$file" ]; then continue fi + loc=$(gen_nlspath "$destdir/$nlspath" "$locale" "$main_exec") + gencatfile "$loc" "$file" done @@ -200,14 +218,18 @@ done for file in $locales_dir/*.msg; do locale=$(basename "$file" ".msg") - loc=$(gen_nlspath "$destdir/$nlspath" "$locale" "$main_exec") - localeexists "$locales" "$locale" "$destdir" - err="$?" + if [ "$all_locales" -eq 0 ]; then - if [ "$err" -eq 0 ]; then - continue + localeexists "$locales" "$locale" "$destdir" + err="$?" + + if [ "$err" -eq 0 ]; then + continue + fi fi + + loc=$(gen_nlspath "$destdir/$nlspath" "$locale" "$main_exec") mkdir -p $(dirname "$loc") Modified: vendor/bc/dist/locale_uninstall.sh ============================================================================== --- vendor/bc/dist/locale_uninstall.sh Fri Jul 10 09:34:47 2020 (r363073) +++ vendor/bc/dist/locale_uninstall.sh Fri Jul 10 11:00:40 2020 (r363074) @@ -59,6 +59,7 @@ fi # This way, we can delete catalogs for locales that we had to install # because they are symlinks. locales=$(gen_nlspath "$destdir/$nlspath" "*" "$main_exec") +locales=$(ls $locales 2> /dev/null) for l in $locales; do rm -f "$l" Modified: vendor/bc/dist/manuals/build.md ============================================================================== --- vendor/bc/dist/manuals/build.md Fri Jul 10 09:34:47 2020 (r363073) +++ vendor/bc/dist/manuals/build.md Fri Jul 10 11:00:40 2020 (r363074) @@ -366,18 +366,18 @@ can be disabled permanently in the build by passing th Both commands are equivalent. -### Long Options +### Locales -By default, `bc` and `dc` support long options like `--mathlib` and -`--interactive`. However, support for these options requires `getopt_long()` -which is not in the POSIX standard. For those platforms that do *not* have -`getopt_long()` it will be disabled automatically, or if you wish to disable -them regardless, you can pass the `-L` flag or the `--disable-long-options` -option to `configure.sh`, as follows: +By default, `bc` and `dc` do not install all locales, but only the enabled +locales. If `DESTDIR` exists and is not empty, then they will install all of +the locales that exist on the system. The `-l` flag or `--install-all-locales` +option skips all of that and just installs all of the locales that `bc` and `dc` +have, regardless. To enable that behavior, you can pass the `-l` flag or the +`--install-all-locales` option to `configure.sh`, as follows: ``` -./configure.sh -L -./configure.sh --disable-long-options +./configure.sh -l +./configure.sh --install-all-locales ``` Both commands are equivalent. Modified: vendor/bc/dist/src/vm.c ============================================================================== --- vendor/bc/dist/src/vm.c Fri Jul 10 09:34:47 2020 (r363073) +++ vendor/bc/dist/src/vm.c Fri Jul 10 11:00:40 2020 (r363074) @@ -602,8 +602,21 @@ restart: else if (BC_ERR(string)) bc_parse_err(&vm.prs, BC_ERROR_PARSE_STRING); #if BC_ENABLED - else if (BC_IS_BC && BC_ERR(BC_PARSE_NO_EXEC(&vm.prs))) - bc_parse_err(&vm.prs, BC_ERROR_PARSE_BLOCK); + else if (BC_IS_BC && BC_ERR(BC_PARSE_NO_EXEC(&vm.prs))) { + + size_t i; + bool good = true; + + for (i = 0; good && i < vm.prs.flags.len; ++i) { + uint16_t flag = *((uint16_t*) bc_vec_item(&vm.prs.flags, i)); + good = ((flag & BC_PARSE_FLAG_BRACE) != BC_PARSE_FLAG_BRACE); + } + + if (good) { + while (BC_PARSE_IF_END(&vm.prs)) bc_vm_process("else {}", true); + } + else bc_parse_err(&vm.prs, BC_ERROR_PARSE_BLOCK); + } #endif // BC_ENABLED } Modified: vendor/bc/dist/tests/bc/stdin.txt ============================================================================== --- vendor/bc/dist/tests/bc/stdin.txt Fri Jul 10 09:34:47 2020 (r363073) +++ vendor/bc/dist/tests/bc/stdin.txt Fri Jul 10 11:00:40 2020 (r363074) @@ -13,3 +13,4 @@ i = 4 read() i *= 5 +if (1 < 3) 1 Modified: vendor/bc/dist/tests/bc/stdin_results.txt ============================================================================== --- vendor/bc/dist/tests/bc/stdin_results.txt Fri Jul 10 09:34:47 2020 (r363073) +++ vendor/bc/dist/tests/bc/stdin_results.txt Fri Jul 10 11:00:40 2020 (r363074) @@ -4,3 +4,4 @@ String /* with partial commentString /* with full comm 7 String with a # hash comment3 20 +1 Modified: vendor/bc/dist/tests/stdin.sh ============================================================================== --- vendor/bc/dist/tests/stdin.sh Fri Jul 10 09:34:47 2020 (r363073) +++ vendor/bc/dist/tests/stdin.sh Fri Jul 10 11:00:40 2020 (r363074) @@ -65,8 +65,16 @@ rm -f "$out" printf 'Running %s stdin tests...' "$d" cat "$testdir/$d/stdin.txt" | "$exe" "$@" "$options" > "$out" 2> /dev/null - diff "$testdir/$d/stdin_results.txt" "$out" + +if [ "$d" = "bc" ]; then + + cat "$testdir/$d/stdin1.txt" | "$exe" "$@" "$options" > "$out" 2> /dev/null + diff "$testdir/$d/stdin1_results.txt" "$out" + + cat "$testdir/$d/stdin2.txt" | "$exe" "$@" "$options" > "$out" 2> /dev/null + diff "$testdir/$d/stdin2_results.txt" "$out" +fi rm -f "$out1" From owner-svn-src-all@freebsd.org Fri Jul 10 11:01:06 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 875E9366A0C; Fri, 10 Jul 2020 11:01:06 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B39821z7sz4Srt; Fri, 10 Jul 2020 11:01:06 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0EBB520B79; Fri, 10 Jul 2020 11:01:06 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06AB15Y3069091; Fri, 10 Jul 2020 11:01:05 GMT (envelope-from se@FreeBSD.org) Received: (from se@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06AB15Mp069090; Fri, 10 Jul 2020 11:01:05 GMT (envelope-from se@FreeBSD.org) Message-Id: <202007101101.06AB15Mp069090@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: se set sender to se@FreeBSD.org using -f From: =?UTF-8?Q?Stefan_E=c3=9fer?= Date: Fri, 10 Jul 2020 11:01:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r363075 - vendor/bc/3.1.3 X-SVN-Group: vendor X-SVN-Commit-Author: se X-SVN-Commit-Paths: vendor/bc/3.1.3 X-SVN-Commit-Revision: 363075 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 11:01:06 -0000 Author: se Date: Fri Jul 10 11:01:05 2020 New Revision: 363075 URL: https://svnweb.freebsd.org/changeset/base/363075 Log: Tag version 3.1.3 Added: vendor/bc/3.1.3/ - copied from r363074, vendor/bc/dist/ From owner-svn-src-all@freebsd.org Fri Jul 10 11:15:11 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5C65F366CD5; Fri, 10 Jul 2020 11:15:11 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B39SH1pkhz4TTr; Fri, 10 Jul 2020 11:15:11 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1E37F20D61; Fri, 10 Jul 2020 11:15:11 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06ABFAgb080362; Fri, 10 Jul 2020 11:15:10 GMT (envelope-from tuexen@FreeBSD.org) Received: (from tuexen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06ABFAUD080361; Fri, 10 Jul 2020 11:15:10 GMT (envelope-from tuexen@FreeBSD.org) Message-Id: <202007101115.06ABFAUD080361@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tuexen set sender to tuexen@FreeBSD.org using -f From: Michael Tuexen Date: Fri, 10 Jul 2020 11:15:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363076 - head/sys/netinet X-SVN-Group: head X-SVN-Commit-Author: tuexen X-SVN-Commit-Paths: head/sys/netinet X-SVN-Commit-Revision: 363076 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 11:15:11 -0000 Author: tuexen Date: Fri Jul 10 11:15:10 2020 New Revision: 363076 URL: https://svnweb.freebsd.org/changeset/base/363076 Log: Fix a use-after-free bug for the userland stack. The kernel stack is not affected. Thanks to Mark Wodrich from Google for finding and reporting the bug. MFC after: 1 week Modified: head/sys/netinet/sctp_indata.c Modified: head/sys/netinet/sctp_indata.c ============================================================================== --- head/sys/netinet/sctp_indata.c Fri Jul 10 11:01:05 2020 (r363075) +++ head/sys/netinet/sctp_indata.c Fri Jul 10 11:15:10 2020 (r363076) @@ -1700,6 +1700,7 @@ sctp_process_a_data_chunk(struct sctp_tcb *stcb, struc int *break_flag, int last_chunk, uint8_t chk_type) { struct sctp_tmit_chunk *chk = NULL; /* make gcc happy */ + struct sctp_stream_in *strm; uint32_t tsn, fsn, gap, mid; struct mbuf *dmbuf; int the_len; @@ -2327,12 +2328,13 @@ finish_express_del: /* All can be removed */ TAILQ_FOREACH_SAFE(control, &asoc->pending_reply_queue, next, ncontrol) { TAILQ_REMOVE(&asoc->pending_reply_queue, control, next); + strm = &asoc->strmin[control->sinfo_stream]; sctp_queue_data_to_stream(stcb, asoc, control, abort_flag, &need_reasm_check); if (*abort_flag) { return (0); } if (need_reasm_check) { - (void)sctp_deliver_reasm_check(stcb, asoc, &asoc->strmin[control->sinfo_stream], SCTP_READ_LOCK_NOT_HELD); + (void)sctp_deliver_reasm_check(stcb, asoc, strm, SCTP_READ_LOCK_NOT_HELD); need_reasm_check = 0; } } @@ -2347,12 +2349,13 @@ finish_express_del: * control->sinfo_tsn > liste->tsn */ TAILQ_REMOVE(&asoc->pending_reply_queue, control, next); + strm = &asoc->strmin[control->sinfo_stream]; sctp_queue_data_to_stream(stcb, asoc, control, abort_flag, &need_reasm_check); if (*abort_flag) { return (0); } if (need_reasm_check) { - (void)sctp_deliver_reasm_check(stcb, asoc, &asoc->strmin[control->sinfo_stream], SCTP_READ_LOCK_NOT_HELD); + (void)sctp_deliver_reasm_check(stcb, asoc, strm, SCTP_READ_LOCK_NOT_HELD); need_reasm_check = 0; } } From owner-svn-src-all@freebsd.org Fri Jul 10 11:27:55 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id ADF2E36709A; Fri, 10 Jul 2020 11:27:55 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B39kz46YVz4VKJ; Fri, 10 Jul 2020 11:27:55 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6C2A221244; Fri, 10 Jul 2020 11:27:55 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06ABRtLH086790; Fri, 10 Jul 2020 11:27:55 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06ABRtZu086788; Fri, 10 Jul 2020 11:27:55 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202007101127.06ABRtZu086788@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Fri, 10 Jul 2020 11:27:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363077 - in head/sys: compat/linuxkpi/common/include/linux sys X-SVN-Group: head X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: in head/sys: compat/linuxkpi/common/include/linux sys X-SVN-Commit-Revision: 363077 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 11:27:55 -0000 Author: hselasky Date: Fri Jul 10 11:27:54 2020 New Revision: 363077 URL: https://svnweb.freebsd.org/changeset/base/363077 Log: Implement the array_size() function in the LinuxKPI. This function basically multiplies its two arguments and returns SIZE_MAX if the result overflows the size_t type. Else the product of the two arguments is returned. Bump the FreeBSD_version to mitigate issues with existing implementation of array_size() in drm-devel-kmod. Discussed with: manu@ MFC after: 1 week Sponsored by: Mellanox Technologies Modified: head/sys/compat/linuxkpi/common/include/linux/overflow.h head/sys/sys/param.h Modified: head/sys/compat/linuxkpi/common/include/linux/overflow.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/linux/overflow.h Fri Jul 10 11:15:10 2020 (r363076) +++ head/sys/compat/linuxkpi/common/include/linux/overflow.h Fri Jul 10 11:27:54 2020 (r363077) @@ -31,6 +31,9 @@ #ifndef __LINUX_OVERFLOW_H__ #define __LINUX_OVERFLOW_H__ +#include +#include + #ifndef __has_builtin #define __has_builtin(x) 0 #endif @@ -45,6 +48,16 @@ #if __has_builtin(__builtin_mul_overflow) #define check_mul_overflow(a, b, c) \ __builtin_mul_overflow(a, b, c) + +static inline size_t +array_size(size_t x, size_t y) +{ + size_t retval; + + if (__builtin_mul_overflow(x, y, &retval)) + retval = SIZE_MAX; + return (retval); +} #else #error "Compiler does not support __builtin_mul_overflow" #endif Modified: head/sys/sys/param.h ============================================================================== --- head/sys/sys/param.h Fri Jul 10 11:15:10 2020 (r363076) +++ head/sys/sys/param.h Fri Jul 10 11:27:54 2020 (r363077) @@ -60,7 +60,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1300100 /* Master, propagated to newvers */ +#define __FreeBSD_version 1300101 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, From owner-svn-src-all@freebsd.org Fri Jul 10 12:06:19 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7778B368688; Fri, 10 Jul 2020 12:06:19 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3BbH2YBWz4XTp; Fri, 10 Jul 2020 12:06:19 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 371B821A33; Fri, 10 Jul 2020 12:06:19 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06AC6IeF011826; Fri, 10 Jul 2020 12:06:18 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06AC6Iah011825; Fri, 10 Jul 2020 12:06:18 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202007101206.06AC6Iah011825@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Fri, 10 Jul 2020 12:06:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363078 - head/sys/compat/linuxkpi/common/include/linux X-SVN-Group: head X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: head/sys/compat/linuxkpi/common/include/linux X-SVN-Commit-Revision: 363078 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 12:06:19 -0000 Author: hselasky Date: Fri Jul 10 12:06:18 2020 New Revision: 363078 URL: https://svnweb.freebsd.org/changeset/base/363078 Log: Implement the bitmap_subset() function in the LinuxKPI. This function checks if the bitmap pointed to by the first argument is a subset of the bitmap pointed to by the second argument. The function returns one on success and zero on failure. MFC after: 1 week Sponsored by: Mellanox Technologies Modified: head/sys/compat/linuxkpi/common/include/linux/bitmap.h Modified: head/sys/compat/linuxkpi/common/include/linux/bitmap.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/linux/bitmap.h Fri Jul 10 11:27:54 2020 (r363077) +++ head/sys/compat/linuxkpi/common/include/linux/bitmap.h Fri Jul 10 12:06:18 2020 (r363078) @@ -244,6 +244,28 @@ bitmap_equal(const unsigned long *pa, return (1); } +static inline int +bitmap_subset(const unsigned long *pa, + const unsigned long *pb, unsigned size) +{ + const unsigned end = BIT_WORD(size); + const unsigned tail = size & (BITS_PER_LONG - 1); + unsigned i; + + for (i = 0; i != end; i++) { + if (pa[i] & ~pb[i]) + return (0); + } + + if (tail) { + const unsigned long mask = BITMAP_LAST_WORD_MASK(tail); + + if (pa[end] & ~pb[end] & mask) + return (0); + } + return (1); +} + static inline void bitmap_complement(unsigned long *dst, const unsigned long *src, const unsigned int size) From owner-svn-src-all@freebsd.org Fri Jul 10 14:56:07 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5B87136B560; Fri, 10 Jul 2020 14:56:07 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3GMC22fTz4hKR; Fri, 10 Jul 2020 14:56:07 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2A6D623B4A; Fri, 10 Jul 2020 14:56:07 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06AEu7eP017609; Fri, 10 Jul 2020 14:56:07 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06AEu6kS017603; Fri, 10 Jul 2020 14:56:06 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007101456.06AEu6kS017603@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Fri, 10 Jul 2020 14:56:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363079 - in head: share/man/man4 sys/modules sys/modules/sctp sys/netinet X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: in head: share/man/man4 sys/modules sys/modules/sctp sys/netinet X-SVN-Commit-Revision: 363079 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 14:56:07 -0000 Author: markj Date: Fri Jul 10 14:56:05 2020 New Revision: 363079 URL: https://svnweb.freebsd.org/changeset/base/363079 Log: Provide support for building SCTP as a loadable module. With this change, a kernel compiled with "options SCTP_SUPPORT" and without "options SCTP" supports dynamic loading of the SCTP stack. Currently sctp.ko cannot be unloaded since some prerequisite teardown logic is not yet implemented. Attempts to unload the module will return EOPNOTSUPP. Discussed with: tuexen MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D21997 Added: head/sys/modules/sctp/ head/sys/modules/sctp/Makefile (contents, props changed) head/sys/netinet/sctp_module.c (contents, props changed) Modified: head/share/man/man4/sctp.4 head/sys/modules/Makefile head/sys/netinet/sctp_os_bsd.h head/sys/netinet/sctp_syscalls.c head/sys/netinet/sctp_usrreq.c Modified: head/share/man/man4/sctp.4 ============================================================================== --- head/share/man/man4/sctp.4 Fri Jul 10 12:06:18 2020 (r363078) +++ head/share/man/man4/sctp.4 Fri Jul 10 14:56:05 2020 (r363079) @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 18, 2020 +.Dd July 9, 2020 .Dt SCTP 4 .Os .Sh NAME @@ -144,8 +144,18 @@ The transport protocol also provides a unordered service as well. The unordered service allows a message to be sent and delivered with no regard to the ordering of any other message. +.Pp +The +.Tn SCTP +kernel implementation may either be compiled into the kernel, or loaded +dynamically as a module. +To support dynamic loading of the stack, the kernel must be compiled +with +.Cd "options SCTP_SUPPORT" . .Ss Extensions -The FreeBSD implementation of +The +.Fx +implementation of .Tn SCTP also supports the following extensions: .Bl -tag -width "sctp partial reliability" @@ -609,3 +619,7 @@ Maximum outgoing SCTP buffer size. .Xr sctp_recvmsg 3 , .Xr sctp_sendmsg 3 , .Xr blackhole 4 +.Sh BUGS +The +.Nm +kernel module cannot be unloaded. Modified: head/sys/modules/Makefile ============================================================================== --- head/sys/modules/Makefile Fri Jul 10 12:06:18 2020 (r363078) +++ head/sys/modules/Makefile Fri Jul 10 14:56:05 2020 (r363079) @@ -319,6 +319,7 @@ SUBDIR= \ ${_safe} \ ${_sbni} \ scc \ + ${_sctp} \ sdhci \ ${_sdhci_acpi} \ sdhci_pci \ @@ -429,6 +430,9 @@ _if_gre= if_gre _ipfw_pmod= ipfw_pmod .if ${KERN_OPTS:MIPSEC_SUPPORT} && !${KERN_OPTS:MIPSEC} _ipsec= ipsec +.endif +.if ${KERN_OPTS:MSCTP_SUPPORT} || ${KERN_OPTS:MSCTP} +_sctp= sctp .endif .endif Added: head/sys/modules/sctp/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/modules/sctp/Makefile Fri Jul 10 14:56:05 2020 (r363079) @@ -0,0 +1,30 @@ +# $FreeBSD$ + +.PATH: ${SRCTOP}/sys/netinet +.PATH: ${SRCTOP}/sys/netinet6 + +KMOD= sctp +SRCS= sctp_asconf.c \ + sctp_auth.c \ + sctp_bsd_addr.c \ + sctp_cc_functions.c \ + sctp_crc32.c \ + sctp_indata.c \ + sctp_input.c \ + sctp_kdtrace.c \ + sctp_module.c \ + sctp_output.c \ + sctp_pcb.c \ + sctp_peeloff.c \ + sctp_ss_functions.c \ + sctp_syscalls.c \ + sctp_sysctl.c \ + sctp_timer.c \ + sctp_usrreq.c \ + sctp6_usrreq.c \ + sctputil.c + +SRCS+= device_if.h bus_if.h vnode_if.h +SRCS+= opt_capsicum.h opt_ktrace.h opt_inet.h opt_inet6.h opt_sctp.h + +.include Added: head/sys/netinet/sctp_module.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/netinet/sctp_module.c Fri Jul 10 14:56:05 2020 (r363079) @@ -0,0 +1,197 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2019-2020 The FreeBSD Foundation + * + * This software was developed by Mark Johnston under sponsorship from + * the FreeBSD Foundation. + * + * 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. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "opt_inet.h" +#include "opt_inet6.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#ifdef INET +extern struct domain inetdomain; + +struct protosw sctp_stream_protosw = { + .pr_type = SOCK_STREAM, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_SCTP, + .pr_flags = PR_CONNREQUIRED|PR_WANTRCVD|PR_LASTHDR, + .pr_input = sctp_input, + .pr_ctlinput = sctp_ctlinput, + .pr_ctloutput = sctp_ctloutput, + .pr_drain = sctp_drain, + .pr_usrreqs = &sctp_usrreqs, +}; + +struct protosw sctp_seqpacket_protosw = { + .pr_type = SOCK_SEQPACKET, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_SCTP, + .pr_flags = PR_WANTRCVD|PR_LASTHDR, + .pr_input = sctp_input, + .pr_ctlinput = sctp_ctlinput, + .pr_ctloutput = sctp_ctloutput, + .pr_drain = sctp_drain, + .pr_usrreqs = &sctp_usrreqs, +}; +#endif + +#ifdef INET6 +extern struct domain inet6domain; + +struct protosw sctp6_stream_protosw = { + .pr_type = SOCK_STREAM, + .pr_domain = &inet6domain, + .pr_protocol = IPPROTO_SCTP, + .pr_flags = PR_CONNREQUIRED|PR_WANTRCVD|PR_LASTHDR, + .pr_input = sctp6_input, + .pr_ctlinput = sctp6_ctlinput, + .pr_ctloutput = sctp_ctloutput, + .pr_init = sctp_init, + .pr_drain = sctp_drain, + .pr_usrreqs = &sctp6_usrreqs, +}; + +struct protosw sctp6_seqpacket_protosw = { + .pr_type = SOCK_SEQPACKET, + .pr_domain = &inet6domain, + .pr_protocol = IPPROTO_SCTP, + .pr_flags = PR_WANTRCVD|PR_LASTHDR, + .pr_input = sctp6_input, + .pr_ctlinput = sctp6_ctlinput, + .pr_ctloutput = sctp_ctloutput, +#ifndef INET /* Do not call initialization and drain routines twice. */ + .pr_init = sctp_init, + .pr_drain = sctp_drain, +#endif + .pr_usrreqs = &sctp6_usrreqs, +}; +#endif + +static int +sctp_module_load(void) +{ + int error; + +#ifdef INET + error = pf_proto_register(PF_INET, &sctp_stream_protosw); + if (error != 0) + return (error); + error = pf_proto_register(PF_INET, &sctp_seqpacket_protosw); + if (error != 0) + return (error); + error = ipproto_register(IPPROTO_SCTP); + if (error != 0) + return (error); +#endif +#ifdef INET6 + error = pf_proto_register(PF_INET6, &sctp6_stream_protosw); + if (error != 0) + return (error); + error = pf_proto_register(PF_INET6, &sctp6_seqpacket_protosw); + if (error != 0) + return (error); + error = ip6proto_register(IPPROTO_SCTP); + if (error != 0) + return (error); +#endif + error = sctp_syscalls_init(); + if (error != 0) + return (error); + return (0); +} + +static int __unused +sctp_module_unload(void) +{ + + (void)sctp_syscalls_uninit(); + +#ifdef INET + (void)ipproto_unregister(IPPROTO_SCTP); + (void)pf_proto_unregister(PF_INET, IPPROTO_SCTP, SOCK_STREAM); + (void)pf_proto_unregister(PF_INET, IPPROTO_SCTP, SOCK_SEQPACKET); +#endif +#ifdef INET6 + (void)ip6proto_unregister(IPPROTO_SCTP); + (void)pf_proto_unregister(PF_INET6, IPPROTO_SCTP, SOCK_STREAM); + (void)pf_proto_unregister(PF_INET6, IPPROTO_SCTP, SOCK_SEQPACKET); +#endif + return (0); +} + +static int +sctp_modload(struct module *module, int cmd, void *arg) +{ + int error; + + switch (cmd) { + case MOD_LOAD: + error = sctp_module_load(); + break; + case MOD_UNLOAD: + /* + * Unloading SCTP is currently unsupported. Currently, SCTP + * iterator threads are not stopped during unload. + */ + error = EOPNOTSUPP; + break; + default: + error = 0; + break; + } + return (error); +} + +static moduledata_t sctp_mod = { + "sctp", + &sctp_modload, + NULL, +}; + +DECLARE_MODULE(sctp, sctp_mod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY); +MODULE_VERSION(sctp, 1); Modified: head/sys/netinet/sctp_os_bsd.h ============================================================================== --- head/sys/netinet/sctp_os_bsd.h Fri Jul 10 12:06:18 2020 (r363078) +++ head/sys/netinet/sctp_os_bsd.h Fri Jul 10 14:56:05 2020 (r363079) @@ -45,9 +45,12 @@ __FBSDID("$FreeBSD$"); #include "opt_sctp.h" #include +#include +#include #include #include #include +#include #include #include #include @@ -85,7 +88,6 @@ __FBSDID("$FreeBSD$"); #include #ifdef INET6 -#include #include #include #include @@ -476,5 +478,8 @@ sctp_get_mbuf_for_msg(unsigned int space_needed, #endif #define SCTP_IS_LISTENING(inp) ((inp->sctp_flags & SCTP_PCB_FLAGS_ACCEPTING) != 0) + +int sctp_syscalls_init(void); +int sctp_syscalls_uninit(void); #endif Modified: head/sys/netinet/sctp_syscalls.c ============================================================================== --- head/sys/netinet/sctp_syscalls.c Fri Jul 10 12:06:18 2020 (r363078) +++ head/sys/netinet/sctp_syscalls.c Fri Jul 10 14:56:05 2020 (r363079) @@ -69,6 +69,8 @@ __FBSDID("$FreeBSD$"); #include #endif #ifdef COMPAT_FREEBSD32 +#include +#include #include #endif @@ -78,6 +80,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include static struct syscall_helper_data sctp_syscalls[] = { @@ -88,28 +91,52 @@ static struct syscall_helper_data sctp_syscalls[] = { SYSCALL_INIT_LAST }; -static void -sctp_syscalls_init(void *unused __unused) +#ifdef COMPAT_FREEBSD32 +static struct syscall_helper_data sctp32_syscalls[] = { + SYSCALL32_INIT_HELPER_COMPAT(sctp_peeloff), + SYSCALL32_INIT_HELPER_COMPAT(sctp_generic_sendmsg), + SYSCALL32_INIT_HELPER_COMPAT(sctp_generic_sendmsg_iov), + SYSCALL32_INIT_HELPER_COMPAT(sctp_generic_recvmsg), + SYSCALL_INIT_LAST +}; +#endif + +int +sctp_syscalls_init(void) { - int error __unused; + int error; - error = syscall_helper_register(sctp_syscalls, SY_THR_STATIC); - KASSERT((error == 0), - ("%s: syscall_helper_register failed for sctp syscalls", __func__)); + error = syscall_helper_register(sctp_syscalls, SY_THR_STATIC_KLD); + if (error != 0) + return (error); #ifdef COMPAT_FREEBSD32 - error = syscall32_helper_register(sctp_syscalls, SY_THR_STATIC); - KASSERT((error == 0), - ("%s: syscall32_helper_register failed for sctp syscalls", - __func__)); + error = syscall32_helper_register(sctp32_syscalls, SY_THR_STATIC_KLD); + if (error != 0) + return (error); #endif + return (0); } -SYSINIT(sctp_syscalls, SI_SUB_SYSCALLS, SI_ORDER_ANY, sctp_syscalls_init, NULL); +int +sctp_syscalls_uninit(void) +{ + int error; + +#ifdef COMPAT_FREEBSD32 + error = syscall32_helper_unregister(sctp32_syscalls); + if (error != 0) + return (error); +#endif + error = syscall_helper_unregister(sctp_syscalls); + if (error != 0) + return (error); + return (0); +} + /* * SCTP syscalls. * Functionality only compiled in if SCTP is defined in the kernel Makefile, * otherwise all return EOPNOTSUPP. - * XXX: We should make this loadable one day. */ int sys_sctp_peeloff(td, uap) @@ -119,7 +146,7 @@ sys_sctp_peeloff(td, uap) caddr_t name; } */ *uap; { -#if (defined(INET) || defined(INET6)) && defined(SCTP) +#if defined(INET) || defined(INET6) struct file *headfp, *nfp = NULL; struct socket *head, *so; cap_rights_t rights; @@ -181,9 +208,7 @@ done: fdrop(headfp, td); done2: return (error); -#else /* SCTP */ - return (EOPNOTSUPP); -#endif /* SCTP */ +#endif } int @@ -199,7 +224,7 @@ sys_sctp_generic_sendmsg (td, uap) int flags } */ *uap; { -#if (defined(INET) || defined(INET6)) && defined(SCTP) +#if defined(INET) || defined(INET6) struct sctp_sndrcvinfo sinfo, *u_sinfo = NULL; struct socket *so; struct file *fp = NULL; @@ -294,9 +319,7 @@ sctp_bad: sctp_bad2: free(to, M_SONAME); return (error); -#else /* SCTP */ - return (EOPNOTSUPP); -#endif /* SCTP */ +#endif } int @@ -312,7 +335,7 @@ sys_sctp_generic_sendmsg_iov(td, uap) int flags } */ *uap; { -#if (defined(INET) || defined(INET6)) && defined(SCTP) +#if defined(INET) || defined(INET6) struct sctp_sndrcvinfo sinfo, *u_sinfo = NULL; struct socket *so; struct file *fp = NULL; @@ -424,9 +447,7 @@ sctp_bad1: sctp_bad2: free(to, M_SONAME); return (error); -#else /* SCTP */ - return (EOPNOTSUPP); -#endif /* SCTP */ +#endif } int @@ -442,7 +463,7 @@ sys_sctp_generic_recvmsg(td, uap) int *msg_flags } */ *uap; { -#if (defined(INET) || defined(INET6)) && defined(SCTP) +#if defined(INET) || defined(INET6) uint8_t sockbufstore[256]; struct uio auio; struct iovec *iov, *tiov; @@ -572,7 +593,5 @@ out1: fdrop(fp, td); return (error); -#else /* SCTP */ - return (EOPNOTSUPP); -#endif /* SCTP */ +#endif } Modified: head/sys/netinet/sctp_usrreq.c ============================================================================== --- head/sys/netinet/sctp_usrreq.c Fri Jul 10 12:06:18 2020 (r363078) +++ head/sys/netinet/sctp_usrreq.c Fri Jul 10 14:56:05 2020 (r363079) @@ -97,9 +97,9 @@ sctp_init(void) static void sctp_finish(void *unused __unused) { + EVENTHANDLER_DEREGISTER(rt_addrmsg, SCTP_BASE_VAR(eh_tag)); sctp_pcb_finish(); } - VNET_SYSUNINIT(sctp, SI_SUB_PROTO_DOMAIN, SI_ORDER_FOURTH, sctp_finish, NULL); #endif From owner-svn-src-all@freebsd.org Fri Jul 10 15:04:22 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1AE4E36BCC7; Fri, 10 Jul 2020 15:04:22 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from smtp.freebsd.org (smtp.freebsd.org [IPv6:2610:1c1:1:606c::24b:4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3GXj70k8z4jK8; Fri, 10 Jul 2020 15:04:21 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from mx1.sbone.de (mx1.sbone.de [IPv6:2a01:4f8:13b:39f::9f:25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mx1.sbone.de", Issuer "SBone.DE" (not verified)) (Authenticated sender: bz/mail) by smtp.freebsd.org (Postfix) with ESMTPSA id B9EF02DBE8; Fri, 10 Jul 2020 15:04:21 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from mail.sbone.de (mail.sbone.de [IPv6:fde9:577b:c1a9:31::2013:587]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by mx1.sbone.de (Postfix) with ESMTPS id CED938D4A456; Fri, 10 Jul 2020 15:04:19 +0000 (UTC) Received: from content-filter.sbone.de (content-filter.sbone.de [IPv6:fde9:577b:c1a9:31::2013:2742]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sbone.de (Postfix) with ESMTPS id 505B4E70828; Fri, 10 Jul 2020 15:04:19 +0000 (UTC) X-Virus-Scanned: amavisd-new at sbone.de Received: from mail.sbone.de ([IPv6:fde9:577b:c1a9:31::2013:587]) by content-filter.sbone.de (content-filter.sbone.de [fde9:577b:c1a9:31::2013:2742]) (amavisd-new, port 10024) with ESMTP id PhZ7EM9eyZUB; Fri, 10 Jul 2020 15:04:18 +0000 (UTC) Received: from [169.254.55.72] (unknown [IPv6:fde9:577b:c1a9:4902:102b:1215:1599:651a]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sbone.de (Postfix) with ESMTPSA id EE1E8E707AE; Fri, 10 Jul 2020 15:04:17 +0000 (UTC) From: "Bjoern A. Zeeb" To: "Cy Schubert" Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r363061 - in head/usr.sbin/wpa: hostapd wpa_supplicant Date: Fri, 10 Jul 2020 15:04:17 +0000 X-Mailer: MailMate (2.0BETAr6146) Message-ID: In-Reply-To: <202007092301.069N1aof028804@repo.freebsd.org> References: <202007092301.069N1aof028804@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 15:04:22 -0000 On 9 Jul 2020, at 23:01, Cy Schubert wrote: > Author: cy > Date: Thu Jul 9 23:01:36 2020 > New Revision: 363061 > URL: https://svnweb.freebsd.org/changeset/base/363061 > > Log: > Enable support for IEEE 802.11N, 802.11W, 802.11AC and 802.11.AX to > hostapd and wpa_supplicant. Thank you for also doing wpa_supplicant. > Submitted by: bz > MFC after: 2 weeks > Relnotes: yes > Sponsored by: Rubicon Communications, LLC (d/b/a "Netgate") > > Modified: > head/usr.sbin/wpa/hostapd/Makefile > head/usr.sbin/wpa/wpa_supplicant/Makefile From owner-svn-src-all@freebsd.org Fri Jul 10 15:34:49 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D600936C56B; Fri, 10 Jul 2020 15:34:49 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from smtp-out-so.shaw.ca (smtp-out-so.shaw.ca [64.59.136.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "Client", Issuer "CA" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3HCs1CWdz4kmY; Fri, 10 Jul 2020 15:34:48 +0000 (UTC) (envelope-from cy.schubert@cschubert.com) Received: from spqr.komquats.com ([70.67.125.17]) by shaw.ca with ESMTPA id tv2yjPXYZYYpxtv30jCltV; Fri, 10 Jul 2020 09:34:47 -0600 X-Authority-Analysis: v=2.3 cv=OubUNx3t c=1 sm=1 tr=0 a=VFtTW3WuZNDh6VkGe7fA3g==:117 a=VFtTW3WuZNDh6VkGe7fA3g==:17 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=_RQrkK6FrEwA:10 a=6I5d2MoRAAAA:8 a=YxBL1-UpAAAA:8 a=EkcXrb_YAAAA:8 a=F6657g4R3qgFWcjS01sA:9 a=CjuIK1q_8ugA:10 a=IjZwj45LgO3ly-622nXo:22 a=Ia-lj3WSrqcvXOmTRaiG:22 a=LK5xJRSDVpKd5WXXoEvA:22 Received: from slippy.cwsent.com (slippy [IPv6:fc00:1:1:1::5b]) by spqr.komquats.com (Postfix) with ESMTPS id EE5E91405; Fri, 10 Jul 2020 08:34:43 -0700 (PDT) Received: from slippy.cwsent.com (localhost [127.0.0.1]) by slippy.cwsent.com (8.15.2/8.15.2) with ESMTP id 06AFYh7R045975; Fri, 10 Jul 2020 08:34:43 -0700 (PDT) (envelope-from Cy.Schubert@cschubert.com) Received: from slippy (cy@localhost) by slippy.cwsent.com (8.15.2/8.15.2/Submit) with ESMTP id 06AFYhCW045972; Fri, 10 Jul 2020 08:34:43 -0700 (PDT) (envelope-from Cy.Schubert@cschubert.com) Message-Id: <202007101534.06AFYhCW045972@slippy.cwsent.com> X-Authentication-Warning: slippy.cwsent.com: cy owned process doing -bs X-Mailer: exmh version 2.9.0 11/07/2018 with nmh-1.7.1 Reply-to: Cy Schubert From: Cy Schubert X-os: FreeBSD X-Sender: cy@cwsent.com X-URL: http://www.cschubert.com/ To: "Bjoern A. Zeeb" cc: "Cy Schubert" , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r363061 - in head/usr.sbin/wpa: hostapd wpa_supplicant In-reply-to: References: <202007092301.069N1aof028804@repo.freebsd.org> Comments: In-reply-to "Bjoern A. Zeeb" message dated "Fri, 10 Jul 2020 15:04:17 -0000." Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Fri, 10 Jul 2020 08:34:43 -0700 X-CMAE-Envelope: MS4wfKzJNTImE85rH+6xeB8tL0OIzfY3ekPE98c6aGilPw7v8l+o1lzACLjHkAmiaYfGSn0csoKaAW8z9oIjNCN9Oya9i2cn0FUdPye3VuNEbBsKurqa13e/ JrqhcBI9ZNz/vc0O+ISa9AopaRfSdK0NaFDm+fWJkSYbK18Qf2hdBkXXuXQ4bte3q7QFhV0ZnrSiVS+Rw1ikJs8svseMFFvXF+1AlYCxx9DYBJIl1Bl7zvxg pg+/D4rewo3b2SQRP2nlqxs29k2MBTJBPEaZaub1XgROV3qD1IngF/WzMyz2uOeWaOIV6xEPsKxD9ikdgm+HLQ== X-Rspamd-Queue-Id: 4B3HCs1CWdz4kmY X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:6327, ipnet:64.59.128.0/20, country:CA] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 15:34:49 -0000 In message , "Bjoern A. Zeeb" writes: > On 9 Jul 2020, at 23:01, Cy Schubert wrote: > > > Author: cy > > Date: Thu Jul 9 23:01:36 2020 > > New Revision: 363061 > > URL: https://svnweb.freebsd.org/changeset/base/363061 > > > > Log: > > Enable support for IEEE 802.11N, 802.11W, 802.11AC and 802.11.AX to > > hostapd and wpa_supplicant. > > Thank you for also doing wpa_supplicant. I'll do the ports next. The wpa_supplicant port is done but yet to be committed. The hostapd port needs a good deal of work to implement options. (I've reinstalled the atheros nic in my sandbox again this morning.) -- Cheers, Cy Schubert FreeBSD UNIX: Web: https://FreeBSD.org NTP: Web: https://nwtime.org The need of the many outweighs the greed of the few. From owner-svn-src-all@freebsd.org Fri Jul 10 16:59:07 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 251AB36E3BE; Fri, 10 Jul 2020 16:59:07 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3K570DM3z4qlN; Fri, 10 Jul 2020 16:59:07 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DAFCB25341; Fri, 10 Jul 2020 16:59:06 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06AGx61j092437; Fri, 10 Jul 2020 16:59:06 GMT (envelope-from tuexen@FreeBSD.org) Received: (from tuexen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06AGx6Xc092435; Fri, 10 Jul 2020 16:59:06 GMT (envelope-from tuexen@FreeBSD.org) Message-Id: <202007101659.06AGx6Xc092435@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tuexen set sender to tuexen@FreeBSD.org using -f From: Michael Tuexen Date: Fri, 10 Jul 2020 16:59:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363080 - head/sys/netinet X-SVN-Group: head X-SVN-Commit-Author: tuexen X-SVN-Commit-Paths: head/sys/netinet X-SVN-Commit-Revision: 363080 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 16:59:07 -0000 Author: tuexen Date: Fri Jul 10 16:59:06 2020 New Revision: 363080 URL: https://svnweb.freebsd.org/changeset/base/363080 Log: Whitespace changes due to upstreaming r363079. Modified: head/sys/netinet/sctp_os_bsd.h head/sys/netinet/sctp_usrreq.c Modified: head/sys/netinet/sctp_os_bsd.h ============================================================================== --- head/sys/netinet/sctp_os_bsd.h Fri Jul 10 14:56:05 2020 (r363079) +++ head/sys/netinet/sctp_os_bsd.h Fri Jul 10 16:59:06 2020 (r363080) @@ -479,7 +479,7 @@ sctp_get_mbuf_for_msg(unsigned int space_needed, #define SCTP_IS_LISTENING(inp) ((inp->sctp_flags & SCTP_PCB_FLAGS_ACCEPTING) != 0) -int sctp_syscalls_init(void); -int sctp_syscalls_uninit(void); +int sctp_syscalls_init(void); +int sctp_syscalls_uninit(void); #endif Modified: head/sys/netinet/sctp_usrreq.c ============================================================================== --- head/sys/netinet/sctp_usrreq.c Fri Jul 10 14:56:05 2020 (r363079) +++ head/sys/netinet/sctp_usrreq.c Fri Jul 10 16:59:06 2020 (r363080) @@ -100,6 +100,7 @@ sctp_finish(void *unused __unused) EVENTHANDLER_DEREGISTER(rt_addrmsg, SCTP_BASE_VAR(eh_tag)); sctp_pcb_finish(); } + VNET_SYSUNINIT(sctp, SI_SUB_PROTO_DOMAIN, SI_ORDER_FOURTH, sctp_finish, NULL); #endif From owner-svn-src-all@freebsd.org Fri Jul 10 17:42:23 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 80B8E36F218; Fri, 10 Jul 2020 17:42:23 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3L332v9Rz4v2B; Fri, 10 Jul 2020 17:42:23 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 47D3425C14; Fri, 10 Jul 2020 17:42:23 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06AHgNim022603; Fri, 10 Jul 2020 17:42:23 GMT (envelope-from eugen@FreeBSD.org) Received: (from eugen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06AHgNNA022602; Fri, 10 Jul 2020 17:42:23 GMT (envelope-from eugen@FreeBSD.org) Message-Id: <202007101742.06AHgNNA022602@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: eugen set sender to eugen@FreeBSD.org using -f From: Eugene Grosbein Date: Fri, 10 Jul 2020 17:42:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363081 - head/usr.bin/xinstall X-SVN-Group: head X-SVN-Commit-Author: eugen X-SVN-Commit-Paths: head/usr.bin/xinstall X-SVN-Commit-Revision: 363081 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 17:42:23 -0000 Author: eugen Date: Fri Jul 10 17:42:22 2020 New Revision: 363081 URL: https://svnweb.freebsd.org/changeset/base/363081 Log: install(1): addition to r363067 Also, make it not break if STRIPBIN points to strip version without -o support and destination does not exist before installing. Reported by: lwhsu MFC after: 1 month X-MFC-With: 363064 Modified: head/usr.bin/xinstall/xinstall.c Modified: head/usr.bin/xinstall/xinstall.c ============================================================================== --- head/usr.bin/xinstall/xinstall.c Fri Jul 10 16:59:06 2020 (r363080) +++ head/usr.bin/xinstall/xinstall.c Fri Jul 10 17:42:22 2020 (r363081) @@ -1350,9 +1350,9 @@ strip(const char *to_name, const char *from_name, char /* NOTREACHED */ } if (status != 0) { - (void)unlink(to_name); if (from_name != NULL) return (0); + (void)unlink(to_name); errx(EX_SOFTWARE, "strip command %s failed on %s", stripbin, to_name); } From owner-svn-src-all@freebsd.org Fri Jul 10 18:19:05 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9F77A370034; Fri, 10 Jul 2020 18:19:05 +0000 (UTC) (envelope-from vmaffione@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3LsP3kK4z3SsR; Fri, 10 Jul 2020 18:19:05 +0000 (UTC) (envelope-from vmaffione@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5EB8D26307; Fri, 10 Jul 2020 18:19:05 +0000 (UTC) (envelope-from vmaffione@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06AIJ5kN041533; Fri, 10 Jul 2020 18:19:05 GMT (envelope-from vmaffione@FreeBSD.org) Received: (from vmaffione@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06AIJ55F041532; Fri, 10 Jul 2020 18:19:05 GMT (envelope-from vmaffione@FreeBSD.org) Message-Id: <202007101819.06AIJ55F041532@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: vmaffione set sender to vmaffione@FreeBSD.org using -f From: Vincenzo Maffione Date: Fri, 10 Jul 2020 18:19:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363082 - stable/12/sys/net X-SVN-Group: stable-12 X-SVN-Commit-Author: vmaffione X-SVN-Commit-Paths: stable/12/sys/net X-SVN-Commit-Revision: 363082 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 18:19:05 -0000 Author: vmaffione Date: Fri Jul 10 18:19:04 2020 New Revision: 363082 URL: https://svnweb.freebsd.org/changeset/base/363082 Log: MFC r362633, r362633 iflib: netmap: add per-tx-queue netmap support Reviewed by: gallatin Differential Revision: https://reviews.freebsd.org/D25253 Modified: stable/12/sys/net/iflib.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/net/iflib.c ============================================================================== --- stable/12/sys/net/iflib.c Fri Jul 10 17:42:22 2020 (r363081) +++ stable/12/sys/net/iflib.c Fri Jul 10 18:19:04 2020 (r363082) @@ -1240,7 +1240,9 @@ iflib_netmap_timer_adjust(if_ctx_t ctx, iflib_txq_t tx uint16_t txqid; txqid = txq->ift_id; - kring = NA(ctx->ifc_ifp)->tx_rings[txqid]; + kring = netmap_kring_on(NA(ctx->ifc_ifp), txqid, NR_TX); + if (kring == NULL) + return; if (kring->nr_hwcur != nm_next(kring->nr_hwtail, kring->nkr_num_slots - 1)) { bus_dmamap_sync(txq->ift_ifdi->idi_tag, txq->ift_ifdi->idi_map, @@ -3737,28 +3739,18 @@ _task_fn_tx(void *context) { iflib_txq_t txq = context; if_ctx_t ctx = txq->ift_ctx; -#if defined(ALTQ) || defined(DEV_NETMAP) if_t ifp = ctx->ifc_ifp; -#endif int abdicate = ctx->ifc_sysctl_tx_abdicate; #ifdef IFLIB_DIAGNOSTICS txq->ift_cpu_exec_count[curcpu]++; #endif - if (!(if_getdrvflags(ctx->ifc_ifp) & IFF_DRV_RUNNING)) + if (!(if_getdrvflags(ifp) & IFF_DRV_RUNNING)) return; #ifdef DEV_NETMAP - if (if_getcapenable(ifp) & IFCAP_NETMAP) { - bus_dmamap_sync(txq->ift_ifdi->idi_tag, txq->ift_ifdi->idi_map, - BUS_DMASYNC_POSTREAD); - if (ctx->isc_txd_credits_update(ctx->ifc_softc, txq->ift_id, false)) - netmap_tx_irq(ifp, txq->ift_id); - if (ctx->ifc_flags & IFC_LEGACY) - IFDI_INTR_ENABLE(ctx); - else - IFDI_TX_QUEUE_INTR_ENABLE(ctx, txq->ift_id); - return; - } + if ((if_getcapenable(ifp) & IFCAP_NETMAP) && + netmap_tx_irq(ifp, txq->ift_id)) + goto skip_ifmp; #endif #ifdef ALTQ if (ALTQ_IS_ENABLED(&ifp->if_snd)) @@ -3773,6 +3765,9 @@ _task_fn_tx(void *context) */ if (abdicate) ifmp_ring_check_drainage(txq->ift_br, TX_BATCH_SIZE); +#ifdef DEV_NETMAP +skip_ifmp: +#endif if (ctx->ifc_flags & IFC_LEGACY) IFDI_INTR_ENABLE(ctx); else From owner-svn-src-all@freebsd.org Fri Jul 10 18:30:53 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C220B370528; Fri, 10 Jul 2020 18:30:53 +0000 (UTC) (envelope-from vmaffione@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3M714pTwz3V9s; Fri, 10 Jul 2020 18:30:53 +0000 (UTC) (envelope-from vmaffione@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6E4792615C; Fri, 10 Jul 2020 18:30:53 +0000 (UTC) (envelope-from vmaffione@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06AIUr1D047774; Fri, 10 Jul 2020 18:30:53 GMT (envelope-from vmaffione@FreeBSD.org) Received: (from vmaffione@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06AIUrGf047773; Fri, 10 Jul 2020 18:30:53 GMT (envelope-from vmaffione@FreeBSD.org) Message-Id: <202007101830.06AIUrGf047773@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: vmaffione set sender to vmaffione@FreeBSD.org using -f From: Vincenzo Maffione Date: Fri, 10 Jul 2020 18:30:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363083 - stable/12/sys/net X-SVN-Group: stable-12 X-SVN-Commit-Author: vmaffione X-SVN-Commit-Paths: stable/12/sys/net X-SVN-Commit-Revision: 363083 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 18:30:53 -0000 Author: vmaffione Date: Fri Jul 10 18:30:53 2020 New Revision: 363083 URL: https://svnweb.freebsd.org/changeset/base/363083 Log: MFC r362622 iflib: netmap: add support for partial ring openings Reviewed by: gallatin Differential Revision: https://reviews.freebsd.org/D25254 Modified: stable/12/sys/net/iflib.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/net/iflib.c ============================================================================== --- stable/12/sys/net/iflib.c Fri Jul 10 18:19:04 2020 (r363082) +++ stable/12/sys/net/iflib.c Fri Jul 10 18:30:53 2020 (r363083) @@ -1194,7 +1194,7 @@ iflib_netmap_attach(if_ctx_t ctx) return (netmap_attach(&na)); } -static void +static int iflib_netmap_txq_init(if_ctx_t ctx, iflib_txq_t txq) { struct netmap_adapter *na = NA(ctx->ifc_ifp); @@ -1202,7 +1202,7 @@ iflib_netmap_txq_init(if_ctx_t ctx, iflib_txq_t txq) slot = netmap_reset(na, NR_TX, txq->ift_id, 0); if (slot == NULL) - return; + return (0); for (int i = 0; i < ctx->ifc_softc_ctx.isc_ntxd[0]; i++) { /* @@ -1216,21 +1216,24 @@ iflib_netmap_txq_init(if_ctx_t ctx, iflib_txq_t txq) netmap_load_map(na, txq->ift_buf_tag, txq->ift_sds.ifsd_map[i], NMB(na, slot + si)); } + return (1); } -static void +static int iflib_netmap_rxq_init(if_ctx_t ctx, iflib_rxq_t rxq) { struct netmap_adapter *na = NA(ctx->ifc_ifp); - struct netmap_kring *kring = na->rx_rings[rxq->ifr_id]; + struct netmap_kring *kring; struct netmap_slot *slot; uint32_t nm_i; slot = netmap_reset(na, NR_RX, rxq->ifr_id, 0); if (slot == NULL) - return; + return (0); + kring = na->rx_rings[rxq->ifr_id]; nm_i = netmap_idx_n2k(kring, 0); netmap_fl_refill(rxq, kring, nm_i, true); + return (1); } static void @@ -1261,8 +1264,8 @@ iflib_netmap_timer_adjust(if_ctx_t ctx, iflib_txq_t tx #define iflib_netmap_detach(ifp) netmap_detach(ifp) #else -#define iflib_netmap_txq_init(ctx, txq) -#define iflib_netmap_rxq_init(ctx, rxq) +#define iflib_netmap_txq_init(ctx, txq) (0) +#define iflib_netmap_rxq_init(ctx, rxq) (0) #define iflib_netmap_detach(ifp) #define iflib_netmap_attach(ctx) (0) @@ -2417,10 +2420,8 @@ iflib_init_locked(if_ctx_t ctx) IFDI_INIT(ctx); MPASS(if_getdrvflags(ifp) == i); for (i = 0, rxq = ctx->ifc_rxqs; i < sctx->isc_nrxqsets; i++, rxq++) { - /* XXX this should really be done on a per-queue basis */ - if (if_getcapenable(ifp) & IFCAP_NETMAP) { - MPASS(rxq->ifr_id == i); - iflib_netmap_rxq_init(ctx, rxq); + if (iflib_netmap_rxq_init(ctx, rxq) > 0) { + /* This rxq is in netmap mode. Skip normal init. */ continue; } for (j = 0, fl = rxq->ifr_fl; j < rxq->ifr_nfl; j++, fl++) { From owner-svn-src-all@freebsd.org Fri Jul 10 19:54:05 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id AF4673720E1; Fri, 10 Jul 2020 19:54:05 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3Nz14CRfz3ZZG; Fri, 10 Jul 2020 19:54:05 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 739DC273DA; Fri, 10 Jul 2020 19:54:05 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06AJs5N5003101; Fri, 10 Jul 2020 19:54:05 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06AJs5sj003100; Fri, 10 Jul 2020 19:54:05 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007101954.06AJs5sj003100@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Fri, 10 Jul 2020 19:54:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363084 - head/contrib/netcat X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: head/contrib/netcat X-SVN-Commit-Revision: 363084 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 19:54:05 -0000 Author: markj Date: Fri Jul 10 19:54:04 2020 New Revision: 363084 URL: https://svnweb.freebsd.org/changeset/base/363084 Log: Add a --sctp flag to nc. The change adds an SCTP mode akin to UDP mode. This is handy for doing smoke testing of SCTP. Use a long option to minimize the risk of option conflicts with OpenBSD. For bonus points, this change unbreaks --no-tcpopt by adding a missing case required by getopt_long(). Reviewed by: delphij, tuexen MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D25610 Modified: head/contrib/netcat/nc.1 head/contrib/netcat/netcat.c Modified: head/contrib/netcat/nc.1 ============================================================================== --- head/contrib/netcat/nc.1 Fri Jul 10 18:30:53 2020 (r363083) +++ head/contrib/netcat/nc.1 Fri Jul 10 19:54:04 2020 (r363084) @@ -41,6 +41,7 @@ .Op Fl I Ar length .Op Fl i Ar interval .Op Fl -no-tcpopt +.Op Fl -sctp .Op Fl O Ar length .Op Fl P Ar proxy_username .Op Fl p Ar source_port @@ -187,6 +188,8 @@ hostnames or ports. Disables the use of TCP options on the socket, by setting the boolean TCP_NOOPT socket option. +.It Fl -sctp +Use SCTP instead of the default option of TCP. .It Fl O Ar length Specifies the size of the TCP send buffer. .It Fl P Ar proxy_username Modified: head/contrib/netcat/netcat.c ============================================================================== --- head/contrib/netcat/netcat.c Fri Jul 10 18:30:53 2020 (r363083) +++ head/contrib/netcat/netcat.c Fri Jul 10 19:54:04 2020 (r363084) @@ -93,6 +93,7 @@ int FreeBSD_Mflag; /* Measure using stats(3) */ int Nflag; /* shutdown() network socket */ int nflag; /* Don't do name look up */ int FreeBSD_Oflag; /* Do not use TCP options */ +int FreeBSD_sctp; /* Use SCTP */ char *Pflag; /* Proxy username */ char *pflag; /* Localport flag */ int rflag; /* Random ports flag */ @@ -160,6 +161,7 @@ main(int argc, char *argv[]) char unix_dg_tmp_socket_buf[UNIX_DG_TMP_SOCKET_SIZE]; struct option longopts[] = { { "no-tcpopt", no_argument, &FreeBSD_Oflag, 1 }, + { "sctp", no_argument, &FreeBSD_sctp, 1 }, { NULL, 0, NULL, 0 } }; @@ -324,6 +326,9 @@ main(int argc, char *argv[]) if (Tflag < 0 || Tflag > 255 || errstr || errno) errx(1, "illegal tos value %s", optarg); break; + case 0: + /* Long option. */ + break; default: usage(1); } @@ -354,6 +359,12 @@ main(int argc, char *argv[]) errx(1, "cannot use -z and -l"); if (!lflag && kflag) errx(1, "must use -l with -k"); + if (FreeBSD_sctp) { + if (uflag) + errx(1, "cannot use -u and --sctp"); + if (family == AF_UNIX) + errx(1, "cannot use -U and --sctp"); + } /* Get name of temporary socket for unix datagram client */ if ((family == AF_UNIX) && uflag && !lflag) { @@ -373,7 +384,8 @@ main(int argc, char *argv[]) memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_family = family; hints.ai_socktype = uflag ? SOCK_DGRAM : SOCK_STREAM; - hints.ai_protocol = uflag ? IPPROTO_UDP : IPPROTO_TCP; + hints.ai_protocol = uflag ? IPPROTO_UDP : + FreeBSD_sctp ? IPPROTO_SCTP : IPPROTO_TCP; if (nflag) hints.ai_flags |= AI_NUMERICHOST; } @@ -382,6 +394,9 @@ main(int argc, char *argv[]) if (uflag) errx(1, "no proxy support for UDP mode"); + if (FreeBSD_sctp) + errx(1, "no proxy support for SCTP mode"); + if (lflag) errx(1, "no proxy support for listen"); @@ -1424,6 +1439,7 @@ help(void) \t-N Shutdown the network socket after EOF on stdin\n\ \t-n Suppress name/port resolutions\n\ \t--no-tcpopt Disable TCP options\n\ + \t--sctp\t SCTP mode\n\ \t-O length TCP send buffer length\n\ \t-P proxyuser\tUsername for proxy authentication\n\ \t-p port\t Specify local port for remote connects\n\ @@ -1442,7 +1458,7 @@ help(void) \t-z Zero-I/O mode [used for scanning]\n\ Port numbers can be individual or ranges: lo-hi [inclusive]\n"); #ifdef IPSEC - fprintf(stderr, "See ipsec_set_policy(3) for -e argument format\n"); + fprintf(stderr, "\tSee ipsec_set_policy(3) for -e argument format\n"); #endif exit(1); } @@ -1482,6 +1498,7 @@ usage(int ret) #else "usage: nc [-46DdFhklNnrStUuvz] [-I length] [-i interval] [-O length]\n" #endif + "\t [--no-tcpopt] [--sctp]\n" "\t [-P proxy_username] [-p source_port] [-s source] [-T ToS]\n" "\t [-V rtable] [-w timeout] [-X proxy_protocol]\n" "\t [-x proxy_address[:port]] [destination] [port]\n"); From owner-svn-src-all@freebsd.org Fri Jul 10 19:58:08 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 93ED03722CD; Fri, 10 Jul 2020 19:58:08 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3P3h3RMvz3b2y; Fri, 10 Jul 2020 19:58:08 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5A17A27162; Fri, 10 Jul 2020 19:58:08 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06AJw8Jd003349; Fri, 10 Jul 2020 19:58:08 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06AJw8rp003348; Fri, 10 Jul 2020 19:58:08 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007101958.06AJw8rp003348@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Fri, 10 Jul 2020 19:58:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363085 - head/contrib/netcat X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: head/contrib/netcat X-SVN-Commit-Revision: 363085 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 19:58:08 -0000 Author: markj Date: Fri Jul 10 19:58:07 2020 New Revision: 363085 URL: https://svnweb.freebsd.org/changeset/base/363085 Log: Adjust .Dd, missed in r363084. MFC with: r363084 Modified: head/contrib/netcat/nc.1 Modified: head/contrib/netcat/nc.1 ============================================================================== --- head/contrib/netcat/nc.1 Fri Jul 10 19:54:04 2020 (r363084) +++ head/contrib/netcat/nc.1 Fri Jul 10 19:58:07 2020 (r363085) @@ -27,7 +27,7 @@ .\" .\" $FreeBSD$ .\" -.Dd August 20, 2019 +.Dd July 10, 2020 .Dt NC 1 .Os .Sh NAME From owner-svn-src-all@freebsd.org Fri Jul 10 19:58:27 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 02387372320; Fri, 10 Jul 2020 19:58:27 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3P4269tZz3bBd; Fri, 10 Jul 2020 19:58:26 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B8A4827163; Fri, 10 Jul 2020 19:58:26 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06AJwQ0K003408; Fri, 10 Jul 2020 19:58:26 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06AJwQmt003407; Fri, 10 Jul 2020 19:58:26 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007101958.06AJwQmt003407@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Fri, 10 Jul 2020 19:58:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363086 - head X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: head X-SVN-Commit-Revision: 363086 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 19:58:27 -0000 Author: markj Date: Fri Jul 10 19:58:26 2020 New Revision: 363086 URL: https://svnweb.freebsd.org/changeset/base/363086 Log: Add a RELNOTES entry for r363084. Modified: head/RELNOTES Modified: head/RELNOTES ============================================================================== --- head/RELNOTES Fri Jul 10 19:58:07 2020 (r363085) +++ head/RELNOTES Fri Jul 10 19:58:26 2020 (r363086) @@ -10,6 +10,9 @@ newline. Entries should be separated by a newline. Changes to this file should not be MFCed. +r363084: + nc(1) now implements SCTP mode, enabled by specifying the --sctp option. + r362158, r362163: struct export_args has changed so that the "user" specified for the -maproot and -mapall exports(5) options may be in more than From owner-svn-src-all@freebsd.org Fri Jul 10 21:41:10 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 557D9374805; Fri, 10 Jul 2020 21:41:10 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3RLZ1cCvz3yVj; Fri, 10 Jul 2020 21:41:10 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1B8718640; Fri, 10 Jul 2020 21:41:10 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06ALf96x065581; Fri, 10 Jul 2020 21:41:09 GMT (envelope-from trasz@FreeBSD.org) Received: (from trasz@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06ALf9Je065580; Fri, 10 Jul 2020 21:41:09 GMT (envelope-from trasz@FreeBSD.org) Message-Id: <202007102141.06ALf9Je065580@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: trasz set sender to trasz@FreeBSD.org using -f From: Edward Tomasz Napierala Date: Fri, 10 Jul 2020 21:41:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363087 - head/sys/compat/linux X-SVN-Group: head X-SVN-Commit-Author: trasz X-SVN-Commit-Paths: head/sys/compat/linux X-SVN-Commit-Revision: 363087 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 21:41:10 -0000 Author: trasz Date: Fri Jul 10 21:41:09 2020 New Revision: 363087 URL: https://svnweb.freebsd.org/changeset/base/363087 Log: Don't emit warnings on MADV_HUGEPAGE; Firefox uses it a lot. MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Modified: head/sys/compat/linux/linux_mmap.c Modified: head/sys/compat/linux/linux_mmap.c ============================================================================== --- head/sys/compat/linux/linux_mmap.c Fri Jul 10 19:58:26 2020 (r363086) +++ head/sys/compat/linux/linux_mmap.c Fri Jul 10 21:41:09 2020 (r363087) @@ -371,7 +371,13 @@ linux_madvise_common(struct thread *td, uintptr_t addr /* Ignored; on FreeBSD huge pages are always on. */ return (0); case LINUX_MADV_NOHUGEPAGE: +#if 0 + /* + * Don't warn - Firefox uses it a lot, and in real Linux it's + * an optional feature. + */ linux_msg(curthread, "unsupported madvise MADV_NOHUGEPAGE"); +#endif return (EINVAL); case LINUX_MADV_DONTDUMP: return (kern_madvise(td, addr, len, MADV_NOCORE)); From owner-svn-src-all@freebsd.org Fri Jul 10 22:59:26 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id CC86C376145; Fri, 10 Jul 2020 22:59:26 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3T4t51nwz43sG; Fri, 10 Jul 2020 22:59:26 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8AC5A94C2; Fri, 10 Jul 2020 22:59:26 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06AMxQ8n013751; Fri, 10 Jul 2020 22:59:26 GMT (envelope-from eugen@FreeBSD.org) Received: (from eugen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06AMxQxA013750; Fri, 10 Jul 2020 22:59:26 GMT (envelope-from eugen@FreeBSD.org) Message-Id: <202007102259.06AMxQxA013750@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: eugen set sender to eugen@FreeBSD.org using -f From: Eugene Grosbein Date: Fri, 10 Jul 2020 22:59:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363088 - head/usr.bin/xinstall/tests X-SVN-Group: head X-SVN-Commit-Author: eugen X-SVN-Commit-Paths: head/usr.bin/xinstall/tests X-SVN-Commit-Revision: 363088 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 22:59:26 -0000 Author: eugen Date: Fri Jul 10 22:59:26 2020 New Revision: 363088 URL: https://svnweb.freebsd.org/changeset/base/363088 Log: Fix the tests for install(1): add support for STRIPBIN's -o option. Reported by: lwhsu MFC after: 1 week Modified: head/usr.bin/xinstall/tests/install_test.sh Modified: head/usr.bin/xinstall/tests/install_test.sh ============================================================================== --- head/usr.bin/xinstall/tests/install_test.sh Fri Jul 10 21:41:09 2020 (r363087) +++ head/usr.bin/xinstall/tests/install_test.sh Fri Jul 10 22:59:26 2020 (r363088) @@ -186,8 +186,12 @@ overwrite_backup_safe_comparing_body() { setup_stripbin() { cat <<\STRIPBIN >stripbin #!/bin/sh -tr z @ <"$1" >"$1.new" && mv -- "$1.new" "$1" +[ "$1" = "-o" ] && dst="$2" && shift 2 +[ "$1" = "--" ] && shift +[ -z "$dst" ] && dst="$1" STRIPBIN + [ "$1" = "true" ] && cmd="cat" || cmd="tr z @" + echo $cmd '<"$1" >"$1.new" && mv -- "$1.new" "$dst"' >>stripbin chmod 755 stripbin export STRIPBIN="$PWD/stripbin" } @@ -253,7 +257,7 @@ strip_changing_overwrite_eq_comparing_body() { atf_test_case strip_noop strip_noop_body() { - export STRIPBIN=true + setup_stripbin true printf 'test\n123\r456\r\n789\0z' >testf atf_check install -s testf copyf [ ! testf -nt copyf ] || atf_fail "bad timestamp" From owner-svn-src-all@freebsd.org Fri Jul 10 23:34:50 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1F69E376C1B; Fri, 10 Jul 2020 23:34:50 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: from mail-pl1-x630.google.com (mail-pl1-x630.google.com [IPv6:2607:f8b0:4864:20::630]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3Tsj5dPKz45Xm; Fri, 10 Jul 2020 23:34:49 +0000 (UTC) (envelope-from yaneurabeya@gmail.com) Received: by mail-pl1-x630.google.com with SMTP id m16so1673474pls.5; Fri, 10 Jul 2020 16:34:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=Y6u2oyGwECo6V28/b0OEJqsmSOffp4T5LgWsoM9sFLk=; b=UI5zudx1GAWDKJnU0hQ5Va08XpcfoqO3TfWQRyv94GQBNrCnN6O1Q2pGJdqW2F3e5h 5ymgxfd5UMMifWh8cxxLrjKa3sLmdMfkOMLMcP8Qe+B4AKdPJBPpkyyMjxbrESFK7zVy 7Psf1noMZIgQGFiw5C3Zt3m+1HniNqWQ/2tmvHFITIhRT3i2gCeqD3I7adHPMbCpEt8t JI2rl3SXVQD5TX3dE4eHE/0nMKhQGBjcFAq70V/vP+FzVZqvu/QU3f3LC4J19BpvxL20 SfEP+bhpTEf2h5MuzESMXAZchAnZxq3mYWnXsKwhrPi6fl52FrLeCK09LNTE4A9gymZ3 Thew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=Y6u2oyGwECo6V28/b0OEJqsmSOffp4T5LgWsoM9sFLk=; b=YW31Gu+CokMMtBEnB4OIEVZHyv9bv1RJvF8IZ3FRXpk4asU0yhRn3AnsOrPiyirwzx qPIXyGT7jGi4OfgwYGhVI1PMyrNm5syCGbN/pjUVvNQKPoLnwvR8Cz1UODaoxi35rThg Hk6UkmZbqMxLG0tOgEDpacqQe96EZ9PdOSrNiasqIFD3/l7vBGSLrTgt+mEFUyueQm+H NU897BSNLUXUyZFOCyXUtaRvfJzvo2pfzz5aBsCUkSn/8hkdaSVZbhwAY2wufLZBh+tX 9L/X33U4lQzktJx/IwU+OUDpD+cBfoVvWCzBxZfuNpgYCKXnj5SV50k5K3XW+WGlGQ6m sasg== X-Gm-Message-State: AOAM532trLM6NkEIcGdSkx6YmX9vGXCys+8ROgCxELXmeq3e3OTp7KVg 0q1X8zMYzXqXt8niwUkUMxyQHoKxxIg= X-Google-Smtp-Source: ABdhPJx9NWHbgU9J3tlFD0ldf1phJQj0U1vb/qPROlxWSh47gGvTqSGD0/kowskYjONw6QGNIUMP+g== X-Received: by 2002:a17:90a:8904:: with SMTP id u4mr8543181pjn.87.1594424086980; Fri, 10 Jul 2020 16:34:46 -0700 (PDT) Received: from [192.168.20.26] (c-73-19-52-228.hsd1.wa.comcast.net. [73.19.52.228]) by smtp.gmail.com with ESMTPSA id x8sm6780401pfn.61.2020.07.10.16.34.46 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Jul 2020 16:34:46 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.80.23.2.2\)) Subject: Re: svn commit: r363088 - head/usr.bin/xinstall/tests From: Enji Cooper In-Reply-To: <202007102259.06AMxQxA013750@repo.freebsd.org> Date: Fri, 10 Jul 2020 16:34:45 -0700 Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Transfer-Encoding: quoted-printable Message-Id: <54EAE812-6AAA-4882-B18E-75ED4FBB6628@gmail.com> References: <202007102259.06AMxQxA013750@repo.freebsd.org> To: Eugene Grosbein X-Mailer: Apple Mail (2.3608.80.23.2.2) X-Rspamd-Queue-Id: 4B3Tsj5dPKz45Xm X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jul 2020 23:34:50 -0000 > On Jul 10, 2020, at 3:59 PM, Eugene Grosbein = wrote: >=20 > Author: eugen > Date: Fri Jul 10 22:59:26 2020 > New Revision: 363088 > URL: https://svnweb.freebsd.org/changeset/base/363088 >=20 > Log: > Fix the tests for install(1): add support for STRIPBIN's -o option. Is this feature now completely gone? Are binaries being stripped = properly in ports, etc? Thanks, -Enji =46rom install(1) on a host running r362553: ENVIRONMENT The install utility checks for the presence of the STRIPBIN = environment variable and if present, uses the assigned value as the program to = run if and when the -s option has been specified. From owner-svn-src-all@freebsd.org Sat Jul 11 01:07:46 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DD4863511E5; Sat, 11 Jul 2020 01:07:46 +0000 (UTC) (envelope-from eugen@freebsd.org) Received: from hz.grosbein.net (hz.grosbein.net [IPv6:2a01:4f8:c2c:26d8::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "hz.grosbein.net", Issuer "hz.grosbein.net" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3Wwy0RqPz4C2R; Sat, 11 Jul 2020 01:07:45 +0000 (UTC) (envelope-from eugen@freebsd.org) Received: from eg.sd.rdtc.ru (eg.sd.rdtc.ru [IPv6:2a03:3100:c:13:0:0:0:5]) by hz.grosbein.net (8.15.2/8.15.2) with ESMTPS id 06B17aBt014133 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 11 Jul 2020 01:07:39 GMT (envelope-from eugen@freebsd.org) X-Envelope-From: eugen@freebsd.org X-Envelope-To: yaneurabeya@gmail.com Received: from [10.58.0.10] (dadvw [10.58.0.10]) by eg.sd.rdtc.ru (8.15.2/8.15.2) with ESMTPS id 06B17WaM017174 (version=TLSv1.2 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Sat, 11 Jul 2020 08:07:32 +0700 (+07) (envelope-from eugen@freebsd.org) Subject: Re: svn commit: r363088 - head/usr.bin/xinstall/tests To: Enji Cooper References: <202007102259.06AMxQxA013750@repo.freebsd.org> <54EAE812-6AAA-4882-B18E-75ED4FBB6628@gmail.com> Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org From: Eugene Grosbein Message-ID: <8ac0c5b6-1045-75a2-b7ff-ea7b76780cf0@freebsd.org> Date: Sat, 11 Jul 2020 08:07:23 +0700 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <54EAE812-6AAA-4882-B18E-75ED4FBB6628@gmail.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_SOFTFAIL autolearn=no autolearn_force=no version=3.4.2 X-Spam-Report: * -2.3 BAYES_00 BODY: Bayes spam probability is 0 to 1% * [score: 0.0000] * 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record * 0.7 SPF_SOFTFAIL SPF: sender does not match SPF record (softfail) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on hz.grosbein.net X-Rspamd-Queue-Id: 4B3Wwy0RqPz4C2R X-Spamd-Bar: / Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [0.00 / 15.00]; ASN(0.00)[asn:24940, ipnet:2a01:4f8::/29, country:DE]; local_wl_from(0.00)[freebsd.org] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 01:07:46 -0000 11.07.2020 6:34, Enji Cooper wrote: >> On Jul 10, 2020, at 3:59 PM, Eugene Grosbein wrote: >> >> Author: eugen >> Date: Fri Jul 10 22:59:26 2020 >> New Revision: 363088 >> URL: https://svnweb.freebsd.org/changeset/base/363088 >> >> Log: >> Fix the tests for install(1): add support for STRIPBIN's -o option. > > Is this feature now completely gone? Are binaries being stripped properly in ports, etc? > Thanks, > -Enji > >>From install(1) on a host running r362553: > > ENVIRONMENT > The install utility checks for the presence of the STRIPBIN environment > variable and if present, uses the assigned value as the program to run if > and when the -s option has been specified. Nothing changed at all for install(1) called without -s option. With this option supplied, install(1) uses "strip -o dst src" instead of making another temporary copy and falls back to previous behaviour if strip/STRIPBIN does not support -o. Please take a look at https://reviews.freebsd.org/D25551 for details. From owner-svn-src-all@freebsd.org Sat Jul 11 01:14:11 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B9A0D351524; Sat, 11 Jul 2020 01:14:11 +0000 (UTC) (envelope-from eugen@grosbein.net) Received: from hz.grosbein.net (hz.grosbein.net [IPv6:2a01:4f8:c2c:26d8::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "hz.grosbein.net", Issuer "hz.grosbein.net" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3X4L5D2gz4CJq; Sat, 11 Jul 2020 01:14:10 +0000 (UTC) (envelope-from eugen@grosbein.net) Received: from eg.sd.rdtc.ru (eg.sd.rdtc.ru [IPv6:2a03:3100:c:13:0:0:0:5]) by hz.grosbein.net (8.15.2/8.15.2) with ESMTPS id 06B1E77F014237 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 11 Jul 2020 01:14:08 GMT (envelope-from eugen@grosbein.net) X-Envelope-From: eugen@grosbein.net X-Envelope-To: yaneurabeya@gmail.com Received: from [10.58.0.10] (dadvw [10.58.0.10]) by eg.sd.rdtc.ru (8.15.2/8.15.2) with ESMTPS id 06B1E4De017770 (version=TLSv1.2 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Sat, 11 Jul 2020 08:14:04 +0700 (+07) (envelope-from eugen@grosbein.net) Subject: Re: svn commit: r363088 - head/usr.bin/xinstall/tests To: Enji Cooper References: <202007102259.06AMxQxA013750@repo.freebsd.org> <54EAE812-6AAA-4882-B18E-75ED4FBB6628@gmail.com> <8ac0c5b6-1045-75a2-b7ff-ea7b76780cf0@freebsd.org> Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org From: Eugene Grosbein Message-ID: <33914205-17ca-3ec3-d425-1e269c6d6470@grosbein.net> Date: Sat, 11 Jul 2020 08:13:53 +0700 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <8ac0c5b6-1045-75a2-b7ff-ea7b76780cf0@freebsd.org> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=0.3 required=5.0 tests=BAYES_00,LOCAL_FROM, SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-Report: * -2.3 BAYES_00 BODY: Bayes spam probability is 0 to 1% * [score: 0.0000] * 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record * -0.0 SPF_PASS SPF: sender matches SPF record * 2.6 LOCAL_FROM From my domains X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on hz.grosbein.net X-Rspamd-Queue-Id: 4B3X4L5D2gz4CJq X-Spamd-Bar: / Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=permerror (mx1.freebsd.org: domain of eugen@grosbein.net uses mechanism not recognized by this client) smtp.mailfrom=eugen@grosbein.net X-Spamd-Result: default: False [-0.11 / 15.00]; ARC_NA(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; TO_DN_SOME(0.00)[]; NEURAL_HAM_LONG(-0.62)[-0.616]; MIME_GOOD(-0.10)[text/plain]; DMARC_NA(0.00)[grosbein.net]; NEURAL_SPAM_MEDIUM(0.83)[0.834]; RCVD_COUNT_THREE(0.00)[3]; TO_MATCH_ENVRCPT_SOME(0.00)[]; R_SPF_PERMFAIL(0.00)[empty SPF record]; NEURAL_HAM_SHORT(-0.23)[-0.231]; FREEMAIL_TO(0.00)[gmail.com]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:24940, ipnet:2a01:4f8::/29, country:DE]; RCVD_TLS_ALL(0.00)[]; MID_RHS_MATCH_FROM(0.00)[] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 01:14:11 -0000 11.07.2020 8:07, Eugene Grosbein wrote: >>> Fix the tests for install(1): add support for STRIPBIN's -o option. >> Is this feature now completely gone? Are binaries being stripped properly in ports, etc? Support for STRIPBIN has not changed. Stripping of ports etc. still works as before, just more quick due to less I/O. From owner-svn-src-all@freebsd.org Sat Jul 11 06:51:44 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 40138357FF5; Sat, 11 Jul 2020 06:51:44 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3gYr0hLGz4S7H; Sat, 11 Jul 2020 06:51:44 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EEEE6EFBC; Sat, 11 Jul 2020 06:51:43 +0000 (UTC) (envelope-from tsoome@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06B6phNW006412; Sat, 11 Jul 2020 06:51:43 GMT (envelope-from tsoome@FreeBSD.org) Received: (from tsoome@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06B6pgca006405; Sat, 11 Jul 2020 06:51:42 GMT (envelope-from tsoome@FreeBSD.org) Message-Id: <202007110651.06B6pgca006405@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tsoome set sender to tsoome@FreeBSD.org using -f From: Toomas Soome Date: Sat, 11 Jul 2020 06:51:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363090 - in head/stand: i386/gptboot libsa/geli X-SVN-Group: head X-SVN-Commit-Author: tsoome X-SVN-Commit-Paths: in head/stand: i386/gptboot libsa/geli X-SVN-Commit-Revision: 363090 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 06:51:44 -0000 Author: tsoome Date: Sat Jul 11 06:51:42 2020 New Revision: 363090 URL: https://svnweb.freebsd.org/changeset/base/363090 Log: loader: implement GELI writes Bug: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=247482 This patch is based on initial work from allanjude. PR: 247482 Obtained from: https://reviews.freebsd.org/D10236 Differential Revision: https://reviews.freebsd.org/D25605 Modified: head/stand/i386/gptboot/gptboot.c head/stand/libsa/geli/geliboot.c head/stand/libsa/geli/geliboot.h head/stand/libsa/geli/geliboot_crypto.c head/stand/libsa/geli/geliboot_internal.h head/stand/libsa/geli/gelidev.c Modified: head/stand/i386/gptboot/gptboot.c ============================================================================== --- head/stand/i386/gptboot/gptboot.c Sat Jul 11 03:39:44 2020 (r363089) +++ head/stand/i386/gptboot/gptboot.c Sat Jul 11 06:51:42 2020 (r363090) @@ -610,7 +610,7 @@ dskread(void *buf, daddr_t lba, unsigned nblk) #ifdef LOADER_GELI_SUPPORT if (err == 0 && gdsk.gdev != NULL) { /* Decrypt */ - if (geli_read(gdsk.gdev, lba * DEV_BSIZE, buf, + if (geli_io(gdsk.gdev, GELI_DECRYPT, lba * DEV_BSIZE, buf, nblk * DEV_BSIZE)) return (err); } Modified: head/stand/libsa/geli/geliboot.c ============================================================================== --- head/stand/libsa/geli/geliboot.c Sat Jul 11 03:39:44 2020 (r363089) +++ head/stand/libsa/geli/geliboot.c Sat Jul 11 06:51:42 2020 (r363090) @@ -310,7 +310,8 @@ found_key: } int -geli_read(struct geli_dev *gdev, off_t offset, u_char *buf, size_t bytes) +geli_io(struct geli_dev *gdev, geli_op_t enc, off_t offset, u_char *buf, + size_t bytes) { u_char iv[G_ELI_IVKEYLEN]; u_char *pbuf; @@ -343,12 +344,13 @@ geli_read(struct geli_dev *gdev, off_t offset, u_char keyno = (dstoff >> G_ELI_KEY_SHIFT) / secsize; g_eli_key_fill(&gdev->sc, &gkey, keyno); - error = geliboot_crypt(gdev->sc.sc_ealgo, 0, pbuf, secsize, + error = geliboot_crypt(gdev->sc.sc_ealgo, enc, pbuf, secsize, gkey.gek_key, gdev->sc.sc_ekeylen, iv); if (error != 0) { explicit_bzero(&gkey, sizeof(gkey)); - printf("Failed to decrypt in geli_read()!"); + printf("%s: Failed to %s!", __func__, + enc ? "encrypt" : "decrypt"); return (error); } pbuf += secsize; Modified: head/stand/libsa/geli/geliboot.h ============================================================================== --- head/stand/libsa/geli/geliboot.h Sat Jul 11 03:39:44 2020 (r363089) +++ head/stand/libsa/geli/geliboot.h Sat Jul 11 06:51:42 2020 (r363090) @@ -50,6 +50,11 @@ #define GELI_KEYBUF_SIZE (sizeof(struct keybuf) + \ (GELI_MAX_KEYS * sizeof(struct keybuf_ent))) +typedef enum geli_op { + GELI_DECRYPT, + GELI_ENCRYPT +} geli_op_t; + extern void pwgets(char *buf, int n, int hide); typedef u_char geli_ukey[G_ELI_USERKEYLEN]; @@ -73,9 +78,10 @@ struct preloaded_file; typedef int (*geli_readfunc)(void *vdev, void *readpriv, off_t offbytes, void *buf, size_t sizebytes); -struct geli_dev * geli_taste(geli_readfunc readfunc, void *readpriv, +struct geli_dev *geli_taste(geli_readfunc readfunc, void *readpriv, daddr_t lastsector, const char *namefmt, ...); -int geli_read(struct geli_dev *gdev, off_t offset, u_char *buf, size_t bytes); +int geli_io(struct geli_dev *gdev, geli_op_t, off_t offset, u_char *buf, + size_t bytes); int geli_havekey(struct geli_dev *gdev); int geli_passphrase(struct geli_dev *gdev, char *pw); Modified: head/stand/libsa/geli/geliboot_crypto.c ============================================================================== --- head/stand/libsa/geli/geliboot_crypto.c Sat Jul 11 03:39:44 2020 (r363089) +++ head/stand/libsa/geli/geliboot_crypto.c Sat Jul 11 06:51:42 2020 (r363090) @@ -35,7 +35,7 @@ #include "geliboot.h" int -geliboot_crypt(u_int algo, int enc, u_char *data, size_t datasize, +geliboot_crypt(u_int algo, geli_op_t enc, u_char *data, size_t datasize, const u_char *key, size_t keysize, u_char *iv) { keyInstance aeskey; @@ -49,7 +49,7 @@ geliboot_crypt(u_int algo, int enc, u_char *data, size err = rijndael_makeKey(&aeskey, !enc, keysize, (const char *)key); if (err < 0) { - printf("Failed to setup decryption keys: %d\n", err); + printf("Failed to setup crypo keys: %d\n", err); return (err); } @@ -59,18 +59,20 @@ geliboot_crypt(u_int algo, int enc, u_char *data, size return (err); } - if (enc == 0) { - /* decrypt */ + switch (enc) { + case GELI_DECRYPT: blks = rijndael_blockDecrypt(&cipher, &aeskey, data, datasize * 8, data); - } else { - /* encrypt */ + break; + case GELI_ENCRYPT: blks = rijndael_blockEncrypt(&cipher, &aeskey, data, datasize * 8, data); + break; } if (datasize != (blks / 8)) { - printf("Failed to decrypt the entire input: " - "%u != %zu\n", blks, datasize); + printf("Failed to %s the entire input: %u != %zu\n", + enc ? "decrypt" : "encrypt", + blks, datasize); return (1); } break; @@ -82,16 +84,16 @@ geliboot_crypt(u_int algo, int enc, u_char *data, size enc_xform_aes_xts.reinit(ctxp, iv); switch (enc) { - case 0: /* decrypt */ + case GELI_DECRYPT: for (i = 0; i < datasize; i += AES_XTS_BLOCKSIZE) { enc_xform_aes_xts.decrypt(ctxp, data + i, data + i); } break; - case 1: /* encrypt */ + case GELI_ENCRYPT: for (i = 0; i < datasize; i += AES_XTS_BLOCKSIZE) { enc_xform_aes_xts.encrypt(ctxp, data + i, - data + 1); + data + i); } break; } @@ -105,7 +107,7 @@ geliboot_crypt(u_int algo, int enc, u_char *data, size } static int -g_eli_crypto_cipher(u_int algo, int enc, u_char *data, size_t datasize, +g_eli_crypto_cipher(u_int algo, geli_op_t enc, u_char *data, size_t datasize, const u_char *key, size_t keysize) { u_char iv[keysize]; @@ -123,7 +125,8 @@ g_eli_crypto_encrypt(u_int algo, u_char *data, size_t if (algo == CRYPTO_AES_XTS) algo = CRYPTO_AES_CBC; - return (g_eli_crypto_cipher(algo, 1, data, datasize, key, keysize)); + return (g_eli_crypto_cipher(algo, GELI_ENCRYPT, data, datasize, key, + keysize)); } int @@ -135,5 +138,6 @@ g_eli_crypto_decrypt(u_int algo, u_char *data, size_t if (algo == CRYPTO_AES_XTS) algo = CRYPTO_AES_CBC; - return (g_eli_crypto_cipher(algo, 0, data, datasize, key, keysize)); + return (g_eli_crypto_cipher(algo, GELI_DECRYPT, data, datasize, key, + keysize)); } Modified: head/stand/libsa/geli/geliboot_internal.h ============================================================================== --- head/stand/libsa/geli/geliboot_internal.h Sat Jul 11 03:39:44 2020 (r363089) +++ head/stand/libsa/geli/geliboot_internal.h Sat Jul 11 06:51:42 2020 (r363090) @@ -55,6 +55,8 @@ #define STAND_H /* We don't want stand.h in {gpt,zfs,gptzfs}boot */ #include +#include "geliboot.h" + #define GELIDEV_NAMELEN 32 struct geli_dev { @@ -65,7 +67,7 @@ struct geli_dev { char *name; /* for prompting; it ends in ':' */ }; -int geliboot_crypt(u_int algo, int enc, u_char *data, size_t datasize, +int geliboot_crypt(u_int algo, geli_op_t enc, u_char *data, size_t datasize, const u_char *key, size_t keysize, u_char *iv); #endif /* _GELIBOOT_INTERNAL_H_ */ Modified: head/stand/libsa/geli/gelidev.c ============================================================================== --- head/stand/libsa/geli/gelidev.c Sat Jul 11 03:39:44 2020 (r363089) +++ head/stand/libsa/geli/gelidev.c Sat Jul 11 06:51:42 2020 (r363090) @@ -115,10 +115,6 @@ geli_dev_strategy(void *devdata, int rw, daddr_t blk, char *iobuf; int rc; - /* We only handle reading; no write support. */ - if ((rw & F_MASK) != F_READ) - return (EOPNOTSUPP); - gdesc = (struct geli_devdesc *)devdata; /* @@ -139,34 +135,63 @@ geli_dev_strategy(void *devdata, int rw, daddr_t blk, alnsize = alnend - alnstart; /* - * If alignment requires us to read more than the size of the provided - * buffer, allocate a temporary buffer. + * If alignment requires us to read/write more than the size of the + * provided buffer, allocate a temporary buffer. + * The writes will always get temporary buffer because of encryption. */ - if (alnsize <= size) + if (alnsize <= size && (rw & F_MASK) == F_READ) iobuf = buf; else if ((iobuf = malloc(alnsize)) == NULL) return (ENOMEM); - /* - * Read the encrypted data using the host provider, then decrypt it. - */ - rc = gdesc->hdesc->dd.d_dev->dv_strategy(gdesc->hdesc, rw, - alnstart / DEV_BSIZE, alnsize, iobuf, NULL); - if (rc != 0) - goto out; - rc = geli_read(gdesc->gdev, alnstart, iobuf, alnsize); - if (rc != 0) - goto out; + switch (rw & F_MASK) { + case F_READ: + /* + * Read the encrypted data using the host provider, + * then decrypt it. + */ + rc = gdesc->hdesc->dd.d_dev->dv_strategy(gdesc->hdesc, rw, + alnstart / DEV_BSIZE, alnsize, iobuf, NULL); + if (rc != 0) + goto out; + rc = geli_io(gdesc->gdev, GELI_DECRYPT, alnstart, iobuf, + alnsize); + if (rc != 0) + goto out; - /* - * If we had to use a temporary buffer, copy the requested part of the - * data to the caller's buffer. - */ - if (iobuf != buf) - memcpy(buf, iobuf + (reqstart - alnstart), size); + /* + * If we had to use a temporary buffer, copy the requested + * part of the data to the caller's buffer. + */ + if (iobuf != buf) + memcpy(buf, iobuf + (reqstart - alnstart), size); - if (rsize != NULL) - *rsize = size; + if (rsize != NULL) + *rsize = size; + break; + case F_WRITE: + if (iobuf != buf) { + /* Read, decrypt, then modify. */ + rc = gdesc->hdesc->dd.d_dev->dv_strategy(gdesc->hdesc, + F_READ, alnstart / DEV_BSIZE, alnsize, iobuf, NULL); + if (rc != 0) + goto out; + rc = geli_io(gdesc->gdev, GELI_DECRYPT, alnstart, iobuf, + alnsize); + if (rc != 0) + goto out; + /* Copy data to iobuf */ + memcpy(iobuf + (reqstart - alnstart), buf, size); + } + + /* Encrypt and write it. */ + rc = geli_io(gdesc->gdev, GELI_ENCRYPT, alnstart, iobuf, + alnsize); + if (rc != 0) + goto out; + rc = gdesc->hdesc->dd.d_dev->dv_strategy(gdesc->hdesc, + rw, alnstart / DEV_BSIZE, alnsize, iobuf, NULL); + } out: if (iobuf != buf) free(iobuf); From owner-svn-src-all@freebsd.org Sat Jul 11 07:33:21 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id A145A359646; Sat, 11 Jul 2020 07:33:21 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3hTs3nCLz4VH0; Sat, 11 Jul 2020 07:33:21 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4C1F3F861; Sat, 11 Jul 2020 07:33:21 +0000 (UTC) (envelope-from se@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06B7XLWE033788; Sat, 11 Jul 2020 07:33:21 GMT (envelope-from se@FreeBSD.org) Received: (from se@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06B7XJrp033777; Sat, 11 Jul 2020 07:33:19 GMT (envelope-from se@FreeBSD.org) Message-Id: <202007110733.06B7XJrp033777@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: se set sender to se@FreeBSD.org using -f From: =?UTF-8?Q?Stefan_E=c3=9fer?= Date: Sat, 11 Jul 2020 07:33:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363091 - in head/contrib/bc: . include manuals src tests tests/bc X-SVN-Group: head X-SVN-Commit-Author: se X-SVN-Commit-Paths: in head/contrib/bc: . include manuals src tests tests/bc X-SVN-Commit-Revision: 363091 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 07:33:21 -0000 Author: se Date: Sat Jul 11 07:33:18 2020 New Revision: 363091 URL: https://svnweb.freebsd.org/changeset/base/363091 Log: Update to version 3.1.3 This version fixes the following evaluation, which lead to a parse error: echo "if (1 < 3) 1" | bc Modified: head/contrib/bc/Makefile.in head/contrib/bc/NEWS.md head/contrib/bc/configure.sh head/contrib/bc/include/vm.h head/contrib/bc/locale_install.sh head/contrib/bc/locale_uninstall.sh head/contrib/bc/manuals/build.md head/contrib/bc/src/vm.c head/contrib/bc/tests/bc/stdin.txt head/contrib/bc/tests/bc/stdin_results.txt head/contrib/bc/tests/stdin.sh Directory Properties: head/contrib/bc/ (props changed) Modified: head/contrib/bc/Makefile.in ============================================================================== --- head/contrib/bc/Makefile.in Sat Jul 11 06:51:42 2020 (r363090) +++ head/contrib/bc/Makefile.in Sat Jul 11 07:33:18 2020 (r363091) @@ -29,7 +29,7 @@ # .POSIX: -VERSION = 3.1.1 +VERSION = 3.1.3 SRC = %%SRC%% OBJ = %%OBJ%% @@ -335,7 +335,7 @@ clean_tests: clean clean_config clean_coverage @$(RM) -f bc.old install_locales: - $(LOCALE_INSTALL) $(NLSPATH) $(MAIN_EXEC) $(DESTDIR) + %%INSTALL_LOCALES%% install_bc_manpage: $(SAFE_INSTALL) $(MANPAGE_INSTALL_ARGS) $(BC_MANPAGE) $(DESTDIR)$(MAN1DIR)/$(BC_MANPAGE_NAME) Modified: head/contrib/bc/NEWS.md ============================================================================== --- head/contrib/bc/NEWS.md Sat Jul 11 06:51:42 2020 (r363090) +++ head/contrib/bc/NEWS.md Sat Jul 11 07:33:18 2020 (r363091) @@ -1,5 +1,25 @@ # News +## 3.1.3 + +This is a production release that fixes one minor bug: if `bc` was invoked like +the following, it would error: + +``` +echo "if (1 < 3) 1" | bc +``` + +Unless users run into this bug, they do not need to upgrade, but it is suggested +that they do. + +## 3.1.2 + +This is a production release that adds a way to install *all* locales. Users do +***NOT*** need to upgrade. + +For package maintainers wishing to make use of the change, just pass `-l` to +`configure.sh`. + ## 3.1.1 This is a production release that adds two Spanish locales. Users do ***NOT*** Modified: head/contrib/bc/configure.sh ============================================================================== --- head/contrib/bc/configure.sh Sat Jul 11 06:51:42 2020 (r363090) +++ head/contrib/bc/configure.sh Sat Jul 11 07:33:18 2020 (r363091) @@ -47,12 +47,12 @@ usage() { printf 'usage: %s -h\n' "$script" printf ' %s --help\n' "$script" - printf ' %s [-bD|-dB|-c] [-EfgGHMNPT] [-O OPT_LEVEL] [-k KARATSUBA_LEN]\n' "$script" + printf ' %s [-bD|-dB|-c] [-EfgGHlMNPT] [-O OPT_LEVEL] [-k KARATSUBA_LEN]\n' "$script" printf ' %s \\\n' "$script" printf ' [--bc-only --disable-dc|--dc-only --disable-bc|--coverage] \\\n' printf ' [--debug --disable-extra-math --disable-generated-tests] \\\n' printf ' [--disable-history --disable-man-pages --disable-nls] \\\n' - printf ' [--disable-prompt --disable-strip] \\\n' + printf ' [--disable-prompt --disable-strip] [--install-all-locales] \\\n' printf ' [--opt=OPT_LEVEL] [--karatsuba-len=KARATSUBA_LEN] \\\n' printf ' [--prefix=PREFIX] [--bindir=BINDIR] [--datarootdir=DATAROOTDIR] \\\n' printf ' [--datadir=DATADIR] [--mandir=MANDIR] [--man1dir=MAN1DIR] \\\n' @@ -98,6 +98,10 @@ usage() { printf ' -k KARATSUBA_LEN, --karatsuba-len KARATSUBA_LEN\n' printf ' Set the karatsuba length to KARATSUBA_LEN (default is 64).\n' printf ' It is an error if KARATSUBA_LEN is not a number or is less than 16.\n' + printf ' -l, --install-all-locales\n' + printf ' Installs all locales, regardless of how many are on the system. This\n' + printf ' option is useful for package maintainers who want to make sure that\n' + printf ' a package contains all of the locales that end users might need.\n' printf ' -M, --disable-man-pages\n' printf ' Disable installing manpages.\n' printf ' -N, --disable-nls\n' @@ -319,8 +323,9 @@ nls=1 prompt=1 force=0 strip_bin=1 +all_locales=0 -while getopts "bBcdDEfgGhHk:MNO:PST-" opt; do +while getopts "bBcdDEfgGhHk:lMNO:PST-" opt; do case "$opt" in b) bc_only=1 ;; @@ -335,6 +340,7 @@ while getopts "bBcdDEfgGhHk:MNO:PST-" opt; do h) usage ;; H) hist=0 ;; k) karatsuba_len="$OPTARG" ;; + l) all_locales=1 ;; M) install_manpages=0 ;; N) nls=0 ;; O) optimization="$OPTARG" ;; @@ -423,6 +429,7 @@ while getopts "bBcdDEfgGhHk:MNO:PST-" opt; do disable-nls) nls=0 ;; disable-prompt) prompt=0 ;; disable-strip) strip_bin=0 ;; + install-all-locales) all_locales=1 ;; help* | bc-only* | dc-only* | coverage* | debug*) usage "No arg allowed for --$arg option" ;; disable-bc* | disable-dc* | disable-extra-math*) @@ -431,6 +438,8 @@ while getopts "bBcdDEfgGhHk:MNO:PST-" opt; do usage "No arg allowed for --$arg option" ;; disable-man-pages* | disable-nls* | disable-strip*) usage "No arg allowed for --$arg option" ;; + install-all-locales*) + usage "No arg allowed for --$arg option" ;; '') break ;; # "--" terminates argument processing * ) usage "Invalid option $LONG_OPTARG" ;; esac @@ -751,8 +760,15 @@ if [ "$nls" -ne 0 ]; then else install_locales_prereqs="" uninstall_locales_prereqs="" + all_locales=0 fi +if [ "$nls" -ne 0 ] && [ "$all_locales" -ne 0 ]; then + install_locales="\$(LOCALE_INSTALL) -l \$(NLSPATH) \$(MAIN_EXEC) \$(DESTDIR)" +else + install_locales="\$(LOCALE_INSTALL) \$(NLSPATH) \$(MAIN_EXEC) \$(DESTDIR)" +fi + if [ "$hist" -eq 1 ]; then set +e @@ -911,6 +927,7 @@ contents=$(replace "$contents" "HOSTCC" "$HOSTCC") contents=$(replace "$contents" "COVERAGE_OUTPUT" "$COVERAGE_OUTPUT") contents=$(replace "$contents" "COVERAGE_PREREQS" "$COVERAGE_PREREQS") contents=$(replace "$contents" "INSTALL_PREREQS" "$install_prereqs") +contents=$(replace "$contents" "INSTALL_LOCALES" "$install_locales") contents=$(replace "$contents" "INSTALL_LOCALES_PREREQS" "$install_locales_prereqs") contents=$(replace "$contents" "UNINSTALL_MAN_PREREQS" "$uninstall_man_prereqs") contents=$(replace "$contents" "UNINSTALL_PREREQS" "$uninstall_prereqs") Modified: head/contrib/bc/include/vm.h ============================================================================== --- head/contrib/bc/include/vm.h Sat Jul 11 06:51:42 2020 (r363090) +++ head/contrib/bc/include/vm.h Sat Jul 11 07:33:18 2020 (r363091) @@ -112,10 +112,10 @@ #if BC_ENABLED -#define BC_S (BC_ENABLED && (vm.flags & BC_FLAG_S)) -#define BC_W (BC_ENABLED && (vm.flags & BC_FLAG_W)) -#define BC_L (BC_ENABLED && (vm.flags & BC_FLAG_L)) -#define BC_G (BC_ENABLED && (vm.flags & BC_FLAG_G)) +#define BC_S (vm.flags & BC_FLAG_S) +#define BC_W (vm.flags & BC_FLAG_W) +#define BC_L (vm.flags & BC_FLAG_L) +#define BC_G (vm.flags & BC_FLAG_G) #endif // BC_ENABLED Modified: head/contrib/bc/locale_install.sh ============================================================================== --- head/contrib/bc/locale_install.sh Sat Jul 11 06:51:42 2020 (r363090) +++ head/contrib/bc/locale_install.sh Sat Jul 11 07:33:18 2020 (r363091) @@ -28,6 +28,9 @@ # usage() { + if [ $# -eq 1 ]; then + printf '%s\n' "$1" + fi printf "usage: %s NLSPATH main_exec [DESTDIR]\n" "$0" 1>&2 exit 1 } @@ -150,6 +153,17 @@ scriptdir=$(dirname "$script") . "$scriptdir/functions.sh" +all_locales=0 + +while getopts "l" opt; do + + case "$opt" in + l) all_locales=1 ; shift ;; + ?) usage "Invalid option $opt" ;; + esac + +done + test "$#" -ge 2 || usage nlspath="$1" @@ -180,19 +194,23 @@ fi for file in $locales_dir/*.msg; do locale=$(basename "$file" ".msg") - loc=$(gen_nlspath "$destdir/$nlspath" "$locale" "$main_exec") - localeexists "$locales" "$locale" "$destdir" - err="$?" + if [ "$all_locales" -eq 0 ]; then - if [ "$err" -eq 0 ]; then - continue + localeexists "$locales" "$locale" "$destdir" + err="$?" + + if [ "$err" -eq 0 ]; then + continue + fi fi if [ -L "$file" ]; then continue fi + loc=$(gen_nlspath "$destdir/$nlspath" "$locale" "$main_exec") + gencatfile "$loc" "$file" done @@ -200,14 +218,18 @@ done for file in $locales_dir/*.msg; do locale=$(basename "$file" ".msg") - loc=$(gen_nlspath "$destdir/$nlspath" "$locale" "$main_exec") - localeexists "$locales" "$locale" "$destdir" - err="$?" + if [ "$all_locales" -eq 0 ]; then - if [ "$err" -eq 0 ]; then - continue + localeexists "$locales" "$locale" "$destdir" + err="$?" + + if [ "$err" -eq 0 ]; then + continue + fi fi + + loc=$(gen_nlspath "$destdir/$nlspath" "$locale" "$main_exec") mkdir -p $(dirname "$loc") Modified: head/contrib/bc/locale_uninstall.sh ============================================================================== --- head/contrib/bc/locale_uninstall.sh Sat Jul 11 06:51:42 2020 (r363090) +++ head/contrib/bc/locale_uninstall.sh Sat Jul 11 07:33:18 2020 (r363091) @@ -59,6 +59,7 @@ fi # This way, we can delete catalogs for locales that we had to install # because they are symlinks. locales=$(gen_nlspath "$destdir/$nlspath" "*" "$main_exec") +locales=$(ls $locales 2> /dev/null) for l in $locales; do rm -f "$l" Modified: head/contrib/bc/manuals/build.md ============================================================================== --- head/contrib/bc/manuals/build.md Sat Jul 11 06:51:42 2020 (r363090) +++ head/contrib/bc/manuals/build.md Sat Jul 11 07:33:18 2020 (r363091) @@ -366,18 +366,18 @@ can be disabled permanently in the build by passing th Both commands are equivalent. -### Long Options +### Locales -By default, `bc` and `dc` support long options like `--mathlib` and -`--interactive`. However, support for these options requires `getopt_long()` -which is not in the POSIX standard. For those platforms that do *not* have -`getopt_long()` it will be disabled automatically, or if you wish to disable -them regardless, you can pass the `-L` flag or the `--disable-long-options` -option to `configure.sh`, as follows: +By default, `bc` and `dc` do not install all locales, but only the enabled +locales. If `DESTDIR` exists and is not empty, then they will install all of +the locales that exist on the system. The `-l` flag or `--install-all-locales` +option skips all of that and just installs all of the locales that `bc` and `dc` +have, regardless. To enable that behavior, you can pass the `-l` flag or the +`--install-all-locales` option to `configure.sh`, as follows: ``` -./configure.sh -L -./configure.sh --disable-long-options +./configure.sh -l +./configure.sh --install-all-locales ``` Both commands are equivalent. Modified: head/contrib/bc/src/vm.c ============================================================================== --- head/contrib/bc/src/vm.c Sat Jul 11 06:51:42 2020 (r363090) +++ head/contrib/bc/src/vm.c Sat Jul 11 07:33:18 2020 (r363091) @@ -602,8 +602,21 @@ restart: else if (BC_ERR(string)) bc_parse_err(&vm.prs, BC_ERROR_PARSE_STRING); #if BC_ENABLED - else if (BC_IS_BC && BC_ERR(BC_PARSE_NO_EXEC(&vm.prs))) - bc_parse_err(&vm.prs, BC_ERROR_PARSE_BLOCK); + else if (BC_IS_BC && BC_ERR(BC_PARSE_NO_EXEC(&vm.prs))) { + + size_t i; + bool good = true; + + for (i = 0; good && i < vm.prs.flags.len; ++i) { + uint16_t flag = *((uint16_t*) bc_vec_item(&vm.prs.flags, i)); + good = ((flag & BC_PARSE_FLAG_BRACE) != BC_PARSE_FLAG_BRACE); + } + + if (good) { + while (BC_PARSE_IF_END(&vm.prs)) bc_vm_process("else {}", true); + } + else bc_parse_err(&vm.prs, BC_ERROR_PARSE_BLOCK); + } #endif // BC_ENABLED } Modified: head/contrib/bc/tests/bc/stdin.txt ============================================================================== --- head/contrib/bc/tests/bc/stdin.txt Sat Jul 11 06:51:42 2020 (r363090) +++ head/contrib/bc/tests/bc/stdin.txt Sat Jul 11 07:33:18 2020 (r363091) @@ -13,3 +13,4 @@ i = 4 read() i *= 5 +if (1 < 3) 1 Modified: head/contrib/bc/tests/bc/stdin_results.txt ============================================================================== --- head/contrib/bc/tests/bc/stdin_results.txt Sat Jul 11 06:51:42 2020 (r363090) +++ head/contrib/bc/tests/bc/stdin_results.txt Sat Jul 11 07:33:18 2020 (r363091) @@ -4,3 +4,4 @@ String /* with partial commentString /* with full comm 7 String with a # hash comment3 20 +1 Modified: head/contrib/bc/tests/stdin.sh ============================================================================== --- head/contrib/bc/tests/stdin.sh Sat Jul 11 06:51:42 2020 (r363090) +++ head/contrib/bc/tests/stdin.sh Sat Jul 11 07:33:18 2020 (r363091) @@ -65,8 +65,16 @@ rm -f "$out" printf 'Running %s stdin tests...' "$d" cat "$testdir/$d/stdin.txt" | "$exe" "$@" "$options" > "$out" 2> /dev/null - diff "$testdir/$d/stdin_results.txt" "$out" + +if [ "$d" = "bc" ]; then + + cat "$testdir/$d/stdin1.txt" | "$exe" "$@" "$options" > "$out" 2> /dev/null + diff "$testdir/$d/stdin1_results.txt" "$out" + + cat "$testdir/$d/stdin2.txt" | "$exe" "$@" "$options" > "$out" 2> /dev/null + diff "$testdir/$d/stdin2_results.txt" "$out" +fi rm -f "$out1" From owner-svn-src-all@freebsd.org Sat Jul 11 09:43:17 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9CDB835CAF8; Sat, 11 Jul 2020 09:43:17 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3lMn3dZlz3Rt5; Sat, 11 Jul 2020 09:43:17 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6040710B73; Sat, 11 Jul 2020 09:43:17 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06B9hHbt019709; Sat, 11 Jul 2020 09:43:17 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06B9hH4J019707; Sat, 11 Jul 2020 09:43:17 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202007110943.06B9hH4J019707@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sat, 11 Jul 2020 09:43:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363092 - in stable: 11/contrib/llvm-project/clang/lib/Sema 12/contrib/llvm-project/clang/lib/Sema X-SVN-Group: stable-12 X-SVN-Commit-Author: dim X-SVN-Commit-Paths: in stable: 11/contrib/llvm-project/clang/lib/Sema 12/contrib/llvm-project/clang/lib/Sema X-SVN-Commit-Revision: 363092 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 09:43:17 -0000 Author: dim Date: Sat Jul 11 09:43:16 2020 New Revision: 363092 URL: https://svnweb.freebsd.org/changeset/base/363092 Log: MFC r363013: Merge commit 065fc1eafe7c from llvm git (by Richard Smith): PR45521: Preserve the value kind when performing a standard conversion sequence on a glvalue expression. If the sequence is supposed to perform an lvalue-to-rvalue conversion, then one will be specified as the first conversion in the sequence. Otherwise, one should not be invented. This should fix clang crashing with "can't implicitly cast lvalue to rvalue with this cast kind", followed by "UNREACHABLE executed at /usr/src/contrib/llvm-project/clang/lib/Sema/Sema.cpp:538!", when building recent versions of Ceph, and the CPAN module SYBER/Date-5.2.0. Reported by: Willem Jan Withagen , eserte12@yahoo.de PR: 245530, 247812 Modified: stable/12/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp stable/12/contrib/llvm-project/clang/lib/Sema/SemaOverload.cpp Directory Properties: stable/12/ (props changed) Changes in other areas also in this revision: Modified: stable/11/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp stable/11/contrib/llvm-project/clang/lib/Sema/SemaOverload.cpp Directory Properties: stable/11/ (props changed) stable/11/contrib/llvm-project/clang/ (props changed) Modified: stable/12/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp ============================================================================== --- stable/12/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp Sat Jul 11 07:33:18 2020 (r363091) +++ stable/12/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp Sat Jul 11 09:43:16 2020 (r363092) @@ -4063,8 +4063,8 @@ Sema::PerformImplicitConversion(Expr *From, QualType T break; case ICK_Compatible_Conversion: - From = ImpCastExprToType(From, ToType, CK_NoOp, - VK_RValue, /*BasePath=*/nullptr, CCK).get(); + From = ImpCastExprToType(From, ToType, CK_NoOp, From->getValueKind(), + /*BasePath=*/nullptr, CCK).get(); break; case ICK_Writeback_Conversion: @@ -4303,11 +4303,7 @@ Sema::PerformImplicitConversion(Expr *From, QualType T break; case ICK_Qualification: { - // The qualification keeps the category of the inner expression, unless the - // target type isn't a reference. - ExprValueKind VK = - ToType->isReferenceType() ? From->getValueKind() : VK_RValue; - + ExprValueKind VK = From->getValueKind(); CastKind CK = CK_NoOp; if (ToType->isReferenceType() && Modified: stable/12/contrib/llvm-project/clang/lib/Sema/SemaOverload.cpp ============================================================================== --- stable/12/contrib/llvm-project/clang/lib/Sema/SemaOverload.cpp Sat Jul 11 07:33:18 2020 (r363091) +++ stable/12/contrib/llvm-project/clang/lib/Sema/SemaOverload.cpp Sat Jul 11 09:43:16 2020 (r363092) @@ -4693,7 +4693,7 @@ TryReferenceInit(Sema &S, Expr *Init, QualType DeclTyp Sema::ReferenceConversions::NestedQualification) ? ICK_Qualification : ICK_Identity; - ICS.Standard.FromTypePtr = T2.getAsOpaquePtr(); + ICS.Standard.setFromType(T2); ICS.Standard.setToType(0, T2); ICS.Standard.setToType(1, T1); ICS.Standard.setToType(2, T1); From owner-svn-src-all@freebsd.org Sat Jul 11 09:43:18 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 6696C35CE7D; Sat, 11 Jul 2020 09:43:18 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3lMp253Lz3S7r; Sat, 11 Jul 2020 09:43:18 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1219A10AE7; Sat, 11 Jul 2020 09:43:18 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06B9hHsL019716; Sat, 11 Jul 2020 09:43:17 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06B9hHtG019714; Sat, 11 Jul 2020 09:43:17 GMT (envelope-from dim@FreeBSD.org) Message-Id: <202007110943.06B9hHtG019714@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sat, 11 Jul 2020 09:43:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r363092 - in stable: 11/contrib/llvm-project/clang/lib/Sema 12/contrib/llvm-project/clang/lib/Sema X-SVN-Group: stable-11 X-SVN-Commit-Author: dim X-SVN-Commit-Paths: in stable: 11/contrib/llvm-project/clang/lib/Sema 12/contrib/llvm-project/clang/lib/Sema X-SVN-Commit-Revision: 363092 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 09:43:18 -0000 Author: dim Date: Sat Jul 11 09:43:16 2020 New Revision: 363092 URL: https://svnweb.freebsd.org/changeset/base/363092 Log: MFC r363013: Merge commit 065fc1eafe7c from llvm git (by Richard Smith): PR45521: Preserve the value kind when performing a standard conversion sequence on a glvalue expression. If the sequence is supposed to perform an lvalue-to-rvalue conversion, then one will be specified as the first conversion in the sequence. Otherwise, one should not be invented. This should fix clang crashing with "can't implicitly cast lvalue to rvalue with this cast kind", followed by "UNREACHABLE executed at /usr/src/contrib/llvm-project/clang/lib/Sema/Sema.cpp:538!", when building recent versions of Ceph, and the CPAN module SYBER/Date-5.2.0. Reported by: Willem Jan Withagen , eserte12@yahoo.de PR: 245530, 247812 Modified: stable/11/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp stable/11/contrib/llvm-project/clang/lib/Sema/SemaOverload.cpp Directory Properties: stable/11/ (props changed) stable/11/contrib/llvm-project/clang/ (props changed) Changes in other areas also in this revision: Modified: stable/12/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp stable/12/contrib/llvm-project/clang/lib/Sema/SemaOverload.cpp Directory Properties: stable/12/ (props changed) Modified: stable/11/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp ============================================================================== --- stable/11/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp Sat Jul 11 07:33:18 2020 (r363091) +++ stable/11/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp Sat Jul 11 09:43:16 2020 (r363092) @@ -4063,8 +4063,8 @@ Sema::PerformImplicitConversion(Expr *From, QualType T break; case ICK_Compatible_Conversion: - From = ImpCastExprToType(From, ToType, CK_NoOp, - VK_RValue, /*BasePath=*/nullptr, CCK).get(); + From = ImpCastExprToType(From, ToType, CK_NoOp, From->getValueKind(), + /*BasePath=*/nullptr, CCK).get(); break; case ICK_Writeback_Conversion: @@ -4303,11 +4303,7 @@ Sema::PerformImplicitConversion(Expr *From, QualType T break; case ICK_Qualification: { - // The qualification keeps the category of the inner expression, unless the - // target type isn't a reference. - ExprValueKind VK = - ToType->isReferenceType() ? From->getValueKind() : VK_RValue; - + ExprValueKind VK = From->getValueKind(); CastKind CK = CK_NoOp; if (ToType->isReferenceType() && Modified: stable/11/contrib/llvm-project/clang/lib/Sema/SemaOverload.cpp ============================================================================== --- stable/11/contrib/llvm-project/clang/lib/Sema/SemaOverload.cpp Sat Jul 11 07:33:18 2020 (r363091) +++ stable/11/contrib/llvm-project/clang/lib/Sema/SemaOverload.cpp Sat Jul 11 09:43:16 2020 (r363092) @@ -4693,7 +4693,7 @@ TryReferenceInit(Sema &S, Expr *Init, QualType DeclTyp Sema::ReferenceConversions::NestedQualification) ? ICK_Qualification : ICK_Identity; - ICS.Standard.FromTypePtr = T2.getAsOpaquePtr(); + ICS.Standard.setFromType(T2); ICS.Standard.setToType(0, T2); ICS.Standard.setToType(1, T1); ICS.Standard.setToType(2, T1); From owner-svn-src-all@freebsd.org Sat Jul 11 13:08:17 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D4135361CCF; Sat, 11 Jul 2020 13:08:17 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3qwK4K5Hz3dMk; Sat, 11 Jul 2020 13:08:17 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 72D2C1335C; Sat, 11 Jul 2020 13:08:17 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BD8HKA048497; Sat, 11 Jul 2020 13:08:17 GMT (envelope-from trasz@FreeBSD.org) Received: (from trasz@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BD8H4R048496; Sat, 11 Jul 2020 13:08:17 GMT (envelope-from trasz@FreeBSD.org) Message-Id: <202007111308.06BD8H4R048496@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: trasz set sender to trasz@FreeBSD.org using -f From: Edward Tomasz Napierala Date: Sat, 11 Jul 2020 13:08:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363093 - head/sys/compat/linux X-SVN-Group: head X-SVN-Commit-Author: trasz X-SVN-Commit-Paths: head/sys/compat/linux X-SVN-Commit-Revision: 363093 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 13:08:17 -0000 Author: trasz Date: Sat Jul 11 13:08:16 2020 New Revision: 363093 URL: https://svnweb.freebsd.org/changeset/base/363093 Log: Make linux stat(2) return the same st_dev for every devfs instance. The reason for this is to work around an idiosyncrasy of glibc getttynam(3) implementation: it checks whether st_dev returned for fd 0 is the same as st_dev returned for the target of /proc/self/fd/0 symlink, and with linux chroots having their own devfs instance, the check will fail if you chrooted into it. PR: kern/240767 Reviewed by: kib MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D25559 Modified: head/sys/compat/linux/linux_stats.c Modified: head/sys/compat/linux/linux_stats.c ============================================================================== --- head/sys/compat/linux/linux_stats.c Sat Jul 11 09:43:16 2020 (r363092) +++ head/sys/compat/linux/linux_stats.c Sat Jul 11 13:08:16 2020 (r363093) @@ -70,6 +70,17 @@ translate_vnhook_major_minor(struct vnode *vp, struct sb->st_mode |= S_IFBLK; } + /* + * Return the same st_dev for every devfs instance. The reason + * for this is to work around an idiosyncrasy of glibc getttynam() + * implementation: it checks whether st_dev returned for fd 0 + * is the same as st_dev returned for the target of /proc/self/fd/0 + * symlink, and with linux chroots having their own devfs instance, + * the check will fail if you chroot into it. + */ + if (rootdevmp != NULL && vp->v_mount->mnt_vfc == rootdevmp->mnt_vfc) + sb->st_dev = rootdevmp->mnt_stat.f_fsid.val[0]; + if (vp->v_type == VCHR && vp->v_rdev != NULL && linux_driver_get_major_minor(devtoname(vp->v_rdev), &major, &minor) == 0) { @@ -110,6 +121,7 @@ translate_fd_major_minor(struct thread *td, int fd, st { struct file *fp; struct vnode *vp; + struct mount *mp; int major, minor; /* @@ -122,6 +134,12 @@ translate_fd_major_minor(struct thread *td, int fd, st if (vp != NULL && vn_isdisk(vp, NULL)) { buf->st_mode &= ~S_IFMT; buf->st_mode |= S_IFBLK; + } + if (vp != NULL && rootdevmp != NULL) { + mp = vp->v_mount; + __compiler_membar(); + if (mp != NULL && mp->mnt_vfc == rootdevmp->mnt_vfc) + buf->st_dev = rootdevmp->mnt_stat.f_fsid.val[0]; } if (vp != NULL && vp->v_rdev != NULL && linux_driver_get_major_minor(devtoname(vp->v_rdev), From owner-svn-src-all@freebsd.org Sat Jul 11 13:11:54 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id AA046361CEE; Sat, 11 Jul 2020 13:11:54 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3r0V453mz3dpY; Sat, 11 Jul 2020 13:11:54 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6FB851389C; Sat, 11 Jul 2020 13:11:54 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BDBsYJ054918; Sat, 11 Jul 2020 13:11:54 GMT (envelope-from trasz@FreeBSD.org) Received: (from trasz@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BDBsn5054917; Sat, 11 Jul 2020 13:11:54 GMT (envelope-from trasz@FreeBSD.org) Message-Id: <202007111311.06BDBsn5054917@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: trasz set sender to trasz@FreeBSD.org using -f From: Edward Tomasz Napierala Date: Sat, 11 Jul 2020 13:11:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363094 - head/sys/compat/linprocfs X-SVN-Group: head X-SVN-Commit-Author: trasz X-SVN-Commit-Paths: head/sys/compat/linprocfs X-SVN-Commit-Revision: 363094 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 13:11:54 -0000 Author: trasz Date: Sat Jul 11 13:11:54 2020 New Revision: 363094 URL: https://svnweb.freebsd.org/changeset/base/363094 Log: Make linprocfs(5) report correct tty number in /proc//stat. Fixes sudo (sudo-1.8.21p2-3ubuntu1.2); previously would fail with "sudo: no tty present and no askpass program specified". Reviewed by: kib, emaste MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D25588 Modified: head/sys/compat/linprocfs/linprocfs.c Modified: head/sys/compat/linprocfs/linprocfs.c ============================================================================== --- head/sys/compat/linprocfs/linprocfs.c Sat Jul 11 13:08:16 2020 (r363093) +++ head/sys/compat/linprocfs/linprocfs.c Sat Jul 11 13:11:54 2020 (r363094) @@ -767,6 +767,32 @@ linprocfs_doloadavg(PFS_FILL_ARGS) return (0); } +static int +linprocfs_get_tty_nr(struct proc *p) +{ + struct session *sp; + const char *ttyname; + int error, major, minor, nr; + + PROC_LOCK_ASSERT(p, MA_OWNED); + sx_assert(&proctree_lock, SX_LOCKED); + + if ((p->p_flag & P_CONTROLT) == 0) + return (-1); + + sp = p->p_pgrp->pg_session; + if (sp == NULL) + return (-1); + + ttyname = devtoname(sp->s_ttyp->t_dev); + error = linux_driver_get_major_minor(ttyname, &major, &minor); + if (error != 0) + return (-1); + + nr = makedev(major, minor); + return (nr); +} + /* * Filler function for proc/pid/stat */ @@ -777,12 +803,14 @@ linprocfs_doprocstat(PFS_FILL_ARGS) struct timeval boottime; char state; static int ratelimit = 0; + int tty_nr; vm_offset_t startcode, startdata; getboottime(&boottime); sx_slock(&proctree_lock); PROC_LOCK(p); fill_kinfo_proc(p, &kp); + tty_nr = linprocfs_get_tty_nr(p); sx_sunlock(&proctree_lock); if (p->p_vmspace) { startcode = (vm_offset_t)p->p_vmspace->vm_taddr; @@ -809,10 +837,7 @@ linprocfs_doprocstat(PFS_FILL_ARGS) PS_ADD("pgrp", "%d", p->p_pgid); PS_ADD("session", "%d", p->p_session->s_sid); PROC_UNLOCK(p); - if (kp.ki_tdev == NODEV) - PS_ADD("tty", "%s", "-1"); - else - PS_ADD("tty", "%ju", (uintmax_t)kp.ki_tdev); + PS_ADD("tty", "%d", tty_nr); PS_ADD("tpgid", "%d", kp.ki_tpgid); PS_ADD("flags", "%u", 0); /* XXX */ PS_ADD("minflt", "%lu", kp.ki_rusage.ru_minflt); From owner-svn-src-all@freebsd.org Sat Jul 11 13:56:37 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D63F336355C; Sat, 11 Jul 2020 13:56:37 +0000 (UTC) (envelope-from mr@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3s055NRmz3yD5; Sat, 11 Jul 2020 13:56:37 +0000 (UTC) (envelope-from mr@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 979691402B; Sat, 11 Jul 2020 13:56:37 +0000 (UTC) (envelope-from mr@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BDubjW079881; Sat, 11 Jul 2020 13:56:37 GMT (envelope-from mr@FreeBSD.org) Received: (from mr@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BDuaIr079878; Sat, 11 Jul 2020 13:56:36 GMT (envelope-from mr@FreeBSD.org) Message-Id: <202007111356.06BDuaIr079878@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mr set sender to mr@FreeBSD.org using -f From: Michael Reifenberger Date: Sat, 11 Jul 2020 13:56:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363095 - head/usr.bin/systat X-SVN-Group: head X-SVN-Commit-Author: mr X-SVN-Commit-Paths: head/usr.bin/systat X-SVN-Commit-Revision: 363095 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 13:56:37 -0000 Author: mr Date: Sat Jul 11 13:56:36 2020 New Revision: 363095 URL: https://svnweb.freebsd.org/changeset/base/363095 Log: Handle device removal and removal+add cases to fix infinity rate. PR: 219829 Submitted by: ota@j.email.ne.jp Reported by: rezo@live.cn MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D25226 Modified: head/usr.bin/systat/ifcmds.c head/usr.bin/systat/ifstat.c head/usr.bin/systat/systat.1 Modified: head/usr.bin/systat/ifcmds.c ============================================================================== --- head/usr.bin/systat/ifcmds.c Sat Jul 11 13:11:54 2020 (r363094) +++ head/usr.bin/systat/ifcmds.c Sat Jul 11 13:56:36 2020 (r363095) @@ -74,6 +74,8 @@ ifcmd(const char *cmd, const char *args) } } else if (prefix(cmd, "pps")) showpps = !showpps; + else + return (0); return (1); } Modified: head/usr.bin/systat/ifstat.c ============================================================================== --- head/usr.bin/systat/ifstat.c Sat Jul 11 13:11:54 2020 (r363094) +++ head/usr.bin/systat/ifstat.c Sat Jul 11 13:56:36 2020 (r363095) @@ -37,6 +37,7 @@ #include #include +#include #include #include #include @@ -67,7 +68,8 @@ SLIST_HEAD(, if_stat_disp) displist; struct if_stat { SLIST_ENTRY(if_stat) link; - char if_name[IF_NAMESIZE]; + char display_name[IF_NAMESIZE]; + char dev_name[IFNAMSIZ]; /* copied from ifmibdata */ struct ifmibdata if_mib; struct timeval tv; struct timeval tv_lastchanged; @@ -81,7 +83,7 @@ struct if_stat { uint64_t if_out_pps_peak; u_int if_row; /* Index into ifmib sysctl */ int if_ypos; /* -1 if not being displayed */ - u_int display; + bool display; u_int match; }; @@ -91,11 +93,13 @@ extern int showpps; extern int needsort; static int needclear = 0; +static bool displayall = false; -static void right_align_string(struct if_stat *); -static void getifmibdata(const int, struct ifmibdata *); +static void format_device_name(struct if_stat *); +static int getifmibdata(const int, struct ifmibdata *); static void sort_interface_list(void); static u_int getifnum(void); +static void clearifstat(void); #define IFSTAT_ERR(n, s) do { \ putchar('\014'); \ @@ -165,7 +169,7 @@ static u_int getifnum(void); } while (0) #define PUTNAME(p) do { \ - mvprintw(p->if_ypos, 0, "%s", p->if_name); \ + mvprintw(p->if_ypos, 0, "%s", p->display_name); \ mvprintw(p->if_ypos, col2-3, "%s", (const char *)"in"); \ mvprintw(p->if_ypos+1, col2-3, "%s", (const char *)"out"); \ } while (0) @@ -214,7 +218,7 @@ showifstat(void) SLIST_FOREACH(ifp, &curlist, link) { if (ifp->if_ypos < LINES - 3 && ifp->if_ypos != -1) - if (ifp->display == 0 || ifp->match == 0) { + if (!ifp->display || ifp->match == 0) { wmove(wnd, ifp->if_ypos, 0); wclrtoeol(wnd); wmove(wnd, ifp->if_ypos + 1, 0); @@ -235,7 +239,7 @@ int initifstat(void) { struct if_stat *p = NULL; - u_int n = 0, i = 0; + u_int n, i; n = getifnum(); if (n <= 0) @@ -247,18 +251,21 @@ initifstat(void) p = (struct if_stat *)calloc(1, sizeof(struct if_stat)); if (p == NULL) IFSTAT_ERR(1, "out of memory"); - SLIST_INSERT_HEAD(&curlist, p, link); p->if_row = i+1; - getifmibdata(p->if_row, &p->if_mib); - right_align_string(p); + if (getifmibdata(p->if_row, &p->if_mib) == -1) { + free(p); + continue; + } + SLIST_INSERT_HEAD(&curlist, p, link); + format_device_name(p); p->match = 1; /* * Initially, we only display interfaces that have - * received some traffic. + * received some traffic unless display-all is on. */ - if (p->if_mib.ifmd_data.ifi_ibytes != 0) - p->display = 1; + if (displayall || p->if_mib.ifmd_data.ifi_ibytes != 0) + p->display = true; } sort_interface_list(); @@ -269,13 +276,13 @@ initifstat(void) void fetchifstat(void) { - struct if_stat *ifp = NULL; + struct if_stat *ifp = NULL, *temp_var; struct timeval tv, new_tv, old_tv; double elapsed = 0.0; uint64_t new_inb, new_outb, old_inb, old_outb = 0; uint64_t new_inp, new_outp, old_inp, old_outp = 0; - SLIST_FOREACH(ifp, &curlist, link) { + SLIST_FOREACH_SAFE(ifp, &curlist, link, temp_var) { /* * Grab a copy of the old input/output values before we * call getifmibdata(). @@ -287,7 +294,22 @@ fetchifstat(void) ifp->tv_lastchanged = ifp->if_mib.ifmd_data.ifi_lastchange; (void)gettimeofday(&new_tv, NULL); - (void)getifmibdata(ifp->if_row, &ifp->if_mib); + if (getifmibdata(ifp->if_row, &ifp->if_mib) == -1 ) { + /* if a device was removed */ + SLIST_REMOVE(&curlist, ifp, if_stat, link); + free(ifp); + needsort = 1; + clearifstat(); + } else if (strcmp(ifp->dev_name, ifp->if_mib.ifmd_name) != 0 ) { + /* a device was removed and another one was added */ + format_device_name(ifp); + /* clear to the current value for the new device */ + old_inb = ifp->if_mib.ifmd_data.ifi_ibytes; + old_outb = ifp->if_mib.ifmd_data.ifi_obytes; + old_inp = ifp->if_mib.ifmd_data.ifi_ipackets; + old_outp = ifp->if_mib.ifmd_data.ifi_opackets; + needsort = 1; + } new_inb = ifp->if_mib.ifmd_data.ifi_ibytes; new_outb = ifp->if_mib.ifmd_data.ifi_obytes; @@ -295,8 +317,8 @@ fetchifstat(void) new_outp = ifp->if_mib.ifmd_data.ifi_opackets; /* Display interface if it's received some traffic. */ - if (new_inb > 0 && old_inb == 0) { - ifp->display = 1; + if (!ifp->display && new_inb > 0 && old_inb == 0) { + ifp->display = true; needsort = 1; } @@ -351,28 +373,18 @@ fetchifstat(void) /* * We want to right justify our interface names against the first column * (first sixteen or so characters), so we need to do some alignment. + * We save original name so that we can find a same spot is take by a + * different device. */ static void -right_align_string(struct if_stat *ifp) +format_device_name(struct if_stat *ifp) { - int str_len = 0, pad_len = 0; - char *newstr = NULL, *ptr = NULL; - if (ifp == NULL || ifp->if_mib.ifmd_name == NULL) - return; - else { - /* string length + '\0' */ - str_len = strlen(ifp->if_mib.ifmd_name)+1; - pad_len = IF_NAMESIZE-(str_len); - - newstr = ifp->if_name; - ptr = newstr + pad_len; - (void)memset((void *)newstr, (int)' ', IF_NAMESIZE); - (void)strncpy(ptr, (const char *)&ifp->if_mib.ifmd_name, - str_len); + if (ifp != NULL ) { + snprintf(ifp->display_name, IF_NAMESIZE, "%*s", IF_NAMESIZE-1, + ifp->if_mib.ifmd_name); + strcpy(ifp->dev_name, ifp->if_mib.ifmd_name); } - - return; } static int @@ -461,9 +473,10 @@ getifnum(void) return (data); } -static void +static int getifmibdata(int row, struct ifmibdata *data) { + int ret = 0; size_t datalen = 0; static int name[] = { CTL_NET, PF_LINK, @@ -474,9 +487,12 @@ getifmibdata(int row, struct ifmibdata *data) datalen = sizeof(*data); name[4] = row; - if ((sysctl(name, 6, (void *)data, (size_t *)&datalen, (void *)NULL, - (size_t)0) != 0) && (errno != ENOENT)) + ret = sysctl(name, 6, (void *)data, (size_t *)&datalen, (void *)NULL, + (size_t)0); + if ((ret != 0) && (errno != ENOENT)) IFSTAT_ERR(2, "sysctl error getting interface data"); + + return (ret); } int @@ -487,13 +503,23 @@ cmdifstat(const char *cmd, const char *args) retval = ifcmd(cmd, args); /* ifcmd() returns 1 on success */ if (retval == 1) { - if (needclear) { - showifstat(); - refresh(); - werase(wnd); - labelifstat(); - needclear = 0; - } + if (needclear) + clearifstat(); } + else if (prefix(cmd, "all")) { + retval = 1; + displayall = true; + } return (retval); +} + +static void +clearifstat(void) +{ + + showifstat(); + refresh(); + werase(wnd); + labelifstat(); + needclear = 0; } Modified: head/usr.bin/systat/systat.1 ============================================================================== --- head/usr.bin/systat/systat.1 Sat Jul 11 13:11:54 2020 (r363094) +++ head/usr.bin/systat/systat.1 Sat Jul 11 13:56:36 2020 (r363095) @@ -680,6 +680,7 @@ in Silicon Graphics' system. .Sh BUGS Certain displays presume a minimum of 80 characters per line. +Ifstat does not detect new interfaces. The .Ic vmstat display looks out of place because it is (it was added in as From owner-svn-src-all@freebsd.org Sat Jul 11 14:55:12 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id BD9C73654A5; Sat, 11 Jul 2020 14:55:12 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3tHh4cVWz42t4; Sat, 11 Jul 2020 14:55:12 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 684EF14A44; Sat, 11 Jul 2020 14:55:12 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BEtCwu016898; Sat, 11 Jul 2020 14:55:12 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BEtCru016897; Sat, 11 Jul 2020 14:55:12 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007111455.06BEtCru016897@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 14:55:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363096 - stable/12/sbin/md5 X-SVN-Group: stable-12 X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: stable/12/sbin/md5 X-SVN-Commit-Revision: 363096 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 14:55:12 -0000 Author: allanjude Date: Sat Jul 11 14:55:11 2020 New Revision: 363096 URL: https://svnweb.freebsd.org/changeset/base/363096 Log: MFC r346369 Close filedescriptors when done with them. MFC r362412 fix -c flag to work with input on stdin PR: 247295 Sponsored by: Klara Inc. Event: July 2020 Bugathon Modified: stable/12/sbin/md5/md5.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sbin/md5/md5.c ============================================================================== --- stable/12/sbin/md5/md5.c Sat Jul 11 13:56:36 2020 (r363095) +++ stable/12/sbin/md5/md5.c Sat Jul 11 14:55:11 2020 (r363096) @@ -52,11 +52,14 @@ __FBSDID("$FreeBSD$"); #define TEST_BLOCK_COUNT 100000 #define MDTESTCOUNT 8 +static int pflag; static int qflag; static int rflag; static int sflag; +static int skip; static char* checkAgainst; static int checksFailed; +static int failed; typedef void (DIGEST_Init)(void *); typedef void (DIGEST_Update)(void *, const unsigned char *, size_t); @@ -86,10 +89,10 @@ typedef struct Algorithm_t { } Algorithm_t; static void MD5_Update(MD5_CTX *, const unsigned char *, size_t); -static void MDString(const Algorithm_t *, const char *); +static void MDOutput(const Algorithm_t *, char *, char **); static void MDTimeTrial(const Algorithm_t *); static void MDTestSuite(const Algorithm_t *); -static void MDFilter(const Algorithm_t *, int); +static char *MDFilter(const Algorithm_t *, char*, int); static void usage(const Algorithm_t *); typedef union { @@ -170,9 +173,9 @@ main(int argc, char *argv[]) cap_rights_t rights; #endif int ch, fd; - char *p; + char *p, *string; char buf[HEX_DIGEST_LENGTH]; - int failed; + size_t len; unsigned digest; const char* progname; @@ -191,13 +194,14 @@ main(int argc, char *argv[]) failed = 0; checkAgainst = NULL; checksFailed = 0; + skip = 0; while ((ch = getopt(argc, argv, "c:pqrs:tx")) != -1) switch (ch) { case 'c': checkAgainst = optarg; break; case 'p': - MDFilter(&Algorithm[digest], 1); + pflag = 1; break; case 'q': qflag = 1; @@ -207,13 +211,15 @@ main(int argc, char *argv[]) break; case 's': sflag = 1; - MDString(&Algorithm[digest], optarg); + string = optarg; break; case 't': MDTimeTrial(&Algorithm[digest]); + skip = 1; break; case 'x': MDTestSuite(&Algorithm[digest]); + skip = 1; break; default: usage(&Algorithm[digest]); @@ -247,32 +253,21 @@ main(int argc, char *argv[]) err(1, "capsicum"); #endif } - if ((p = Algorithm[digest].Fd(fd, buf)) == NULL) { - warn("%s", *argv); - failed++; - } else { - if (qflag) - printf("%s", p); - else if (rflag) - printf("%s %s", p, *argv); - else - printf("%s (%s) = %s", - Algorithm[digest].name, *argv, p); - if (checkAgainst && strcasecmp(checkAgainst, p) != 0) - { - checksFailed++; - if (!qflag) - printf(" [ Failed ]"); - } - printf("\n"); - } + p = Algorithm[digest].Fd(fd, buf); + (void)close(fd); + MDOutput(&Algorithm[digest], p, argv); } while (*++argv); - } else if (!sflag && (optind == 1 || qflag || rflag)) { + } else if (!sflag && !skip) { #ifdef HAVE_CAPSICUM if (caph_limit_stdin() < 0 || caph_enter() < 0) err(1, "capsicum"); #endif - MDFilter(&Algorithm[digest], 0); + p = MDFilter(&Algorithm[digest], (char *)&buf, pflag); + MDOutput(&Algorithm[digest], p, NULL); + } else if (sflag) { + len = strlen(string); + p = Algorithm[digest].Data(string, len, buf); + MDOutput(&Algorithm[digest], p, &string); } if (failed != 0) @@ -282,30 +277,38 @@ main(int argc, char *argv[]) return (0); } + /* - * Digests a string and prints the result. + * Common output handling */ static void -MDString(const Algorithm_t *alg, const char *string) +MDOutput(const Algorithm_t *alg, char *p, char *argv[]) { - size_t len = strlen(string); - char buf[HEX_DIGEST_LENGTH]; - - alg->Data(string,len,buf); - if (qflag) - printf("%s", buf); - else if (rflag) - printf("%s \"%s\"", buf, string); - else - printf("%s (\"%s\") = %s", alg->name, string, buf); - if (checkAgainst && strcasecmp(buf,checkAgainst) != 0) - { - checksFailed++; - if (!qflag) - printf(" [ failed ]"); + if (p == NULL) { + warn("%s", *argv); + failed++; + } else { + /* + * If argv is NULL we are reading from stdin, where the output + * format has always been just the hash. + */ + if (qflag || argv == NULL) + printf("%s", p); + else if (rflag) + printf("%s %s", p, *argv); + else + printf("%s (%s) = %s", + alg->name, *argv, p); + if (checkAgainst && strcasecmp(checkAgainst, p) != 0) + { + checksFailed++; + if (!qflag) + printf(" [ Failed ]"); + } + printf("\n"); } - printf("\n"); } + /* * Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte blocks. */ @@ -505,13 +508,13 @@ MDTestSuite(const Algorithm_t *alg) /* * Digests the standard input and prints the result. */ -static void -MDFilter(const Algorithm_t *alg, int tee) +static char * +MDFilter(const Algorithm_t *alg, char *buf, int tee) { DIGEST_CTX context; unsigned int len; unsigned char buffer[BUFSIZ]; - char buf[HEX_DIGEST_LENGTH]; + char *p; alg->Init(&context); while ((len = fread(buffer, 1, BUFSIZ, stdin))) { @@ -519,7 +522,9 @@ MDFilter(const Algorithm_t *alg, int tee) err(1, "stdout"); alg->Update(&context, buffer, len); } - printf("%s\n", alg->End(&context, buf)); + p = alg->End(&context, buf); + + return (p); } static void From owner-svn-src-all@freebsd.org Sat Jul 11 15:32:54 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0C071366C81; Sat, 11 Jul 2020 15:32:54 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3v796b15z45Kn; Sat, 11 Jul 2020 15:32:53 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C548515509; Sat, 11 Jul 2020 15:32:53 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BFWrTx041418; Sat, 11 Jul 2020 15:32:53 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BFWr7Y041417; Sat, 11 Jul 2020 15:32:53 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007111532.06BFWr7Y041417@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 15:32:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363097 - head/usr.sbin/bsdinstall/scripts X-SVN-Group: head X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: head/usr.sbin/bsdinstall/scripts X-SVN-Commit-Revision: 363097 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 15:32:54 -0000 Author: allanjude Date: Sat Jul 11 15:32:53 2020 New Revision: 363097 URL: https://svnweb.freebsd.org/changeset/base/363097 Log: bsdinstall: kill dhclient before starting a new instance PR: 205821 Submitted by: William Orr MFC after: 2 weeks Sponsored by: Klara Inc. Event: July 2020 Bugathon Differential Revision: https://reviews.freebsd.org/D14572 Modified: head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 Modified: head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 ============================================================================== --- head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 Sat Jul 11 14:55:11 2020 (r363096) +++ head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 Sat Jul 11 15:32:53 2020 (r363097) @@ -51,7 +51,7 @@ if [ $? -eq $DIALOG_OK ]; then if [ ! -z $BSDINSTALL_CONFIGCURRENT ]; then ifconfig $INTERFACE up dialog --backtitle 'FreeBSD Installer' --infobox "Acquiring DHCP lease..." 0 0 - err=$( dhclient $INTERFACE 2>&1 ) + err=$( pkill dhclient; dhclient $INTERFACE 2>&1 ) if [ $? -ne 0 ]; then f_dprintf "%s" "$err" dialog --backtitle 'FreeBSD Installer' --msgbox "DHCP lease acquisition failed." 0 0 From owner-svn-src-all@freebsd.org Sat Jul 11 15:44:43 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id F203E367023; Sat, 11 Jul 2020 15:44:43 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3vNq21Qmz45c5; Sat, 11 Jul 2020 15:44:43 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: by mail-wr1-x433.google.com with SMTP id r12so8802193wrj.13; Sat, 11 Jul 2020 08:44:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=4i28J6n4cxkSye5q3iZiF8LxUw8sCGcHghGF4F9lQf0=; b=uO9txqc6OI+Dff8shubksuKXcdhHI72aZKYquByM4TE2NeAqcg9I3PYqm3PwSN0XJa bw6Aik62YadlVMIWW9ZuFg/+VewRabyGAt2qXvUryTRT0gPRuKr56jDrHNN+dKRukXQl qH83Run5AGajyCaoVRMkuy3VnQ/GMfr1wwml+b3RLypNfuZsqdDRVczNadmlFe1zNcZw jvfP+A3lwg+knK4Y7dt494vIrT3f6h7sqNKL/M9d+rQIhuV4fhk71mEslLPWyL4ui8oZ gfnuNYGC9trBuJoZ9HlSuaszCOgqMQLzeztsdsgPWA21G6InDi9NL4vopeij70KFccj/ lEaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=4i28J6n4cxkSye5q3iZiF8LxUw8sCGcHghGF4F9lQf0=; b=i/O1GTOne2A1siDCAiAJ/kyLBf63Ot/uIFaKT9w+fPHxJVTL0QH0h25WSQBGHUMaNf DGdy9q+uSAUMdhI9OFRf7lggi/QgnQwIGlE7O3cFDqp7vr6s5vrhJ4BhnP3hIlS/kVh1 rTyDvESTS8bXHweswOhjwnqJfZJ6yHhvLdiJBK7yZExrZJkwhD30T84BhvuWU/uzeuiv y6I8tQKwVxSd/8stonKLzhEL0YFqBmf68JTBGcbxrdPQK/1RITHyj/geYdrjr58MyZGG fHRlOFjzUH32GNyICNSuHC+2rrvFOE3U8QmxJm0ZuHFiLET2mOlAT3sKc1jfhQYw4pr7 Wghw== X-Gm-Message-State: AOAM5316yZcEQlrph7yuAK2LEonnv7uo3fN1ws9KgokSdUcD8yNuv7fo dm/c4XlEJllTiHIyHjKHTD70H2AwGywCGn+9XzAzFw== X-Google-Smtp-Source: ABdhPJzUvGqI2asjoia3ktHH7VWDdL6A/fer/ZCoJZR+ImcWKAG14z3oQIlqgQQPQf0v+7hZ2b9DRpVF/1YHXQQvIu0= X-Received: by 2002:adf:f311:: with SMTP id i17mr75575167wro.237.1594482281421; Sat, 11 Jul 2020 08:44:41 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:adf:9d84:0:0:0:0:0 with HTTP; Sat, 11 Jul 2020 08:44:40 -0700 (PDT) In-Reply-To: <202007111532.06BFWr7Y041417@repo.freebsd.org> References: <202007111532.06BFWr7Y041417@repo.freebsd.org> From: Mateusz Guzik Date: Sat, 11 Jul 2020 17:44:40 +0200 Message-ID: Subject: Re: svn commit: r363097 - head/usr.sbin/bsdinstall/scripts To: Allan Jude Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4B3vNq21Qmz45c5 X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; REPLY(-4.00)[] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 15:44:44 -0000 On 7/11/20, Allan Jude wrote: > Author: allanjude > Date: Sat Jul 11 15:32:53 2020 > New Revision: 363097 > URL: https://svnweb.freebsd.org/changeset/base/363097 > > Log: > bsdinstall: kill dhclient before starting a new instance > > PR: 205821 > Submitted by: William Orr > MFC after: 2 weeks > Sponsored by: Klara Inc. > Event: July 2020 Bugathon > Differential Revision: https://reviews.freebsd.org/D14572 > > Modified: > head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 > > Modified: head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 > ============================================================================== > --- head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 Sat Jul 11 14:55:11 > 2020 (r363096) > +++ head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 Sat Jul 11 15:32:53 > 2020 (r363097) > @@ -51,7 +51,7 @@ if [ $? -eq $DIALOG_OK ]; then > if [ ! -z $BSDINSTALL_CONFIGCURRENT ]; then > ifconfig $INTERFACE up > dialog --backtitle 'FreeBSD Installer' --infobox "Acquiring DHCP > lease..." 0 0 > - err=$( dhclient $INTERFACE 2>&1 ) > + err=$( pkill dhclient; dhclient $INTERFACE 2>&1 ) > if [ $? -ne 0 ]; then > f_dprintf "%s" "$err" > dialog --backtitle 'FreeBSD Installer' --msgbox "DHCP lease acquisition > failed." 0 0 There can be more than one dhclient running, but this will kill everything. -- Mateusz Guzik From owner-svn-src-all@freebsd.org Sat Jul 11 15:57:47 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id CFD713676D0; Sat, 11 Jul 2020 15:57:47 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3vgv4w51z46sT; Sat, 11 Jul 2020 15:57:47 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8C5F6158FD; Sat, 11 Jul 2020 15:57:47 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BFvlXC054581; Sat, 11 Jul 2020 15:57:47 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BFvlJC054578; Sat, 11 Jul 2020 15:57:47 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007111557.06BFvlJC054578@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 15:57:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363098 - in stable: 11/cddl/contrib/opensolaris/cmd/zfs 11/cddl/contrib/opensolaris/cmd/zpool 11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs 12/cddl/contrib/opensolaris/cmd/zfs 12/c... X-SVN-Group: stable-12 X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: in stable: 11/cddl/contrib/opensolaris/cmd/zfs 11/cddl/contrib/opensolaris/cmd/zpool 11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs 12/cddl/contrib/opensolaris/cmd/zfs 12/cddl/contrib/opensolaris/c... X-SVN-Commit-Revision: 363098 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 15:57:47 -0000 Author: allanjude Date: Sat Jul 11 15:57:46 2020 New Revision: 363098 URL: https://svnweb.freebsd.org/changeset/base/363098 Log: MFC r362396 ZFS: Allow setting checksum=skein on boot pools PR: 245889 Reported by: delphij Sponsored by: Klara Inc. Event: July 2020 Bugathon Modified: stable/12/cddl/contrib/opensolaris/cmd/zfs/zfs.8 stable/12/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7 stable/12/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Directory Properties: stable/12/ (props changed) Changes in other areas also in this revision: Modified: stable/11/cddl/contrib/opensolaris/cmd/zfs/zfs.8 stable/11/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7 stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Directory Properties: stable/11/ (props changed) Modified: stable/12/cddl/contrib/opensolaris/cmd/zfs/zfs.8 ============================================================================== --- stable/12/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Sat Jul 11 15:32:53 2020 (r363097) +++ stable/12/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Sat Jul 11 15:57:46 2020 (r363098) @@ -1001,9 +1001,9 @@ for more information on these algorithms. .Pp Changing this property affects only newly-written data. .Pp -Salted checksum algorithms -.Pq Cm edonr , skein -are currently not supported for any filesystem on the boot pools. +The salted checksum algorithm +.Pq Cm edonr +is currently not supported on FreeBSD. .It Sy compression Ns = Ns Cm on | off | lzjb | gzip | gzip- Ns Ar N | Cm zle | Cm lz4 Controls the compression algorithm used for this dataset. Setting compression to Modified: stable/12/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7 ============================================================================== --- stable/12/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7 Sat Jul 11 15:32:53 2020 (r363097) +++ stable/12/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7 Sat Jul 11 15:57:46 2020 (r363098) @@ -632,6 +632,9 @@ and will return to being once all filesystems that have ever had their checksum set to .Sy skein are destroyed. +Booting off of pools using +.Sy skein +is supported. .It Sy allocation_classes .Bl -column "READ\-ONLY COMPATIBLE" "com.intel:allocation_classes" .It GUID Ta com.intel:allocation_classes Modified: stable/12/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c ============================================================================== --- stable/12/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Sat Jul 11 15:32:53 2020 (r363097) +++ stable/12/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Sat Jul 11 15:57:46 2020 (r363098) @@ -4368,16 +4368,7 @@ zfs_check_settable(const char *dsname, nvpair_t *pair, if ((err = spa_open(dsname, &spa, FTAG)) != 0) return (err); - /* - * Salted checksums are not supported on root pools. - */ - if (spa_bootfs(spa) != 0 && - intval < ZIO_CHECKSUM_FUNCTIONS && - (zio_checksum_table[intval].ci_flags & - ZCHECKSUM_FLAG_SALTED)) { - spa_close(spa, FTAG); - return (SET_ERROR(ERANGE)); - } + if (!spa_feature_is_enabled(spa, feature)) { spa_close(spa, FTAG); return (SET_ERROR(ENOTSUP)); From owner-svn-src-all@freebsd.org Sat Jul 11 15:57:48 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 85AD8367768; Sat, 11 Jul 2020 15:57:48 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3vgw32K2z46n8; Sat, 11 Jul 2020 15:57:48 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4CAF9155C1; Sat, 11 Jul 2020 15:57:48 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BFvmbf054589; Sat, 11 Jul 2020 15:57:48 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BFvleI054586; Sat, 11 Jul 2020 15:57:47 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007111557.06BFvleI054586@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 15:57:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r363098 - in stable: 11/cddl/contrib/opensolaris/cmd/zfs 11/cddl/contrib/opensolaris/cmd/zpool 11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs 12/cddl/contrib/opensolaris/cmd/zfs 12/c... X-SVN-Group: stable-11 X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: in stable: 11/cddl/contrib/opensolaris/cmd/zfs 11/cddl/contrib/opensolaris/cmd/zpool 11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs 12/cddl/contrib/opensolaris/cmd/zfs 12/cddl/contrib/opensolaris/c... X-SVN-Commit-Revision: 363098 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 15:57:48 -0000 Author: allanjude Date: Sat Jul 11 15:57:46 2020 New Revision: 363098 URL: https://svnweb.freebsd.org/changeset/base/363098 Log: MFC r362396 ZFS: Allow setting checksum=skein on boot pools PR: 245889 Reported by: delphij Sponsored by: Klara Inc. Event: July 2020 Bugathon Modified: stable/11/cddl/contrib/opensolaris/cmd/zfs/zfs.8 stable/11/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7 stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Directory Properties: stable/11/ (props changed) Changes in other areas also in this revision: Modified: stable/12/cddl/contrib/opensolaris/cmd/zfs/zfs.8 stable/12/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7 stable/12/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Directory Properties: stable/12/ (props changed) Modified: stable/11/cddl/contrib/opensolaris/cmd/zfs/zfs.8 ============================================================================== --- stable/11/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Sat Jul 11 15:32:53 2020 (r363097) +++ stable/11/cddl/contrib/opensolaris/cmd/zfs/zfs.8 Sat Jul 11 15:57:46 2020 (r363098) @@ -997,9 +997,9 @@ for more information on these algorithms. .Pp Changing this property affects only newly-written data. .Pp -Salted checksum algorithms -.Pq Cm edonr , skein -are currently not supported for any filesystem on the boot pools. +The salted checksum algorithm +.Pq Cm edonr +is currently not supported on FreeBSD. .It Sy compression Ns = Ns Cm on | off | lzjb | gzip | gzip- Ns Ar N | Cm zle | Cm lz4 Controls the compression algorithm used for this dataset. Setting compression to Modified: stable/11/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7 ============================================================================== --- stable/11/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7 Sat Jul 11 15:32:53 2020 (r363097) +++ stable/11/cddl/contrib/opensolaris/cmd/zpool/zpool-features.7 Sat Jul 11 15:57:46 2020 (r363098) @@ -608,6 +608,9 @@ and will return to being once all filesystems that have ever had their checksum set to .Sy skein are destroyed. +Booting off of pools using +.Sy skein +is supported. .El .Sh SEE ALSO .Xr zpool 8 Modified: stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c ============================================================================== --- stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Sat Jul 11 15:32:53 2020 (r363097) +++ stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Sat Jul 11 15:57:46 2020 (r363098) @@ -4299,16 +4299,7 @@ zfs_check_settable(const char *dsname, nvpair_t *pair, if ((err = spa_open(dsname, &spa, FTAG)) != 0) return (err); - /* - * Salted checksums are not supported on root pools. - */ - if (spa_bootfs(spa) != 0 && - intval < ZIO_CHECKSUM_FUNCTIONS && - (zio_checksum_table[intval].ci_flags & - ZCHECKSUM_FLAG_SALTED)) { - spa_close(spa, FTAG); - return (SET_ERROR(ERANGE)); - } + if (!spa_feature_is_enabled(spa, feature)) { spa_close(spa, FTAG); return (SET_ERROR(ENOTSUP)); From owner-svn-src-all@freebsd.org Sat Jul 11 16:38:46 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D2A4B368983; Sat, 11 Jul 2020 16:38:46 +0000 (UTC) (envelope-from ganbold@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3wbB5Hryz49P7; Sat, 11 Jul 2020 16:38:46 +0000 (UTC) (envelope-from ganbold@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 98EFE16101; Sat, 11 Jul 2020 16:38:46 +0000 (UTC) (envelope-from ganbold@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BGckUV079947; Sat, 11 Jul 2020 16:38:46 GMT (envelope-from ganbold@FreeBSD.org) Received: (from ganbold@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BGckll079946; Sat, 11 Jul 2020 16:38:46 GMT (envelope-from ganbold@FreeBSD.org) Message-Id: <202007111638.06BGckll079946@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ganbold set sender to ganbold@FreeBSD.org using -f From: Ganbold Tsagaankhuu Date: Sat, 11 Jul 2020 16:38:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363099 - stable/12/sys/dev/sdhci X-SVN-Group: stable-12 X-SVN-Commit-Author: ganbold X-SVN-Commit-Paths: stable/12/sys/dev/sdhci X-SVN-Commit-Revision: 363099 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 16:38:46 -0000 Author: ganbold Date: Sat Jul 11 16:38:46 2020 New Revision: 363099 URL: https://svnweb.freebsd.org/changeset/base/363099 Log: MFC r350162: Add emmc support for Rockchip RK3399 SoC. Tested on NanoPC-T4 board. Modified: stable/12/sys/dev/sdhci/sdhci_fdt.c Modified: stable/12/sys/dev/sdhci/sdhci_fdt.c ============================================================================== --- stable/12/sys/dev/sdhci/sdhci_fdt.c Sat Jul 11 15:57:46 2020 (r363098) +++ stable/12/sys/dev/sdhci/sdhci_fdt.c Sat Jul 11 16:38:46 2020 (r363099) @@ -52,6 +52,14 @@ __FBSDID("$FreeBSD$"); #include #include +#ifdef EXT_RESOURCES +#include +#include +#include +#include +#include +#endif + #include #include @@ -61,16 +69,37 @@ __FBSDID("$FreeBSD$"); #include "opt_mmccam.h" +#ifdef EXT_RESOURCES +#include "clkdev_if.h" +#include "syscon_if.h" +#endif + #define MAX_SLOTS 6 #define SDHCI_FDT_ARMADA38X 1 #define SDHCI_FDT_GENERIC 2 #define SDHCI_FDT_XLNX_ZY7 3 #define SDHCI_FDT_QUALCOMM 4 +#define SDHCI_FDT_RK3399 5 +#ifdef EXT_RESOURCES +#define RK3399_GRF_EMMCCORE_CON0 0xf000 +#define RK3399_CORECFG_BASECLKFREQ 0xff00 +#define RK3399_CORECFG_TIMEOUTCLKUNIT (1 << 7) +#define RK3399_CORECFG_TUNINGCOUNT 0x3f +#define RK3399_GRF_EMMCCORE_CON11 0xf02c +#define RK3399_CORECFG_CLOCKMULTIPLIER 0xff + +#define LOWEST_SET_BIT(mask) ((((mask) - 1) & (mask)) ^ (mask)) +#define SHIFTIN(x, mask) ((x) * LOWEST_SET_BIT(mask)) + +#define EMMCCARDCLK_ID 1000 +#endif + static struct ofw_compat_data compat_data[] = { { "marvell,armada-380-sdhci", SDHCI_FDT_ARMADA38X }, { "sdhci_generic", SDHCI_FDT_GENERIC }, { "qcom,sdhci-msm-v4", SDHCI_FDT_QUALCOMM }, + { "rockchip,rk3399-sdhci-5.1", SDHCI_FDT_RK3399 }, { "xlnx,zy7_sdhci", SDHCI_FDT_XLNX_ZY7 }, { NULL, 0 } }; @@ -90,8 +119,209 @@ struct sdhci_fdt_softc { bool wp_inverted; /* WP pin is inverted */ bool no_18v; /* No 1.8V support */ + +#ifdef EXT_RESOURCES + clk_t clk_xin; /* xin24m fixed clock */ + clk_t clk_ahb; /* ahb clock */ + phy_t phy; /* phy to be used */ +#endif }; +#ifdef EXT_RESOURCES +struct rk3399_emmccardclk_sc { + device_t clkdev; + bus_addr_t reg; +}; + +static int +rk3399_emmccardclk_init(struct clknode *clk, device_t dev) +{ + + clknode_init_parent_idx(clk, 0); + return (0); +} + +static clknode_method_t rk3399_emmccardclk_clknode_methods[] = { + /* Device interface */ + CLKNODEMETHOD(clknode_init, rk3399_emmccardclk_init), + CLKNODEMETHOD_END +}; +DEFINE_CLASS_1(rk3399_emmccardclk_clknode, rk3399_emmccardclk_clknode_class, + rk3399_emmccardclk_clknode_methods, sizeof(struct rk3399_emmccardclk_sc), + clknode_class); + +static int +rk3399_ofw_map(struct clkdom *clkdom, uint32_t ncells, + phandle_t *cells, struct clknode **clk) +{ + + if (ncells == 0) + *clk = clknode_find_by_id(clkdom, EMMCCARDCLK_ID); + else + return (ERANGE); + + if (*clk == NULL) + return (ENXIO); + return (0); +} + +static void +sdhci_init_rk3399_emmccardclk(device_t dev) +{ + struct clknode_init_def def; + struct rk3399_emmccardclk_sc *sc; + struct clkdom *clkdom; + struct clknode *clk; + clk_t clk_parent; + bus_addr_t paddr; + bus_size_t psize; + const char **clknames; + phandle_t node; + int i, nclocks, ncells, error; + + node = ofw_bus_get_node(dev); + + if (ofw_reg_to_paddr(node, 0, &paddr, &psize, NULL) != 0) { + device_printf(dev, "cannot parse 'reg' property\n"); + return; + } + + error = ofw_bus_parse_xref_list_get_length(node, "clocks", + "#clock-cells", &ncells); + if (error != 0 || ncells != 2) { + device_printf(dev, "couldn't find parent clocks\n"); + return; + } + + nclocks = ofw_bus_string_list_to_array(node, "clock-output-names", + &clknames); + /* No clocks to export */ + if (nclocks <= 0) + return; + + if (nclocks != 1) { + device_printf(dev, "Having %d clock instead of 1, aborting\n", + nclocks); + return; + } + + clkdom = clkdom_create(dev); + clkdom_set_ofw_mapper(clkdom, rk3399_ofw_map); + + memset(&def, 0, sizeof(def)); + def.id = EMMCCARDCLK_ID; + def.name = clknames[0]; + def.parent_names = malloc(sizeof(char *) * ncells, M_OFWPROP, M_WAITOK); + for (i = 0; i < ncells; i++) { + error = clk_get_by_ofw_index(dev, 0, i, &clk_parent); + if (error != 0) { + device_printf(dev, "cannot get clock %d\n", error); + return; + } + def.parent_names[i] = clk_get_name(clk_parent); + if (bootverbose) + device_printf(dev, "clk parent: %s\n", + def.parent_names[i]); + clk_release(clk_parent); + } + def.parent_cnt = ncells; + + clk = clknode_create(clkdom, &rk3399_emmccardclk_clknode_class, &def); + if (clk == NULL) { + device_printf(dev, "cannot create clknode\n"); + return; + } + + sc = clknode_get_softc(clk); + sc->reg = paddr; + sc->clkdev = device_get_parent(dev); + + clknode_register(clkdom, clk); + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + return; + } + + if (bootverbose) + clkdom_dump(clkdom); +} + +static int +sdhci_init_rk3399(device_t dev) +{ + struct sdhci_fdt_softc *sc = device_get_softc(dev); + struct syscon *grf = NULL; + phandle_t node; + uint64_t freq; + uint32_t mask, val; + int error; + + /* Get and activate clocks */ + error = clk_get_by_ofw_name(dev, 0, "clk_xin", &sc->clk_xin); + if (error != 0) { + device_printf(dev, "cannot get xin clock\n"); + return (ENXIO); + } + error = clk_enable(sc->clk_xin); + if (error != 0) { + device_printf(dev, "cannot enable xin clock\n"); + return (ENXIO); + } + error = clk_get_freq(sc->clk_xin, &freq); + if (error != 0) { + device_printf(dev, "cannot get xin clock frequency\n"); + return (ENXIO); + } + error = clk_get_by_ofw_name(dev, 0, "clk_ahb", &sc->clk_ahb); + if (error != 0) { + device_printf(dev, "cannot get ahb clock\n"); + return (ENXIO); + } + error = clk_enable(sc->clk_ahb); + if (error != 0) { + device_printf(dev, "cannot enable ahb clock\n"); + return (ENXIO); + } + + /* Register clock */ + sdhci_init_rk3399_emmccardclk(dev); + + /* Enable PHY */ + error = phy_get_by_ofw_name(dev, 0, "phy_arasan", &sc->phy); + if (error != 0) { + device_printf(dev, "Could not get phy\n"); + return (ENXIO); + } + error = phy_enable(sc->phy); + if (error != 0) { + device_printf(dev, "Could not enable phy\n"); + return (ENXIO); + } + /* Get syscon */ + node = ofw_bus_get_node(dev); + if (OF_hasprop(node, "arasan,soc-ctl-syscon") && + syscon_get_by_ofw_property(dev, node, + "arasan,soc-ctl-syscon", &grf) != 0) { + device_printf(dev, "cannot get grf driver handle\n"); + return (ENXIO); + } + + /* Disable clock multiplier */ + mask = RK3399_CORECFG_CLOCKMULTIPLIER; + val = 0; + SYSCON_WRITE_4(grf, RK3399_GRF_EMMCCORE_CON11, (mask << 16) | val); + + /* Set base clock frequency */ + mask = RK3399_CORECFG_BASECLKFREQ; + val = SHIFTIN((freq + (1000000 / 2)) / 1000000, + RK3399_CORECFG_BASECLKFREQ); + SYSCON_WRITE_4(grf, RK3399_GRF_EMMCCORE_CON0, (mask << 16) | val); + + return (0); +} +#endif + static uint8_t sdhci_fdt_read_1(device_t dev, struct sdhci_slot *slot, bus_size_t off) { @@ -212,6 +442,9 @@ sdhci_fdt_probe(device_t dev) sc->sdma_boundary = SDHCI_BLKSZ_SDMA_BNDRY_4K; device_set_desc(dev, "Qualcomm FDT SDHCI controller"); break; + case SDHCI_FDT_RK3399: + device_set_desc(dev, "Rockchip RK3399 fdt SDHCI controller"); + break; case SDHCI_FDT_XLNX_ZY7: sc->quirks = SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK; device_set_desc(dev, "Zynq-7000 generic fdt SDHCI controller"); @@ -254,6 +487,18 @@ sdhci_fdt_attach(device_t dev) device_printf(dev, "Can't allocate IRQ\n"); return (ENOMEM); } + +#ifdef EXT_RESOURCES + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == + SDHCI_FDT_RK3399) { + /* Initialize SDHCI */ + err = sdhci_init_rk3399(dev); + if (err != 0) { + device_printf(dev, "Cannot init RK3399 SDHCI\n"); + return (err); + } + } +#endif /* Scan all slots. */ slots = sc->num_slots; /* number of slots determined in probe(). */ From owner-svn-src-all@freebsd.org Sat Jul 11 16:57:45 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id A9B8F3690F7; Sat, 11 Jul 2020 16:57:45 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3x1541K4z4Bgv; Sat, 11 Jul 2020 16:57:45 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 68402163AB; Sat, 11 Jul 2020 16:57:45 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BGvjsJ092162; Sat, 11 Jul 2020 16:57:45 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BGvjJb092161; Sat, 11 Jul 2020 16:57:45 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007111657.06BGvjJb092161@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 16:57:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363100 - head/share/man/man5 X-SVN-Group: head X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: head/share/man/man5 X-SVN-Commit-Revision: 363100 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 16:57:45 -0000 Author: allanjude Date: Sat Jul 11 16:57:44 2020 New Revision: 363100 URL: https://svnweb.freebsd.org/changeset/base/363100 Log: defaults/rc.conf: note that the default is ppp_nat="YES" PR: 243062 Submitted by: Evilham MFC after: 2 weeks Sponsored by: Klara Inc. Differential Revision: https://reviews.freebsd.org/D25621 Modified: head/share/man/man5/rc.conf.5 Modified: head/share/man/man5/rc.conf.5 ============================================================================== --- head/share/man/man5/rc.conf.5 Sat Jul 11 16:38:46 2020 (r363099) +++ head/share/man/man5/rc.conf.5 Sat Jul 11 16:57:44 2020 (r363100) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 28, 2020 +.Dd July 11, 2020 .Dt RC.CONF 5 .Os .Sh NAME @@ -1955,6 +1955,8 @@ Used in conjunction with .Va gateway_enable allows hosts on private network addresses access to the Internet using this host as a network address translating router. +Default is +.Dq Li YES . .It Va ppp_ Ns Ao Ar profile Ac Ns _nat .Pq Vt str Overrides the global From owner-svn-src-all@freebsd.org Sat Jul 11 17:06:49 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 08C8B369971; Sat, 11 Jul 2020 17:06:49 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3xCX6Kmhz4CxB; Sat, 11 Jul 2020 17:06:48 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BDBB116511; Sat, 11 Jul 2020 17:06:48 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BH6mN4098560; Sat, 11 Jul 2020 17:06:48 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BH6mFg098559; Sat, 11 Jul 2020 17:06:48 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007111706.06BH6mFg098559@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 17:06:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363101 - head/usr.sbin/bsdinstall/scripts X-SVN-Group: head X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: head/usr.sbin/bsdinstall/scripts X-SVN-Commit-Revision: 363101 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 17:06:49 -0000 Author: allanjude Date: Sat Jul 11 17:06:48 2020 New Revision: 363101 URL: https://svnweb.freebsd.org/changeset/base/363101 Log: bsdinstall: don't fail if fstab is empty PR: 210865 Submitted by: Tim Lukasiewicz , h-fujishima@sakura.ad.jp (original version) Reported by: h-fujishima@sakura.ad.jp Reviewed by: sef MFC after: 2 weeks Sponsored by: Klara Inc. Event: July 2020 Bugathon Modified: head/usr.sbin/bsdinstall/scripts/umount Modified: head/usr.sbin/bsdinstall/scripts/umount ============================================================================== --- head/usr.sbin/bsdinstall/scripts/umount Sat Jul 11 16:57:44 2020 (r363100) +++ head/usr.sbin/bsdinstall/scripts/umount Sat Jul 11 17:06:48 2020 (r363101) @@ -39,4 +39,6 @@ cat $PATH_FSTAB | awk -v BSDINSTALL_CHROOT=$BSDINSTALL }' > $TMP_FSTAB umount $BSDINSTALL_CHROOT/dev 2>/dev/null -umount -F $TMP_FSTAB -a 2>/dev/null +if [ -n "$TMP_FSTAB" ]; then + umount -F $TMP_FSTAB -a 2>/dev/null +fi From owner-svn-src-all@freebsd.org Sat Jul 11 17:10:16 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B27E8369A55; Sat, 11 Jul 2020 17:10:16 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3xHX4Gckz4D81; Sat, 11 Jul 2020 17:10:16 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 75AEF16515; Sat, 11 Jul 2020 17:10:16 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BHAGCn098947; Sat, 11 Jul 2020 17:10:16 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BHAGc1098946; Sat, 11 Jul 2020 17:10:16 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202007111710.06BHAGc1098946@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Sat, 11 Jul 2020 17:10:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363102 - head/sbin/ping X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: head/sbin/ping X-SVN-Commit-Revision: 363102 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 17:10:16 -0000 Author: markj Date: Sat Jul 11 17:10:16 2020 New Revision: 363102 URL: https://svnweb.freebsd.org/changeset/base/363102 Log: ping(8): Check for integer truncation when handling the value for -s. PR: 239976 Submitted by: Neeraj MFC after: 1 week Event: July 2020 Bugathon Modified: head/sbin/ping/ping.c Modified: head/sbin/ping/ping.c ============================================================================== --- head/sbin/ping/ping.c Sat Jul 11 17:06:48 2020 (r363101) +++ head/sbin/ping/ping.c Sat Jul 11 17:10:16 2020 (r363102) @@ -478,7 +478,7 @@ main(int argc, char *const *argv) break; case 's': /* size of packet to send */ ltmp = strtol(optarg, &ep, 0); - if (*ep || ep == optarg || ltmp < 0) + if (*ep || ep == optarg || ltmp > INT_MAX || ltmp < 0) errx(EX_USAGE, "invalid packet size: `%s'", optarg); if (uid != 0 && ltmp > DEFDATALEN) { From owner-svn-src-all@freebsd.org Sat Jul 11 17:20:17 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D4BC8369CDF; Sat, 11 Jul 2020 17:20:17 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3xW54XQ9z4Dh9; Sat, 11 Jul 2020 17:20:17 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 802B3162F3; Sat, 11 Jul 2020 17:20:17 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BHKHHg005505; Sat, 11 Jul 2020 17:20:17 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BHKHUE005504; Sat, 11 Jul 2020 17:20:17 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007111720.06BHKHUE005504@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 17:20:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363103 - head/usr.sbin/bsdinstall/scripts X-SVN-Group: head X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: head/usr.sbin/bsdinstall/scripts X-SVN-Commit-Revision: 363103 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 17:20:17 -0000 Author: allanjude Date: Sat Jul 11 17:20:17 2020 New Revision: 363103 URL: https://svnweb.freebsd.org/changeset/base/363103 Log: bsdinstall: only kill the dhclient for the interface we are restarting PR: 205821 Reported by: mjg MFC after: 2 weeks Sponsored by: Klara Inc. Event: July 2020 Bugathon Modified: head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 Modified: head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 ============================================================================== --- head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 Sat Jul 11 17:10:16 2020 (r363102) +++ head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 Sat Jul 11 17:20:17 2020 (r363103) @@ -51,7 +51,7 @@ if [ $? -eq $DIALOG_OK ]; then if [ ! -z $BSDINSTALL_CONFIGCURRENT ]; then ifconfig $INTERFACE up dialog --backtitle 'FreeBSD Installer' --infobox "Acquiring DHCP lease..." 0 0 - err=$( pkill dhclient; dhclient $INTERFACE 2>&1 ) + err=$( pkill -F /var/run/dhclient/dhclient.${INTERFACE}.pid; dhclient $INTERFACE 2>&1 ) if [ $? -ne 0 ]; then f_dprintf "%s" "$err" dialog --backtitle 'FreeBSD Installer' --msgbox "DHCP lease acquisition failed." 0 0 From owner-svn-src-all@freebsd.org Sat Jul 11 17:20:53 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 081B7369F27; Sat, 11 Jul 2020 17:20:53 +0000 (UTC) (envelope-from allanjude@freebsd.org) Received: from tor1-11.mx.scaleengine.net (tor1-11.mx.scaleengine.net [IPv6:2001:470:1:474::25]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3xWm4pXcz4Dj5; Sat, 11 Jul 2020 17:20:52 +0000 (UTC) (envelope-from allanjude@freebsd.org) Received: from [10.1.1.2] (Seawolf.HML3.ScaleEngine.net [209.51.186.28]) (Authenticated sender: allanjude.freebsd@scaleengine.com) by tor1-11.mx.scaleengine.net (Postfix) with ESMTPSA id 806E4C11B; Sat, 11 Jul 2020 17:20:46 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.10.3 tor1-11.mx.scaleengine.net 806E4C11B Subject: Re: svn commit: r363097 - head/usr.sbin/bsdinstall/scripts To: Mateusz Guzik Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org, Mark Johnston References: <202007111532.06BFWr7Y041417@repo.freebsd.org> From: Allan Jude Autocrypt: addr=allanjude@freebsd.org; prefer-encrypt=mutual; keydata= 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 kiYh4ZtPB4Q= Message-ID: Date: Sat, 11 Jul 2020 13:20:45 -0400 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 4B3xWm4pXcz4Dj5 X-Spamd-Bar: / Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [0.00 / 15.00]; local_wl_from(0.00)[freebsd.org]; ASN(0.00)[asn:6939, ipnet:2001:470::/32, country:US] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 17:20:53 -0000 On 2020-07-11 11:44, Mateusz Guzik wrote: > On 7/11/20, Allan Jude wrote: >> Author: allanjude >> Date: Sat Jul 11 15:32:53 2020 >> New Revision: 363097 >> URL: https://svnweb.freebsd.org/changeset/base/363097 >> >> Log: >> bsdinstall: kill dhclient before starting a new instance >> >> PR: 205821 >> Submitted by: William Orr >> MFC after: 2 weeks >> Sponsored by: Klara Inc. >> Event: July 2020 Bugathon >> Differential Revision: https://reviews.freebsd.org/D14572 >> >> Modified: >> head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 >> >> Modified: head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 >> ============================================================================== >> --- head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 Sat Jul 11 14:55:11 >> 2020 (r363096) >> +++ head/usr.sbin/bsdinstall/scripts/netconfig_ipv4 Sat Jul 11 15:32:53 >> 2020 (r363097) >> @@ -51,7 +51,7 @@ if [ $? -eq $DIALOG_OK ]; then >> if [ ! -z $BSDINSTALL_CONFIGCURRENT ]; then >> ifconfig $INTERFACE up >> dialog --backtitle 'FreeBSD Installer' --infobox "Acquiring DHCP >> lease..." 0 0 >> - err=$( dhclient $INTERFACE 2>&1 ) >> + err=$( pkill dhclient; dhclient $INTERFACE 2>&1 ) >> if [ $? -ne 0 ]; then >> f_dprintf "%s" "$err" >> dialog --backtitle 'FreeBSD Installer' --msgbox "DHCP lease acquisition >> failed." 0 0 > > There can be more than one dhclient running, but this will kill everything. > Good point. Thanks to markj for the suggested fix, committed as r363103 -- Allan Jude From owner-svn-src-all@freebsd.org Sat Jul 11 18:04:10 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4764536B3CC; Sat, 11 Jul 2020 18:04:10 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3yTk18WBz4J95; Sat, 11 Jul 2020 18:04:10 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0BDE81729F; Sat, 11 Jul 2020 18:04:10 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BI49Sd037231; Sat, 11 Jul 2020 18:04:09 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BI49NM037230; Sat, 11 Jul 2020 18:04:09 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007111804.06BI49NM037230@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 18:04:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363104 - head/lib/libc/sys X-SVN-Group: head X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: head/lib/libc/sys X-SVN-Commit-Revision: 363104 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 18:04:10 -0000 Author: allanjude Date: Sat Jul 11 18:04:09 2020 New Revision: 363104 URL: https://svnweb.freebsd.org/changeset/base/363104 Log: procctl(2): consistently refer to the last agrument as 'data' Some older references called it 'arg' Also fix a syntax error that was underlining an entire sentence. PR: 247386 Reported by: Paul Floyd , PauAmma (research) MFC after: 2 weeks Sponsored by: Klara Inc. Modified: head/lib/libc/sys/procctl.2 Modified: head/lib/libc/sys/procctl.2 ============================================================================== --- head/lib/libc/sys/procctl.2 Sat Jul 11 17:20:17 2020 (r363103) +++ head/lib/libc/sys/procctl.2 Sat Jul 11 18:04:09 2020 (r363104) @@ -483,7 +483,7 @@ and must be the either caller's pid or zero, with no difference in effect. The value is cleared for child processes and when executing set-user-ID or set-group-ID binaries. -.Fa arg +.Fa data must point to a value of type .Vt int indicating the signal @@ -498,7 +498,7 @@ must be and .Fa id must be the either caller's pid or zero, with no difference in effect. -.Fa arg +.Fa data must point to a memory location that can hold a value of type .Vt int . If signal delivery has not been requested, it will contain zero @@ -596,7 +596,8 @@ privilege might use this option. .El .It Dv PROC_KPTI_STATUS Returns the current KPTI status for the specified process. -.Fa data must point to the integer variable, which returns the +.Fa data +must point to the integer variable, which returns the following statuses: .Bl -tag -width PROC_KPTI_CTL_DISABLE_ON_EXEC .It Dv PROC_KPTI_CTL_ENABLE_ON_EXEC @@ -624,7 +625,7 @@ will fail if: .Bl -tag -width Er .It Bq Er EFAULT The -.Fa arg +.Fa data parameter points outside the process's allocated address space. .It Bq Er EINVAL The @@ -644,7 +645,7 @@ and .Fa id . .It Bq Er EINVAL An invalid operation or flag was passed in -.Fa arg +.Fa data for a .Dv PROC_SPROTECT command. From owner-svn-src-all@freebsd.org Sat Jul 11 18:24:17 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9C48736C809; Sat, 11 Jul 2020 18:24:17 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3ywx3MVvz4Nmx; Sat, 11 Jul 2020 18:24:17 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 56C66174EE; Sat, 11 Jul 2020 18:24:17 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BIOHC5054243; Sat, 11 Jul 2020 18:24:17 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BIOHEd054242; Sat, 11 Jul 2020 18:24:17 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007111824.06BIOHEd054242@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 18:24:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363105 - head/usr.sbin/ppp X-SVN-Group: head X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: head/usr.sbin/ppp X-SVN-Commit-Revision: 363105 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 18:24:17 -0000 Author: allanjude Date: Sat Jul 11 18:24:16 2020 New Revision: 363105 URL: https://svnweb.freebsd.org/changeset/base/363105 Log: ppp: Document the fact that ppp_nat is enabled by default No functional change. PR: 243062 Submitted by: Evilham (original version) MFC after: 2 weeks Sponsored by: Klara Inc. Event: July 2020 Bugathon Differential Revision: https://reviews.freebsd.org/D25623 Modified: head/usr.sbin/ppp/ppp.8 Modified: head/usr.sbin/ppp/ppp.8 ============================================================================== --- head/usr.sbin/ppp/ppp.8 Sat Jul 11 18:04:09 2020 (r363104) +++ head/usr.sbin/ppp/ppp.8 Sat Jul 11 18:24:16 2020 (r363105) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd March 25, 2017 +.Dd July 11, 2020 .Dt PPP 8 .Os .Sh NAME @@ -1653,6 +1653,15 @@ Check that IP forwarding is enabled in and that other machines have designated the .Nm host as the gateway for the LAN. +When starting +.Nm +with the provided rc script, the default is to +enable NAT; see +.Va ppp_nat +in +.Xr rc.conf 5 +and +.Pa /etc/defaults/rc.conf . .Sh PACKET FILTERING This implementation supports packet filtering. There are four kinds of From owner-svn-src-all@freebsd.org Sat Jul 11 18:27:06 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 6BD4E36CB0C; Sat, 11 Jul 2020 18:27:06 +0000 (UTC) (envelope-from carlavilla@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B3z0B2D1vz4PDT; Sat, 11 Jul 2020 18:27:06 +0000 (UTC) (envelope-from carlavilla@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 309D9174F9; Sat, 11 Jul 2020 18:27:06 +0000 (UTC) (envelope-from carlavilla@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BIR6NI054456; Sat, 11 Jul 2020 18:27:06 GMT (envelope-from carlavilla@FreeBSD.org) Received: (from carlavilla@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BIR5pY054454; Sat, 11 Jul 2020 18:27:05 GMT (envelope-from carlavilla@FreeBSD.org) Message-Id: <202007111827.06BIR5pY054454@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: carlavilla set sender to carlavilla@FreeBSD.org using -f From: Sergio Carlavilla Delgado Date: Sat, 11 Jul 2020 18:27:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363106 - head/share/man/man7 X-SVN-Group: head X-SVN-Commit-Author: carlavilla X-SVN-Commit-Paths: head/share/man/man7 X-SVN-Commit-Revision: 363106 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 18:27:06 -0000 Author: carlavilla (doc committer) Date: Sat Jul 11 18:27:05 2020 New Revision: 363106 URL: https://svnweb.freebsd.org/changeset/base/363106 Log: Add orders man page PR: 239020 Submitted by: gbe@ Approved by: imp@ Obtained from: NetBSD MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D24293 Added: head/share/man/man7/orders.7 (contents, props changed) Modified: head/share/man/man7/Makefile Modified: head/share/man/man7/Makefile ============================================================================== --- head/share/man/man7/Makefile Sat Jul 11 18:24:16 2020 (r363105) +++ head/share/man/man7/Makefile Sat Jul 11 18:27:05 2020 (r363106) @@ -21,6 +21,7 @@ MAN= arch.7 \ intro.7 \ maclabel.7 \ operator.7 \ + orders.7 \ ports.7 \ release.7 \ sdoc.7 \ Added: head/share/man/man7/orders.7 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/share/man/man7/orders.7 Sat Jul 11 18:27:05 2020 (r363106) @@ -0,0 +1,111 @@ +.\" $NetBSD: orders.7,v 1.6 2011/08/06 11:07:18 jruoho Exp $ +.\" +.\" Copyright (c) 2010 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to The NetBSD Foundation +.\" by Jukka Ruohonen. +.\" +.\" 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. +.\" +.\" $FreeBSD$ +.\" +.Dd August 6, 2011 +.Dt ORDERS 7 +.Os +.Sh NAME +.Nm orders +.Nd orders of magnitude +.Sh DESCRIPTION +The following table lists common multiples of bytes. +.Bl -column -offset 2n \ +"Kilobyte" "Prefix" "Power of 2" "Power of 10" +.It Sy Name Ta Sy Prefix Ta Sy Power of 2 Ta Sy Power of 10 +.It Kilobyte Ta kB Ta 2^10 Ta 10^3 +.It Megabyte Ta MB Ta 2^20 Ta 10^6 +.It Gigabyte Ta GB Ta 2^30 Ta 10^9 +.It Terabyte Ta TB Ta 2^40 Ta 10^12 +.It Petabyte Ta PB Ta 2^50 Ta 10^15 +.It Exabyte Ta EB Ta 2^60 Ta 10^18 +.It Zettabyte Ta ZB Ta 2^70 Ta 10^21 +.It Yottabyte Ta YB Ta 2^80 Ta 10^24 +.El +.Pp +The following table lists common bit rates as a power of ten. +.Bl -column -offset 2n \ +"Megabit per second" "Prefix" "Bit per second" "Byte per second" +.It Sy Name Ta Sy Prefix Ta Sy Bit per second Ta Sy Byte per second +.It Bit per second Ta bit/s Ta 1 Ta 0.125 +.It Byte per second Ta B/s Ta 8 Ta 1 +.It Kilobit per second Ta kbit/s Ta 10^3 Ta 125 +.It Kilobyte per second Ta kB/s Ta 8 * 10^3 Ta 1000 +.It Megabit per second Ta Mbit/s Ta 10^6 Ta 125000 +.It Megabyte per second Ta MB/s Ta 8 * 10^6 Ta 1000000 +.It Gigabit per second Ta Gbit/s Ta 10^9 Ta 125000000 +.It Gigabyte per second Ta GB/s Ta 8 * 10^9 Ta 1000000000 +.It Terabit per second Ta Tbit/s Ta 10^12 Ta 125000000000 +.It Terabyte per second Ta TB/s Ta 8 * 10^12 Ta 1000000000000 +.El +.Pp +The following table lists common orders of magnitude as a power of ten. +.Bl -column -offset 2n \ +"Septillionth" "Order" "Prefix" "Symbol" "Decimal" +.It Sy Name Ta Sy Order Ta Sy Prefix Ta Sy Symbol Ta Sy Decimal +.It Septillionth Ta 10^-24 Ta yocto Ta y Ta 0.000000000000000000000001 +.It Sextillionth Ta 10^-21 Ta zepto Ta z Ta 0.000000000000000000001 +.It Quintillionth Ta 10^-18 Ta atto Ta a Ta 0.000000000000000001 +.It Quadrillionth Ta 10^-15 Ta femto Ta f Ta 0.000000000000001 +.It Trillionth Ta 10^-12 Ta pico Ta p Ta 0.000000000001 +.It Billionth Ta 10^-9 Ta nano Ta n Ta 0.000000001 +.It Millionth Ta 10^-6 Ta micro Ta mu Ta 0.000001 +.It Thousandth Ta 10^-3 Ta milli Ta m Ta 0.001 +.It Hundredth Ta 10^-2 Ta centi Ta c Ta 0.01 +.It Tenth Ta 10^-1 Ta deci Ta d Ta 0.1 +.It One Ta 10^0 Ta - Ta - Ta 1 +.It Ten Ta 10^1 Ta deca Ta da Ta 10 +.It Hundred Ta 10^2 Ta hecto Ta h Ta 100 +.It Thousand Ta 10^3 Ta kilo Ta k Ta 1000 +.It Million Ta 10^6 Ta mega Ta M Ta 1000000 +.It Billion Ta 10^9 Ta giga Ta G Ta 1000000000 +.It Trillion Ta 10^12 Ta tera Ta T Ta 1000000000000 +.It Quadrillion Ta 10^15 Ta peta Ta P Ta 1000000000000000 +.It Quintillion Ta 10^18 Ta exa Ta E Ta 1000000000000000000 +.It Sextillion Ta 10^21 Ta zetta Ta Z Ta 1000000000000000000000 +.It Septillion Ta 10^24 Ta yotta Ta Y Ta 1000000000000000000000000 +.El +.Sh SEE ALSO +.Xr units 1 , +.Xr number 6 +.Sh STANDARDS +There have been various attempts to standardize the set of binary prefixes. +Organizations such as International Electrotechnical Commission +.Pq Tn IEC +have proposed new prefixes such as +.Dq kibi , +.Dq mebi , +.Dq gibi , +and +.Dq yobi , +but the adoption has been slow at best. +.Sh AUTHORS +This manual page was written by +.An Jukka Ruohonen Aq Mt jruoho@netbsd.org . From owner-svn-src-all@freebsd.org Sat Jul 11 19:18:44 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8290C36DFD6; Sat, 11 Jul 2020 19:18:44 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B407m2mk9z4SWt; Sat, 11 Jul 2020 19:18:44 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 43CCF1830D; Sat, 11 Jul 2020 19:18:44 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BJIiPZ085441; Sat, 11 Jul 2020 19:18:44 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BJIivp085440; Sat, 11 Jul 2020 19:18:44 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007111918.06BJIivp085440@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 19:18:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363107 - head/sbin/reboot X-SVN-Group: head X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: head/sbin/reboot X-SVN-Commit-Revision: 363107 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 19:18:44 -0000 Author: allanjude Date: Sat Jul 11 19:18:43 2020 New Revision: 363107 URL: https://svnweb.freebsd.org/changeset/base/363107 Log: boot(8): Add additional cross references Provide hints to direct people towards gptzfsboot, zfsbootcfg, efibootmgr, etc PR: 199103 MFC after: 2 weeks Sponsored by: Klara Inc. Event: July 2020 Bugathon Modified: head/sbin/reboot/boot_i386.8 Modified: head/sbin/reboot/boot_i386.8 ============================================================================== --- head/sbin/reboot/boot_i386.8 Sat Jul 11 18:27:05 2020 (r363106) +++ head/sbin/reboot/boot_i386.8 Sat Jul 11 19:18:43 2020 (r363107) @@ -36,7 +36,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 7, 2020 +.Dd July 11, 2020 .Dt BOOT 8 i386 .Os .Sh NAME @@ -330,11 +330,15 @@ requirement has not been adhered to. .Xr config 8 , .Xr gpart 8 , .Xr gptboot 8 , +.Xr gptzfsboot 8 , .Xr halt 8 , .Xr loader 8 , .Xr nextboot 8 , .Xr reboot 8 , .Xr shutdown 8 , +.Xr zfsbootcfg 8 , +.Xr efibootmgr 8 , +.Xr efivar 8 , .Xr uefi 8 .Sh BUGS The bsdlabel format used by this version of From owner-svn-src-all@freebsd.org Sat Jul 11 19:29:25 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 72C5836EA21; Sat, 11 Jul 2020 19:29:25 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B40N52RcHz4THs; Sat, 11 Jul 2020 19:29:25 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 32DA0182BA; Sat, 11 Jul 2020 19:29:25 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BJTOuQ091806; Sat, 11 Jul 2020 19:29:24 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BJTOKh091805; Sat, 11 Jul 2020 19:29:24 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007111929.06BJTOKh091805@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 19:29:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363108 - head/sbin/reboot X-SVN-Group: head X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: head/sbin/reboot X-SVN-Commit-Revision: 363108 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 19:29:25 -0000 Author: allanjude Date: Sat Jul 11 19:29:24 2020 New Revision: 363108 URL: https://svnweb.freebsd.org/changeset/base/363108 Log: boot(8): fix sorting of cross references Reported by: yuripv Event: July 2020 Bugathon Modified: head/sbin/reboot/boot_i386.8 Modified: head/sbin/reboot/boot_i386.8 ============================================================================== --- head/sbin/reboot/boot_i386.8 Sat Jul 11 19:18:43 2020 (r363107) +++ head/sbin/reboot/boot_i386.8 Sat Jul 11 19:29:24 2020 (r363108) @@ -328,6 +328,8 @@ requirement has not been adhered to. .Xr boot0cfg 8 , .Xr btxld 8 , .Xr config 8 , +.Xr efibootmgr 8 , +.Xr efivar 8 , .Xr gpart 8 , .Xr gptboot 8 , .Xr gptzfsboot 8 , @@ -336,10 +338,8 @@ requirement has not been adhered to. .Xr nextboot 8 , .Xr reboot 8 , .Xr shutdown 8 , -.Xr zfsbootcfg 8 , -.Xr efibootmgr 8 , -.Xr efivar 8 , -.Xr uefi 8 +.Xr uefi 8 , +.Xr zfsbootcfg 8 .Sh BUGS The bsdlabel format used by this version of .Bx From owner-svn-src-all@freebsd.org Sat Jul 11 19:44:12 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C130B36EAD9; Sat, 11 Jul 2020 19:44:12 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B40j84jWsz4V5f; Sat, 11 Jul 2020 19:44:12 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 852011855E; Sat, 11 Jul 2020 19:44:12 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BJiCJr004082; Sat, 11 Jul 2020 19:44:12 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BJiCKK004081; Sat, 11 Jul 2020 19:44:12 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007111944.06BJiCKK004081@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 19:44:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363109 - head/usr.sbin/nscd X-SVN-Group: head X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: head/usr.sbin/nscd X-SVN-Commit-Revision: 363109 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 19:44:12 -0000 Author: allanjude Date: Sat Jul 11 19:44:12 2020 New Revision: 363109 URL: https://svnweb.freebsd.org/changeset/base/363109 Log: nscd: does not warn about invalid values what parsing config file PR: 202135 Submitted by: amutu@amutu.com Reported By: Trond.Endrestol@ximalas.info Reviewed by: markj, freqlabs MFC after: 4 weeks Sponsored by: Klara Inc. Event: July 2020 Bugathon Differential Revision: https://reviews.freebsd.org/D25627 Modified: head/usr.sbin/nscd/parser.c Modified: head/usr.sbin/nscd/parser.c ============================================================================== --- head/usr.sbin/nscd/parser.c Sat Jul 11 19:29:24 2020 (r363108) +++ head/usr.sbin/nscd/parser.c Sat Jul 11 19:44:12 2020 (r363109) @@ -375,6 +375,7 @@ parse_config_file(struct configuration *config, char *fields[128]; int field_count, line_num, value; int res; + int invalid_value; TRACE_IN(parse_config_file); assert(config != NULL); @@ -388,6 +389,7 @@ parse_config_file(struct configuration *config, res = 0; line_num = 0; + invalid_value = 0; memset(buffer, 0, sizeof(buffer)); while ((res == 0) && (fgets(buffer, sizeof(buffer) - 1, fin) != NULL)) { field_count = strbreak(buffer, fields, sizeof(fields)); @@ -421,12 +423,20 @@ parse_config_file(struct configuration *config, (strcmp(fields[0], "positive-time-to-live") == 0) && (check_cachename(fields[1]) == 0) && ((value = get_number(fields[2], 0, -1)) != -1)) { + if (value <= 0) { + invalid_value = 1; + break; + } set_positive_time_to_live(config, fields[1], value); continue; } else if ((field_count == 3) && (strcmp(fields[0], "positive-confidence-threshold") == 0) && ((value = get_number(fields[2], 1, -1)) != -1)) { + if (value <= 0) { + invalid_value = 1; + break; + } set_positive_confidence_threshold(config, fields[1], value); continue; @@ -450,12 +460,20 @@ parse_config_file(struct configuration *config, (strcmp(fields[0], "negative-time-to-live") == 0) && (check_cachename(fields[1]) == 0) && ((value = get_number(fields[2], 0, -1)) != -1)) { + if (value <= 0) { + invalid_value = 1; + break; + } set_negative_time_to_live(config, fields[1], value); continue; } else if ((field_count == 3) && (strcmp(fields[0], "negative-confidence-threshold") == 0) && ((value = get_number(fields[2], 1, -1)) != -1)) { + if (value <= 0) { + invalid_value = 1; + break; + } set_negative_confidence_threshold(config, fields[1], value); continue; @@ -473,6 +491,10 @@ parse_config_file(struct configuration *config, (strcmp(fields[0], "suggested-size") == 0) && (check_cachename(fields[1]) == 0) && ((value = get_number(fields[2], 1, -1)) != -1)) { + if (value <= 0) { + invalid_value = 1; + break; + } set_suggested_size(config, fields[1], value); continue; } @@ -490,6 +512,10 @@ parse_config_file(struct configuration *config, (strcmp(fields[0], "keep-hot-count") == 0) && (check_cachename(fields[1]) == 0) && ((value = get_number(fields[2], 0, -1)) != -1)) { + if (value < 0) { + invalid_value = 1; + break; + } set_keep_hot_count(config, fields[1], value); continue; @@ -509,9 +535,16 @@ parse_config_file(struct configuration *config, break; } - LOG_ERR_2("config file parser", "error in file " - "%s on line %d", fname, line_num); - *error_str = "syntax error"; + if (invalid_value != 0) { + LOG_ERR_2("Invalid value for parameter", + "error in file %s on line %d", + fname, line_num); + *error_str = "invalid value"; + } else { + LOG_ERR_2("config file parser", "error in file " + "%s on line %d", fname, line_num); + *error_str = "syntax error"; + } *error_line = line_num; res = -1; } From owner-svn-src-all@freebsd.org Sat Jul 11 20:53:32 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id A771D3710B5; Sat, 11 Jul 2020 20:53:32 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B42F840xmz4b1Q; Sat, 11 Jul 2020 20:53:32 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6D61219691; Sat, 11 Jul 2020 20:53:32 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BKrW91048646; Sat, 11 Jul 2020 20:53:32 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BKrVxv048643; Sat, 11 Jul 2020 20:53:31 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007112053.06BKrVxv048643@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 20:53:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363110 - in head: share/man/man5 usr.sbin/periodic usr.sbin/periodic/etc/daily X-SVN-Group: head X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: in head: share/man/man5 usr.sbin/periodic usr.sbin/periodic/etc/daily X-SVN-Commit-Revision: 363110 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 20:53:32 -0000 Author: allanjude Date: Sat Jul 11 20:53:31 2020 New Revision: 363110 URL: https://svnweb.freebsd.org/changeset/base/363110 Log: Add a periodic script to backup the partition table and boot code Optionally, alert you if the contents change from the previous backup PR: 86388 Submitted by: Rob Fairbanks , Miroslav Lachman <000.fbsd@quip.cz> (Original Version) MFC after: 4 weeks Relnotes: yes Sponsored by: Klara Inc. Event: July 2020 Bugathon Differential Revision: https://reviews.freebsd.org/D25628 Added: head/usr.sbin/periodic/etc/daily/221.backup-gpart (contents, props changed) Modified: head/share/man/man5/periodic.conf.5 head/usr.sbin/periodic/periodic.conf Modified: head/share/man/man5/periodic.conf.5 ============================================================================== --- head/share/man/man5/periodic.conf.5 Sat Jul 11 19:44:12 2020 (r363109) +++ head/share/man/man5/periodic.conf.5 Sat Jul 11 20:53:31 2020 (r363110) @@ -252,6 +252,22 @@ Files will be deleted using the same criteria as would normally use when determining whether to believe the cached information, as configured in .Pa /etc/mail/sendmail.cf . +.It Va daily_backup_efi_enable +.Pq Vt bool +Set to +.Dq Li YES +To create backup of EFI System Partion (ESP). +.It Va daily_backup_gpart_enable +.Pq Vt bool +Set to +.Dq Li YES +To create backups of partition tables, and bootcode partition contents. +.It Va daily_backup_gpart_verbose +.Pq Vt bool +Set to +.Dq Li YES +To be verbose if existing backups for kern.geom.conftxt or the partition tables differ +from the new backups. .It Va daily_backup_passwd_enable .Pq Vt bool Set to Added: head/usr.sbin/periodic/etc/daily/221.backup-gpart ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.sbin/periodic/etc/daily/221.backup-gpart Sat Jul 11 20:53:31 2020 (r363110) @@ -0,0 +1,124 @@ +#!/bin/sh + +## $FreeBSD$ +## Created by: Miroslav Lachman <000.fbsd@quip.cz> + +## Backup of disk partitions layout, useful for gpart restore. +## Data are stored on local filesystem, in /var/backup. +## It is recommended to copy those files to off-site storage. + + +## If there is a global system configuration file, suck it in. +## +if [ -r /etc/defaults/periodic.conf ] +then + . /etc/defaults/periodic.conf + source_periodic_confs +fi + +bak_dir=/var/backups + +rotate() { + base_name=$1 + show_diff=$2 + file="$bak_dir/$base_name" + + if [ -f "${file}.bak" ] ; then + rc=0 + if cmp -s "${file}.bak" "${file}.tmp"; then + rm "${file}.tmp" + else + rc=1 + [ -n "$show_diff" ] && diff "${file}.bak" "${file}.tmp" + mv "${file}.bak" "${file}.bak2" || rc=3 + mv "${file}.tmp" "${file}.bak" || rc=3 + fi + else + rc=1 + mv "${file}.tmp" "${file}.bak" || rc=3 + [ -n "$show_diff" ] && cat "${file}.bak" + fi +} + +case "$daily_backup_gpart_verbose" in + [Yy][Ee][Ss]) show="YES" +esac + +case "$daily_backup_gpart_enable" in + [Yy][Ee][Ss]) + + echo "" + echo "Dump of kern.geom.conftxt:"; + sysctl -n kern.geom.conftxt > "$bak_dir/kern.geom.conftxt.tmp" + rotate "kern.geom.conftxt" $show + + gpart_devs=$(gpart show | awk '$1 == "=>" { print $4 }') + if [ -n "$daily_backup_gpart_exclude" ]; then + gpart_devs=$(echo ${gpart_devs} | grep -E -v "${daily_backup_gpart_exclude}") + fi + + if [ -z "$gpart_devs" ]; then + echo '$daily_backup_gpart_enable is set but no disk probed by kernel.' \ + "perhaps NFS diskless client." + rc=2 + else + echo "" + echo "Backup of partitions information for:"; + + for d in ${gpart_devs}; do + echo "$d" + safe_name=$(echo "gpart.${d}" | tr -cs ".[:alnum:]\n" "_") + gpart backup "$d" > "$bak_dir/$safe_name.tmp" + rotate "$safe_name" $show + done + + gpart_show=$(gpart show -p) + boot_part=$(echo "$gpart_show" | awk '$4 ~ /(bios|freebsd)-boot/ { print $3 }') + if [ -n "$boot_part" ]; then + echo "" + echo "Backup of boot partition content:" + for b in ${boot_part}; do + echo "$b" + safe_name=$(echo "boot.${b}" | tr -cs ".[:alnum:]\n" "_") + dd if="/dev/${b}" of="$bak_dir/$safe_name.tmp" 2> /dev/null + rotate "$safe_name" + done + fi + + mbr_part=$(echo "$gpart_show" | awk '$1 == "=>" && $5 == "MBR" { print $4 }') + if [ -n "$mbr_part" ]; then + echo "" + echo "Backup of MBR record:" + for mb in ${mbr_part}; do + echo "$mb" + safe_name=$(echo "boot.${mb}" | tr -cs ".[:alnum:]\n" "_") + dd if="/dev/${mb}" of="$bak_dir/$safe_name.tmp" bs=512 count=1 2> /dev/null + rotate "$safe_name" + done + fi + + fi + ;; + + *) rc=0 + ;; +esac + +case "$daily_backup_efi_enable" in + [Yy][Ee][Ss]) + + efi_part=$(gpart show -p | awk '$4 ~ /efi/ {print $3}') + if [ -n "$efi_part" ]; then + echo "" + echo "Backup of EFI partition content:" + for efi in ${efi_part}; do + echo "$efi" + safe_name=$(echo "efi.${efi}" | tr -cs ".[:alnum:]\n" "_") + dd if="/dev/${efi}" of="$bak_dir/$safe_name.tmp" 2> /dev/null + rotate "$safe_name" + done + fi + ;; +esac + +exit $rc Modified: head/usr.sbin/periodic/periodic.conf ============================================================================== --- head/usr.sbin/periodic/periodic.conf Sat Jul 11 19:44:12 2020 (r363109) +++ head/usr.sbin/periodic/periodic.conf Sat Jul 11 20:53:31 2020 (r363110) @@ -77,6 +77,11 @@ daily_backup_passwd_enable="YES" # Backup passwd & g # 210.backup-aliases daily_backup_aliases_enable="YES" # Backup mail aliases +# 221.backup-gpart +daily_backup_gpart_enable="YES" # Backup partition table/boot partition/MBR +daily_backup_gpart_verbose="NO" # Be verbose if new backup differs from the new one +daily_backup_efi_enable="NO" # Backup EFI system partition (ESP) + # 300.calendar daily_calendar_enable="NO" # Run calendar -a From owner-svn-src-all@freebsd.org Sat Jul 11 20:56:59 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2F32B370FDF; Sat, 11 Jul 2020 20:56:59 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B42K70VJgz4bQk; Sat, 11 Jul 2020 20:56:59 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CE6571917C; Sat, 11 Jul 2020 20:56:58 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BKuwOc048909; Sat, 11 Jul 2020 20:56:58 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BKuwWB048906; Sat, 11 Jul 2020 20:56:58 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007112056.06BKuwWB048906@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 20:56:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363111 - in head: libexec/getty share/man/man4 X-SVN-Group: head X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: in head: libexec/getty share/man/man4 X-SVN-Commit-Revision: 363111 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 20:56:59 -0000 Author: allanjude Date: Sat Jul 11 20:56:57 2020 New Revision: 363111 URL: https://svnweb.freebsd.org/changeset/base/363111 Log: Add cross references betwen ttys(5) and related drivers nmdm(4), ucom(4), and uart(4) PR: 247638 Submitted by: Pau Amma Reported by: 0mp MFC after: 4 weeks Sponsored by: Klara Inc. Event: July 2020 Bugathon Modified: head/libexec/getty/ttys.5 head/share/man/man4/nmdm.4 head/share/man/man4/uart.4 head/share/man/man4/ucom.4 Modified: head/libexec/getty/ttys.5 ============================================================================== --- head/libexec/getty/ttys.5 Sat Jul 11 20:53:31 2020 (r363110) +++ head/libexec/getty/ttys.5 Sat Jul 11 20:56:57 2020 (r363111) @@ -28,7 +28,7 @@ .\" from: @(#)ttys.5 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" " -.Dd August 3, 2018 +.Dd July 11, 2020 .Dt TTYS 5 .Os .Sh NAME @@ -162,6 +162,9 @@ ttyv0 "/usr/local/bin/xterm -display :0" xterm on wind .Sh SEE ALSO .Xr login 1 , .Xr getttyent 3 , +.Xr nmdm 4 , +.Xr uart 4 , +.Xr ucom 4 , .Xr gettytab 5 , .Xr login.conf 5 , .Xr termcap 5 , Modified: head/share/man/man4/nmdm.4 ============================================================================== --- head/share/man/man4/nmdm.4 Sat Jul 11 20:53:31 2020 (r363110) +++ head/share/man/man4/nmdm.4 Sat Jul 11 20:56:57 2020 (r363111) @@ -21,7 +21,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 23, 2018 +.Dd July 11, 2020 .Dt NMDM 4 .Os .Sh NAME @@ -89,7 +89,8 @@ None. .Sh SEE ALSO .Xr stty 1 , .Xr termios 4 , -.Xr tty 4 +.Xr tty 4 , +.Xr ttys 5 .Sh HISTORY The .Nm Modified: head/share/man/man4/uart.4 ============================================================================== --- head/share/man/man4/uart.4 Sat Jul 11 20:53:31 2020 (r363110) +++ head/share/man/man4/uart.4 Sat Jul 11 20:56:57 2020 (r363111) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 26, 2017 +.Dd July 11, 2020 .Dt UART 4 .Os .Sh NAME @@ -286,8 +286,10 @@ for callout ports corresponding callout initial-state and lock-state devices .El .Sh SEE ALSO +.Xr cu 1 , .Xr puc 4 , -.Xr scc 4 +.Xr scc 4 , +.Xr ttys 5 .\" .Sh HISTORY The Modified: head/share/man/man4/ucom.4 ============================================================================== --- head/share/man/man4/ucom.4 Sat Jul 11 20:53:31 2020 (r363110) +++ head/share/man/man4/ucom.4 Sat Jul 11 20:56:57 2020 (r363111) @@ -29,7 +29,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 25, 2018 +.Dd July 11, 2020 .Dt UCOM 4 .Os .Sh NAME @@ -125,6 +125,7 @@ for callout ports corresponding callout initial-state and lock-state devices .El .Sh SEE ALSO +.Xr cu 1 , .Xr tty 4 , .Xr uark 4 , .Xr ubsa 4 , @@ -144,7 +145,8 @@ corresponding callout initial-state and lock-state dev .Xr usb 4 , .Xr uslcom 4 , .Xr uvisor 4 , -.Xr uvscom 4 +.Xr uvscom 4 , +.Xr ttys 5 .Sh HISTORY The .Nm From owner-svn-src-all@freebsd.org Sat Jul 11 21:57:04 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1F97A37259A; Sat, 11 Jul 2020 21:57:04 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B43fS01lJz4flk; Sat, 11 Jul 2020 21:57:04 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D8C2B19F43; Sat, 11 Jul 2020 21:57:03 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BLv3NZ086317; Sat, 11 Jul 2020 21:57:03 GMT (envelope-from mjg@FreeBSD.org) Received: (from mjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BLv32u086316; Sat, 11 Jul 2020 21:57:03 GMT (envelope-from mjg@FreeBSD.org) Message-Id: <202007112157.06BLv32u086316@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mjg set sender to mjg@FreeBSD.org using -f From: Mateusz Guzik Date: Sat, 11 Jul 2020 21:57:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363112 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: mjg X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 363112 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 21:57:04 -0000 Author: mjg Date: Sat Jul 11 21:57:03 2020 New Revision: 363112 URL: https://svnweb.freebsd.org/changeset/base/363112 Log: fd: stop looping in pwd_hold We don't expect to fail acquiring the reference unless running into a corner case. Just in case ensure forward progress by taking the lock. Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D25616 Modified: head/sys/kern/kern_descrip.c Modified: head/sys/kern/kern_descrip.c ============================================================================== --- head/sys/kern/kern_descrip.c Sat Jul 11 20:56:57 2020 (r363111) +++ head/sys/kern/kern_descrip.c Sat Jul 11 21:57:03 2020 (r363112) @@ -3347,13 +3347,17 @@ pwd_hold(struct thread *td) fdp = td->td_proc->p_fd; smr_enter(pwd_smr); - for (;;) { - pwd = smr_entered_load(&fdp->fd_pwd, pwd_smr); - MPASS(pwd != NULL); - if (refcount_acquire_if_not_zero(&pwd->pwd_refcount)) - break; + pwd = smr_entered_load(&fdp->fd_pwd, pwd_smr); + MPASS(pwd != NULL); + if (__predict_true(refcount_acquire_if_not_zero(&pwd->pwd_refcount))) { + smr_exit(pwd_smr); + return (pwd); } smr_exit(pwd_smr); + FILEDESC_SLOCK(fdp); + pwd = pwd_hold_filedesc(fdp); + MPASS(pwd != NULL); + FILEDESC_SUNLOCK(fdp); return (pwd); } From owner-svn-src-all@freebsd.org Sat Jul 11 21:57:44 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2488137244B; Sat, 11 Jul 2020 21:57:44 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B43gD07B7z4fYQ; Sat, 11 Jul 2020 21:57:44 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DD4A91A28C; Sat, 11 Jul 2020 21:57:43 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BLvhJn086392; Sat, 11 Jul 2020 21:57:43 GMT (envelope-from mjg@FreeBSD.org) Received: (from mjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BLvhn5086391; Sat, 11 Jul 2020 21:57:43 GMT (envelope-from mjg@FreeBSD.org) Message-Id: <202007112157.06BLvhn5086391@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mjg set sender to mjg@FreeBSD.org using -f From: Mateusz Guzik Date: Sat, 11 Jul 2020 21:57:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363113 - head/share/man/man9 X-SVN-Group: head X-SVN-Commit-Author: mjg X-SVN-Commit-Paths: head/share/man/man9 X-SVN-Commit-Revision: 363113 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 21:57:44 -0000 Author: mjg Date: Sat Jul 11 21:57:43 2020 New Revision: 363113 URL: https://svnweb.freebsd.org/changeset/base/363113 Log: sx: remove SX_NOADAPTIVE from the man page The flag itself was removed in r341593 Modified: head/share/man/man9/sx.9 Modified: head/share/man/man9/sx.9 ============================================================================== --- head/share/man/man9/sx.9 Sat Jul 11 21:57:03 2020 (r363112) +++ head/share/man/man9/sx.9 Sat Jul 11 21:57:43 2020 (r363113) @@ -124,12 +124,6 @@ argument to specifies a set of optional flags to alter the behavior of .Fa sx . It contains one or more of the following flags: -.Bl -tag -width SX_NOADAPTIVE -.It Dv SX_NOADAPTIVE -Disable adaptive spinning, rather than sleeping, for lock operations -while an exclusive lock holder is executing on another CPU. -Adaptive spinning is the default unless the kernel is compiled with -.Cd "options NO_ADAPTIVE_SX" . .It Dv SX_DUPOK Witness should not log messages about duplicate locks being acquired. .It Dv SX_NOWITNESS From owner-svn-src-all@freebsd.org Sat Jul 11 22:14:44 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id EB5BD372E86; Sat, 11 Jul 2020 22:14:44 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B442r5xVNz3Rxx; Sat, 11 Jul 2020 22:14:44 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B02E51A337; Sat, 11 Jul 2020 22:14:44 +0000 (UTC) (envelope-from allanjude@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BMEima098411; Sat, 11 Jul 2020 22:14:44 GMT (envelope-from allanjude@FreeBSD.org) Received: (from allanjude@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BMEich098410; Sat, 11 Jul 2020 22:14:44 GMT (envelope-from allanjude@FreeBSD.org) Message-Id: <202007112214.06BMEich098410@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: allanjude set sender to allanjude@FreeBSD.org using -f From: Allan Jude Date: Sat, 11 Jul 2020 22:14:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363114 - head/share/man/man5 X-SVN-Group: head X-SVN-Commit-Author: allanjude X-SVN-Commit-Paths: head/share/man/man5 X-SVN-Commit-Revision: 363114 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 22:14:45 -0000 Author: allanjude Date: Sat Jul 11 22:14:44 2020 New Revision: 363114 URL: https://svnweb.freebsd.org/changeset/base/363114 Log: periodic.conf: correct capitailization in the middle of a sentence Reported by: yuripv Event: July 2020 Bugathon Modified: head/share/man/man5/periodic.conf.5 Modified: head/share/man/man5/periodic.conf.5 ============================================================================== --- head/share/man/man5/periodic.conf.5 Sat Jul 11 21:57:43 2020 (r363113) +++ head/share/man/man5/periodic.conf.5 Sat Jul 11 22:14:44 2020 (r363114) @@ -256,17 +256,17 @@ as configured in .Pq Vt bool Set to .Dq Li YES -To create backup of EFI System Partion (ESP). +to create backup of EFI System Partion (ESP). .It Va daily_backup_gpart_enable .Pq Vt bool Set to .Dq Li YES -To create backups of partition tables, and bootcode partition contents. +to create backups of partition tables, and bootcode partition contents. .It Va daily_backup_gpart_verbose .Pq Vt bool Set to .Dq Li YES -To be verbose if existing backups for kern.geom.conftxt or the partition tables differ +to be verbose if existing backups for kern.geom.conftxt or the partition tables differ from the new backups. .It Va daily_backup_passwd_enable .Pq Vt bool From owner-svn-src-all@freebsd.org Sat Jul 11 22:45:09 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 00F48373149; Sat, 11 Jul 2020 22:45:09 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B44jw6LyRz3TPF; Sat, 11 Jul 2020 22:45:08 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BCE8A1A9A6; Sat, 11 Jul 2020 22:45:08 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BMj8Z5016962; Sat, 11 Jul 2020 22:45:08 GMT (envelope-from sjg@FreeBSD.org) Received: (from sjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BMj5uU016947; Sat, 11 Jul 2020 22:45:05 GMT (envelope-from sjg@FreeBSD.org) Message-Id: <202007112245.06BMj5uU016947@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sjg set sender to sjg@FreeBSD.org using -f From: "Simon J. Gerraty" Date: Sat, 11 Jul 2020 22:45:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r363115 - in vendor/NetBSD/bmake/dist: . filemon mk unit-tests X-SVN-Group: vendor X-SVN-Commit-Author: sjg X-SVN-Commit-Paths: in vendor/NetBSD/bmake/dist: . filemon mk unit-tests X-SVN-Commit-Revision: 363115 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 22:45:09 -0000 Author: sjg Date: Sat Jul 11 22:45:05 2020 New Revision: 363115 URL: https://svnweb.freebsd.org/changeset/base/363115 Log: Import bmake-20200710 from ChangeLog: o filemon/filemon_dev.c: use O_CLOEXEC rather than extra syscall o meta.c: target flagged .META is out-of-date if meta file missing o cond.c: fix for compare_expression when doEval=0 o unit-tests/Makefile: rework o filemon/filemon_dev.c: ensure filemon fd is closed on exec. Modified: vendor/NetBSD/bmake/dist/ChangeLog vendor/NetBSD/bmake/dist/VERSION vendor/NetBSD/bmake/dist/cond.c vendor/NetBSD/bmake/dist/configure vendor/NetBSD/bmake/dist/configure.in vendor/NetBSD/bmake/dist/filemon/filemon_dev.c vendor/NetBSD/bmake/dist/meta.c vendor/NetBSD/bmake/dist/mk/ChangeLog vendor/NetBSD/bmake/dist/mk/dirdeps.mk vendor/NetBSD/bmake/dist/mk/host-target.mk vendor/NetBSD/bmake/dist/mk/install-mk vendor/NetBSD/bmake/dist/unit-tests/Makefile vendor/NetBSD/bmake/dist/unit-tests/cond-short.exp vendor/NetBSD/bmake/dist/unit-tests/cond-short.mk vendor/NetBSD/bmake/dist/unit-tests/modmisc.exp vendor/NetBSD/bmake/dist/unit-tests/modmisc.mk Modified: vendor/NetBSD/bmake/dist/ChangeLog ============================================================================== --- vendor/NetBSD/bmake/dist/ChangeLog Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/ChangeLog Sat Jul 11 22:45:05 2020 (r363115) @@ -1,3 +1,20 @@ +2020-07-10 Simon J Gerraty + + * configure.in: use AC_INCLUDES_DEFAULT rather than AC_HEADER_STDC + + * VERSION (_MAKE_VERSION): 20200710 + Merge with NetBSD make, pick up + o filemon/filemon_dev.c: use O_CLOEXEC rather than extra syscall + o meta.c: target flagged .META is out-of-date if meta file missing + +2020-07-09 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20200709 + Merge with NetBSD make, pick up + o cond.c: fix for compare_expression when doEval=0 + o unit-tests/Makefile: rework + o filemon/filemon_dev.c: ensure filemon fd is closed on exec. + 2020-07-04 Simon J Gerraty * VERSION (_MAKE_VERSION): 20200704 Modified: vendor/NetBSD/bmake/dist/VERSION ============================================================================== --- vendor/NetBSD/bmake/dist/VERSION Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/VERSION Sat Jul 11 22:45:05 2020 (r363115) @@ -1,2 +1,2 @@ # keep this compatible with sh and make -_MAKE_VERSION=20200704 +_MAKE_VERSION=20200710 Modified: vendor/NetBSD/bmake/dist/cond.c ============================================================================== --- vendor/NetBSD/bmake/dist/cond.c Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/cond.c Sat Jul 11 22:45:05 2020 (r363115) @@ -1,4 +1,4 @@ -/* $NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: cond.c,v 1.79 2020/07/09 22:34:08 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -70,14 +70,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $"; +static char rcsid[] = "$NetBSD: cond.c,v 1.79 2020/07/09 22:34:08 sjg Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)cond.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: cond.c,v 1.78 2020/07/03 08:13:23 rillig Exp $"); +__RCSID("$NetBSD: cond.c,v 1.79 2020/07/09 22:34:08 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -735,6 +735,11 @@ compare_expression(Boolean doEval) rhs = CondGetString(doEval, &rhsQuoted, &rhsFree, FALSE); if (!rhs) goto done; + + if (!doEval) { + t = TOK_FALSE; + goto done; + } if (rhsQuoted || lhsQuoted) { do_string_compare: Modified: vendor/NetBSD/bmake/dist/configure ============================================================================== Binary file (source and/or target). No diff available. Modified: vendor/NetBSD/bmake/dist/configure.in ============================================================================== --- vendor/NetBSD/bmake/dist/configure.in Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/configure.in Sat Jul 11 22:45:05 2020 (r363115) @@ -1,11 +1,11 @@ dnl dnl RCSid: -dnl $Id: configure.in,v 1.65 2020/05/25 01:11:40 sjg Exp $ +dnl $Id: configure.in,v 1.66 2020/07/10 16:34:38 sjg Exp $ dnl dnl Process this file with autoconf to produce a configure script dnl AC_PREREQ(2.50) -AC_INIT([bmake], [20200524], [sjg@NetBSD.org]) +AC_INIT([bmake], [20200710], [sjg@NetBSD.org]) AC_CONFIG_HEADERS(config.h) dnl make srcdir absolute @@ -128,7 +128,7 @@ dnl AC_C_CROSS dnl dnl Checks for header files. -AC_HEADER_STDC +AC_INCLUDES_DEFAULT AC_HEADER_SYS_WAIT AC_HEADER_DIRENT dnl Keep this list sorted @@ -149,13 +149,11 @@ AC_CHECK_HEADERS( \ paths.h \ poll.h \ ranlib.h \ - string.h \ sys/mman.h \ sys/select.h \ sys/socket.h \ sys/time.h \ sys/uio.h \ - unistd.h \ utime.h \ ) Modified: vendor/NetBSD/bmake/dist/filemon/filemon_dev.c ============================================================================== --- vendor/NetBSD/bmake/dist/filemon/filemon_dev.c Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/filemon/filemon_dev.c Sat Jul 11 22:45:05 2020 (r363115) @@ -1,4 +1,4 @@ -/* $NetBSD: filemon_dev.c,v 1.1 2020/01/19 19:49:37 riastradh Exp $ */ +/* $NetBSD: filemon_dev.c,v 1.3 2020/07/10 15:53:30 sjg Exp $ */ /*- * Copyright (c) 2020 The NetBSD Foundation, Inc. @@ -70,7 +70,7 @@ filemon_open(void) return NULL; /* Try opening /dev/filemon, up to six times (cargo cult!). */ - for (i = 0; (F->fd = open(_PATH_FILEMON, O_RDWR)) == -1; i++) { + for (i = 0; (F->fd = open(_PATH_FILEMON, O_RDWR|O_CLOEXEC)) == -1; i++) { if (i == 5) { error = errno; goto fail0; Modified: vendor/NetBSD/bmake/dist/meta.c ============================================================================== --- vendor/NetBSD/bmake/dist/meta.c Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/meta.c Sat Jul 11 22:45:05 2020 (r363115) @@ -1,4 +1,4 @@ -/* $NetBSD: meta.c,v 1.85 2020/07/03 08:13:23 rillig Exp $ */ +/* $NetBSD: meta.c,v 1.86 2020/07/11 00:39:53 sjg Exp $ */ /* * Implement 'meta' mode. @@ -1610,7 +1610,7 @@ meta_oodate(GNode *gn, Boolean oodate) oodate = TRUE; } } else { - if (writeMeta && metaMissing) { + if (writeMeta && (metaMissing || (gn->type & OP_META))) { cp = NULL; /* if target is in .CURDIR we do not need a meta file */ Modified: vendor/NetBSD/bmake/dist/mk/ChangeLog ============================================================================== --- vendor/NetBSD/bmake/dist/mk/ChangeLog Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/mk/ChangeLog Sat Jul 11 22:45:05 2020 (r363115) @@ -1,3 +1,7 @@ +2020-07-10 Simon J Gerraty + + * dirdeps.mk: optimize content of dirdeps.cache + 2020-06-28 Simon J Gerraty * sys/*.mk: make it easier for local*sys.mk to customize by Modified: vendor/NetBSD/bmake/dist/mk/dirdeps.mk ============================================================================== --- vendor/NetBSD/bmake/dist/mk/dirdeps.mk Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/mk/dirdeps.mk Sat Jul 11 22:45:05 2020 (r363115) @@ -1,4 +1,4 @@ -# $Id: dirdeps.mk,v 1.104 2020/05/16 23:21:48 sjg Exp $ +# $Id: dirdeps.mk,v 1.106 2020/07/11 16:25:17 sjg Exp $ # Copyright (c) 2010-2020, Simon J. Gerraty # Copyright (c) 2010-2018, Juniper Networks, Inc. @@ -507,7 +507,7 @@ ${DIRDEPS_CACHE}: .META .NOMETA_CMP # we want to capture the dirdeps count in the cache .END: _count_dirdeps _count_dirdeps: .NOMETA - @echo '.info $${.newline}$${TRACER}Makefiles read: total=${.MAKE.MAKEFILES:[#]} depend=${.MAKE.MAKEFILES:M*depend*:[#]} dirdeps=${.ALLTARGETS:M${SRCTOP}*:O:u:[#]}' >&3 + @{ echo; echo '.info $${.newline}$${TRACER}Makefiles read: total=${.MAKE.MAKEFILES:[#]} depend=${.MAKE.MAKEFILES:M*depend*:[#]} dirdeps=${.ALLTARGETS:M${SRCTOP}*:O:u:[#]}'; } >&3 .endif .elif !make(dirdeps) && !target(_count_dirdeps) @@ -644,19 +644,19 @@ _build_all_dirs := ${_build_all_dirs:O:u} .if ${.MAKEFLAGS:M-V${_V_READ_DIRDEPS}} == "" .if !empty(_build_all_dirs) .if ${BUILD_DIRDEPS_CACHE} == "yes" -# guard against _build_all_dirs being too big for a single command line -# first get list of dirs that need _DIRDEP_USE -# then export that and _build_all_dirs +x!= echo; { echo; echo '\# ${DEP_RELDIR}.${DEP_TARGET_SPEC}'; } >&3 +# guard against _new_dirdeps being too big for a single command line _new_dirdeps := ${_build_all_dirs:@x@${target($x):?:$x}@} -.export _new_dirdeps _build_all_dirs -x!= echo; { echo '\# ${DEP_RELDIR}.${DEP_TARGET_SPEC}'; \ - echo "dirdeps: \\"; \ - for x in $$_build_all_dirs; do echo " $$x \\"; done; echo; \ - for x in $$_new_dirdeps; do echo "$$x: _DIRDEP_USE"; done; echo; } >&3 +.if !empty(_new_dirdeps) +.export _new_dirdeps +x!= echo; { echo; echo "dirdeps: \\"; \ + for x in $$_new_dirdeps; do echo " $$x \\"; done; echo; \ + for x in $$_new_dirdeps; do echo "$$x: _DIRDEP_USE"; done; } >&3 +.endif .if !empty(DEP_EXPORT_VARS) # Discouraged, but there are always exceptions. # Handle it here rather than explain how. -x!= { echo; ${DEP_EXPORT_VARS:@v@echo '$v=${$v}';@} echo '.export ${DEP_EXPORT_VARS}'; echo; } >&3; echo +x!= echo; { echo; ${DEP_EXPORT_VARS:@v@echo '$v=${$v}';@} echo '.export ${DEP_EXPORT_VARS}'; echo; } >&3 .endif .else # this makes it all happen @@ -675,6 +675,9 @@ DEP_EXPORT_VARS= # this builds the dependency graph .for m in ${_machines} +.if ${BUILD_DIRDEPS_CACHE} == "yes" && !empty(_build_dirs) +x!= echo; { echo; echo "${_this_dir}.$m: \\"; } >&3 +.endif # it would be nice to do :N${.TARGET} .if !empty(__qual_depdirs) .for q in ${__qual_depdirs:${M_dep_qual_fixes:ts:}:E:O:u:N$m} @@ -683,9 +686,10 @@ DEP_EXPORT_VARS= .endif .if ${BUILD_DIRDEPS_CACHE} == "yes" _cache_deps := ${_build_dirs:M*.$q} +.if !empty(_cache_deps) .export _cache_deps -x!= echo; { echo "${_this_dir}.$m: \\"; \ - for x in $$_cache_deps; do echo " $$x \\"; done; echo; } >&3 +x!= echo; for x in $$_cache_deps; do echo " $$x \\"; done >&3 +.endif .else ${_this_dir}.$m: ${_build_dirs:M*.$q} .endif @@ -696,9 +700,10 @@ ${_this_dir}.$m: ${_build_dirs:M*.$q} .endif .if ${BUILD_DIRDEPS_CACHE} == "yes" _cache_deps := ${_build_dirs:M*.$m:N${_this_dir}.$m} +.if !empty(_cache_deps) .export _cache_deps -x!= echo; { echo "${_this_dir}.$m: \\"; \ - for x in $$_cache_deps; do echo " $$x \\"; done; echo; } >&3 +x!= echo; for x in $$_cache_deps; do echo " $$x \\"; done >&3 +.endif .else ${_this_dir}.$m: ${_build_dirs:M*.$m:N${_this_dir}.$m} .endif Modified: vendor/NetBSD/bmake/dist/mk/host-target.mk ============================================================================== --- vendor/NetBSD/bmake/dist/mk/host-target.mk Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/mk/host-target.mk Sat Jul 11 22:45:05 2020 (r363115) @@ -1,5 +1,5 @@ # RCSid: -# $Id: host-target.mk,v 1.11 2015/10/25 00:07:20 sjg Exp $ +# $Id: host-target.mk,v 1.12 2020/07/08 23:35:29 sjg Exp $ # Host platform information; may be overridden .if !defined(_HOST_OSNAME) @@ -37,6 +37,11 @@ HOST_OSTYPE := ${_HOST_OSNAME:S,/,,g}-${_HOST_OSREL:C HOST_OS := ${_HOST_OSNAME} host_os := ${_HOST_OSNAME:tl} HOST_TARGET := ${host_os:S,/,,g}${HOST_OSMAJOR}-${_HOST_ARCH} +# sometimes we want HOST_TARGET32 +MACHINE32.amd64 = i386 +MACHINE32.x86_64 = i386 +_HOST_ARCH32 := ${MACHINE32.${_HOST_ARCH}:U${_HOST_ARCH:S,64$,,}} +HOST_TARGET32 := ${host_os:S,/,,g}${HOST_OSMAJOR}-${_HOST_ARCH32} # tr is insanely non-portable, accommodate the lowest common denominator TR ?= tr Modified: vendor/NetBSD/bmake/dist/mk/install-mk ============================================================================== --- vendor/NetBSD/bmake/dist/mk/install-mk Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/mk/install-mk Sat Jul 11 22:45:05 2020 (r363115) @@ -55,7 +55,7 @@ # Simon J. Gerraty # RCSid: -# $Id: install-mk,v 1.173 2020/06/23 04:16:35 sjg Exp $ +# $Id: install-mk,v 1.174 2020/07/10 21:50:14 sjg Exp $ # # @(#) Copyright (c) 1994 Simon J. Gerraty # @@ -70,7 +70,7 @@ # sjg@crufty.net # -MK_VERSION=20200622 +MK_VERSION=20200710 OWNER= GROUP= MODE=444 Modified: vendor/NetBSD/bmake/dist/unit-tests/Makefile ============================================================================== --- vendor/NetBSD/bmake/dist/unit-tests/Makefile Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/unit-tests/Makefile Sat Jul 11 22:45:05 2020 (r363115) @@ -1,87 +1,105 @@ -# $Id: Makefile,v 1.58 2020/07/04 22:33:00 sjg Exp $ +# $Id: Makefile,v 1.60 2020/07/10 00:48:32 sjg Exp $ # -# $NetBSD: Makefile,v 1.59 2020/06/28 09:42:40 rillig Exp $ +# $NetBSD: Makefile,v 1.63 2020/07/09 22:40:14 sjg Exp $ # # Unit tests for make(1) +# # The main targets are: -# -# all: run all the tests -# test: run 'all', and compare to expected results -# accept: move generated output to expected results # -# Adding a test case. +# all: +# run all the tests +# test: +# run 'all', and compare to expected results +# accept: +# move generated output to expected results +# +# Settable variables +# +# TEST_MAKE +# The make program to be tested. +# +# +# Adding a test case +# # Each feature should get its own set of tests in its own suitably # named makefile (*.mk), with its own set of expected results (*.exp), -# and it should be added to the TESTNAMES list. -# +# and it should be added to the TESTS list. +# +# Any added files must also be added to src/distrib/sets/lists/tests/mi. +# Makefiles that are not added to TESTS must be ignored in +# src/tests/usr.bin/make/t_make.sh (example: include-sub). +# -.MAIN: all +# Each test is in a sub-makefile. +# Keep the list sorted. +TESTS+= comment +TESTS+= cond-late +TESTS+= cond-short +TESTS+= cond1 +TESTS+= cond2 +TESTS+= dollar +TESTS+= doterror +TESTS+= dotwait +TESTS+= error +TESTS+= # escape # broken by reverting POSIX changes +TESTS+= export +TESTS+= export-all +TESTS+= export-env +TESTS+= forloop +TESTS+= forsubst +TESTS+= hash +TESTS+= # impsrc # broken by reverting POSIX changes +TESTS+= include-main +TESTS+= misc +TESTS+= moderrs +TESTS+= modmatch +TESTS+= modmisc +TESTS+= modorder +TESTS+= modts +TESTS+= modword +TESTS+= order +TESTS+= # phony-end # broken by reverting POSIX changes +TESTS+= posix +TESTS+= # posix1 # broken by reverting POSIX changes +TESTS+= qequals +TESTS+= # suffixes # broken by reverting POSIX changes +TESTS+= sunshcmd +TESTS+= sysv +TESTS+= ternary +TESTS+= unexport +TESTS+= unexport-env +TESTS+= varcmd +TESTS+= varmisc +TESTS+= varmod-edge +TESTS+= varquote +TESTS+= varshell -.-include "Makefile.config" +# Override make flags for certain tests; default is -k. +FLAGS.doterror= # none +FLAGS.order= -j1 -UNIT_TESTS:= ${.PARSEDIR} -.PATH: ${UNIT_TESTS} +# Some tests need extra post-processing. +SED_CMDS.modmisc+= -e 's,\(substitution error:\).*,\1 (details omitted),' +SED_CMDS.varshell+= -e 's,^[a-z]*sh: ,,' +SED_CMDS.varshell+= -e '/command/s,No such.*,not found,' -# Each test is in a sub-makefile. -# Keep the list sorted. -TESTNAMES= \ - comment \ - cond-late \ - cond-short \ - cond1 \ - cond2 \ - dollar \ - doterror \ - dotwait \ - error \ - export \ - export-all \ - export-env \ - forloop \ - forsubst \ - hash \ - include-main \ - misc \ - moderrs \ - modmatch \ - modmisc \ - modorder \ - modts \ - modword \ - order \ - posix \ - qequals \ - sunshcmd \ - sysv \ - ternary \ - unexport \ - unexport-env \ - varcmd \ - varmisc \ - varmod-edge \ - varquote \ - varshell +# End of the configuration section. -# these tests were broken by referting POSIX chanegs -STRICT_POSIX_TESTS = \ - escape \ - impsrc \ - phony-end \ - posix1 \ - suffixes +.MAIN: all -# Override make flags for certain tests -flags.doterror= -flags.order=-j1 +.-include "Makefile.config" -OUTFILES= ${TESTNAMES:S/$/.out/} +UNIT_TESTS:= ${.PARSEDIR} +.PATH: ${UNIT_TESTS} +OUTFILES= ${TESTS:=.out} + all: ${OUTFILES} -CLEANFILES += *.rawout *.out *.status *.tmp *.core *.tmp -CLEANFILES += obj*.[och] lib*.a # posix1.mk -CLEANFILES += issue* .[ab]* # suffixes.mk -CLEANRECURSIVE += dir dummy # posix1.mk +CLEANFILES+= *.rawout *.out *.status *.tmp *.core *.tmp +CLEANFILES+= obj*.[och] lib*.a # posix1.mk +CLEANFILES+= issue* .[ab]* # suffixes.mk +CLEANRECURSIVE+= dir dummy # posix1.mk clean: rm -f ${CLEANFILES} @@ -89,45 +107,42 @@ clean: rm -rf ${CLEANRECURSIVE} .endif -TEST_MAKE?= ${.MAKE} -TOOL_SED?= sed -TOOL_TR?= tr -TOOL_DIFF?= diff +TEST_MAKE?= ${.MAKE} +TOOL_SED?= sed +TOOL_TR?= tr +TOOL_DIFF?= diff +DIFF_FLAGS?= -u .if defined(.PARSEDIR) # ensure consistent results from sort(1) -LC_ALL= C -LANG= C +LC_ALL= C +LANG= C .export LANG LC_ALL .endif -# some tests need extra post-processing -SED_CMDS.varshell = -e 's,^[a-z]*sh: ,,' \ - -e '/command/s,No such.*,not found,' - -# the detailed error message can vary across systems -SED_CMDS.modmisc = -e 's,\(substitution error:\).*,\1 details omitted,' - # the tests are actually done with sub-makes. .SUFFIXES: .mk .rawout .out .mk.rawout: - @echo ${TEST_MAKE} ${flags.${.TARGET:R}:U-k} -f ${.IMPSRC} + @echo ${TEST_MAKE} ${FLAGS.${.TARGET:R}:U-k} -f ${.IMPSRC} -@cd ${.OBJDIR} && \ - { ${TEST_MAKE} ${flags.${.TARGET:R}:U-k} -f ${.IMPSRC} \ + { ${TEST_MAKE} ${FLAGS.${.TARGET:R}:U-k} -f ${.IMPSRC} \ 2>&1 ; echo $$? >${.TARGET:R}.status ; } > ${.TARGET}.tmp @mv ${.TARGET}.tmp ${.TARGET} -# We always pretend .MAKE was called 'make' -# and strip ${.CURDIR}/ from the output -# and replace anything after 'stopped in' with unit-tests -# so the results can be compared. +# Post-process the test output so that the results can be compared. +# +# always pretend .MAKE was called 'make' +_SED_CMDS+= -e 's,^${TEST_MAKE:T:S,.,\\.,g}[][0-9]*:,make:,' +_SED_CMDS+= -e 's,${TEST_MAKE:S,.,\\.,g},make,' +# replace anything after 'stopped in' with unit-tests +_SED_CMDS+= -e '/stopped/s, /.*, unit-tests,' +# strip ${.CURDIR}/ from the output +_SED_CMDS+= -e 's,${.CURDIR:S,.,\\.,g}/,,g' +_SED_CMDS+= -e 's,${UNIT_TESTS:S,.,\\.,g}/,,g' + .rawout.out: @echo postprocess ${.TARGET} - @${TOOL_SED} -e 's,^${TEST_MAKE:T:C/\./\\\./g}[][0-9]*:,make:,' \ - -e 's,${TEST_MAKE:C/\./\\\./g},make,' \ - -e '/stopped/s, /.*, unit-tests,' \ - -e 's,${.CURDIR:C/\./\\\./g}/,,g' \ - -e 's,${UNIT_TESTS:C/\./\\\./g}/,,g' ${SED_CMDS.${.TARGET:T:R}} \ + @${TOOL_SED} ${_SED_CMDS} ${SED_CMDS.${.TARGET:R}} \ < ${.IMPSRC} > ${.TARGET}.tmp @echo "exit status `cat ${.TARGET:R}.status`" >> ${.TARGET}.tmp @mv ${.TARGET}.tmp ${.TARGET} @@ -135,7 +150,7 @@ SED_CMDS.modmisc = -e 's,\(substitution error:\).*,\1 # Compare all output files test: ${OUTFILES} .PHONY @failed= ; \ - for test in ${TESTNAMES}; do \ + for test in ${TESTS}; do \ ${TOOL_DIFF} ${DIFF_FLAGS} ${UNIT_TESTS}/$${test}.exp $${test}.out \ || failed="$${failed}$${failed:+ }$${test}" ; \ done ; \ @@ -146,14 +161,14 @@ test: ${OUTFILES} .PHONY fi accept: - @for test in ${TESTNAMES}; do \ + @for test in ${TESTS}; do \ cmp -s ${UNIT_TESTS}/$${test}.exp $${test}.out \ || { echo "Replacing $${test}.exp" ; \ cp $${test}.out ${UNIT_TESTS}/$${test}.exp ; } \ done .if exists(${TEST_MAKE}) -${TESTNAMES:S/$/.rawout/}: ${TEST_MAKE} +${TESTS:=.rawout}: ${TEST_MAKE} .endif .-include Modified: vendor/NetBSD/bmake/dist/unit-tests/cond-short.exp ============================================================================== --- vendor/NetBSD/bmake/dist/unit-tests/cond-short.exp Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/unit-tests/cond-short.exp Sat Jul 11 22:45:05 2020 (r363115) @@ -7,4 +7,10 @@ expected M pattern expected or expected or exists expected or empty +defined(V42) && 42 > 0: Ok +defined(V66) && ( "" < 42 ): Ok +1 || 42 < 42: Ok +1 || < 42: Ok +0 || 42 <= 42: Ok +0 || < 42: Ok exit status 0 Modified: vendor/NetBSD/bmake/dist/unit-tests/cond-short.mk ============================================================================== --- vendor/NetBSD/bmake/dist/unit-tests/cond-short.mk Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/unit-tests/cond-short.mk Sat Jul 11 22:45:05 2020 (r363115) @@ -1,4 +1,4 @@ -# $NetBSD: cond-short.mk,v 1.6 2020/07/02 16:37:56 rillig Exp $ +# $NetBSD: cond-short.mk,v 1.7 2020/07/09 22:34:09 sjg Exp $ # # Demonstrates that in conditions, the right-hand side of an && or || # is only evaluated if it can actually influence the result. @@ -96,6 +96,58 @@ VAR= # empty again, for the following tests .if 1 .elif ${echo "unexpected nested or" 1>&2 :L:sh} .endif + +# make sure these do not cause complaint +#.MAKEFLAGS: -dc + +V42 = 42 +iV1 = ${V42} +iV2 = ${V66} + +.if defined(V42) && ${V42} > 0 +x=Ok +.else +x=Fail +.endif +x!= echo 'defined(V42) && ${V42} > 0: $x' >&2; echo +# this one throws both String comparison operator and +# Malformed conditional with cond.c 1.78 +# indirect iV2 would expand to "" and treated as 0 +.if defined(V66) && ( ${iV2} < ${V42} ) +x=Fail +.else +x=Ok +.endif +x!= echo 'defined(V66) && ( "${iV2}" < ${V42} ): $x' >&2; echo +# next two thow String comparison operator with cond.c 1.78 +# indirect iV1 would expand to 42 +.if 1 || ${iV1} < ${V42} +x=Ok +.else +x=Fail +.endif +x!= echo '1 || ${iV1} < ${V42}: $x' >&2; echo +.if 1 || ${iV2:U2} < ${V42} +x=Ok +.else +x=Fail +.endif +x!= echo '1 || ${iV2:U2} < ${V42}: $x' >&2; echo +# the same expressions are fine when the lhs is expanded +# ${iV1} expands to 42 +.if 0 || ${iV1} <= ${V42} +x=Ok +.else +x=Fail +.endif +x!= echo '0 || ${iV1} <= ${V42}: $x' >&2; echo +# ${iV2:U2} expands to 2 +.if 0 || ${iV2:U2} < ${V42} +x=Ok +.else +x=Fail +.endif +x!= echo '0 || ${iV2:U2} < ${V42}: $x' >&2; echo all: @:;: Modified: vendor/NetBSD/bmake/dist/unit-tests/modmisc.exp ============================================================================== --- vendor/NetBSD/bmake/dist/unit-tests/modmisc.exp Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/unit-tests/modmisc.exp Sat Jul 11 22:45:05 2020 (r363115) @@ -25,11 +25,27 @@ C:empty :a b b c: :a b b c: : b c: -make: RE substitution error: details omitted +make: RE substitution error: (details omitted) make: Unclosed substitution for (, missing) :C,word,____,:Q}: :a c: :x__ 3 x__ 3: :+one+ +two+ +three+: mod-at-resolve:w1d2d3w w2i3w w1i2d3 2i${RES3}w w1d2d3 2i${RES3} 1i${RES2}w: +mod-subst-dollar:$1: +mod-subst-dollar:$2: +mod-subst-dollar:$3: +mod-subst-dollar:$4: +mod-subst-dollar:$5: +mod-subst-dollar:$6: +mod-subst-dollar:$7: +mod-subst-dollar:$8: +mod-subst-dollar:U8: +mod-subst-dollar:$$$$: +mod-loop-dollar:1: +mod-loop-dollar:${word}: +mod-loop-dollar:$3$: +mod-loop-dollar:$${word}$: +mod-loop-dollar:$$5$$: +mod-loop-dollar:$$${word}$$: exit status 0 Modified: vendor/NetBSD/bmake/dist/unit-tests/modmisc.mk ============================================================================== --- vendor/NetBSD/bmake/dist/unit-tests/modmisc.mk Sat Jul 11 22:14:44 2020 (r363114) +++ vendor/NetBSD/bmake/dist/unit-tests/modmisc.mk Sat Jul 11 22:45:05 2020 (r363115) @@ -1,4 +1,4 @@ -# $Id: modmisc.mk,v 1.1.1.2 2020/07/04 17:52:46 sjg Exp $ +# $Id: modmisc.mk,v 1.1.1.3 2020/07/09 22:35:19 sjg Exp $ # # miscellaneous modifier tests @@ -17,6 +17,7 @@ MOD_SEP=S,:, ,g all: modvar modvarloop modsysv mod-HTE emptyvar undefvar all: mod-S mod-C mod-at-varname mod-at-resolve +all: mod-subst-dollar mod-loop-dollar modsysv: @echo "The answer is ${libfoo.a:L:libfoo.a=42}" @@ -93,3 +94,34 @@ RES3= 3 mod-at-resolve: @echo $@:${RESOLVE:@v@w${v}w@:Q}: + +# No matter how many dollar characters there are, they all get merged +# into a single dollar by the :S modifier. +mod-subst-dollar: + @echo $@:${:U1:S,^,$,:Q}: + @echo $@:${:U2:S,^,$$,:Q}: + @echo $@:${:U3:S,^,$$$,:Q}: + @echo $@:${:U4:S,^,$$$$,:Q}: + @echo $@:${:U5:S,^,$$$$$,:Q}: + @echo $@:${:U6:S,^,$$$$$$,:Q}: + @echo $@:${:U7:S,^,$$$$$$$,:Q}: + @echo $@:${:U8:S,^,$$$$$$$$,:Q}: +# This generates no dollar at all: + @echo $@:${:UU8:S,^,${:U$$$$$$$$},:Q}: +# Here is an alternative way to generate dollar characters. +# It's unexpectedly complicated though. + @echo $@:${:U:range=5:ts\x24:C,[0-9],,g:Q}: + +# Demonstrate that it is possible to generate dollar characters using the +# :@ modifier. +# +# These are edge cases that could have resulted in a parse error as well +# since the $@ at the end could have been interpreted as a variable, which +# would mean a missing closing @ delimiter. +mod-loop-dollar: + @echo $@:${:U1:@word@${word}$@:Q}: + @echo $@:${:U2:@word@$${word}$$@:Q}: + @echo $@:${:U3:@word@$$${word}$$$@:Q}: + @echo $@:${:U4:@word@$$$${word}$$$$@:Q}: + @echo $@:${:U5:@word@$$$$${word}$$$$$@:Q}: + @echo $@:${:U6:@word@$$$$$${word}$$$$$$@:Q}: From owner-svn-src-all@freebsd.org Sat Jul 11 22:45:37 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7A1743734CA; Sat, 11 Jul 2020 22:45:37 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B44kT2cd6z3T4j; Sat, 11 Jul 2020 22:45:37 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 23A821A945; Sat, 11 Jul 2020 22:45:37 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 06BMjbqs017023; Sat, 11 Jul 2020 22:45:37 GMT (envelope-from sjg@FreeBSD.org) Received: (from sjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 06BMjbfx017022; Sat, 11 Jul 2020 22:45:37 GMT (envelope-from sjg@FreeBSD.org) Message-Id: <202007112245.06BMjbfx017022@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sjg set sender to sjg@FreeBSD.org using -f From: "Simon J. Gerraty" Date: Sat, 11 Jul 2020 22:45:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r363116 - vendor/NetBSD/bmake/20200710 X-SVN-Group: vendor X-SVN-Commit-Author: sjg X-SVN-Commit-Paths: vendor/NetBSD/bmake/20200710 X-SVN-Commit-Revision: 363116 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2020 22:45:37 -0000 Author: sjg Date: Sat Jul 11 22:45:36 2020 New Revision: 363116 URL: https://svnweb.freebsd.org/changeset/base/363116 Log: tag bmake-20200710 Added: vendor/NetBSD/bmake/20200710/ - copied from r363115, vendor/NetBSD/bmake/dist/