From owner-svn-src-projects@freebsd.org Sat Nov 19 13:32:02 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8ECBAC4AE84 for ; Sat, 19 Nov 2016 13:32:02 +0000 (UTC) (envelope-from ae@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 mx1.freebsd.org (Postfix) with ESMTPS id 5BEE513E0; Sat, 19 Nov 2016 13:32:02 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id uAJDW1lB075845; Sat, 19 Nov 2016 13:32:01 GMT (envelope-from ae@FreeBSD.org) Received: (from ae@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uAJDW1up075844; Sat, 19 Nov 2016 13:32:01 GMT (envelope-from ae@FreeBSD.org) Message-Id: <201611191332.uAJDW1up075844@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ae set sender to ae@FreeBSD.org using -f From: "Andrey V. Elsukov" Date: Sat, 19 Nov 2016 13:32:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r308829 - projects/ipsec X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Nov 2016 13:32:02 -0000 Author: ae Date: Sat Nov 19 13:32:01 2016 New Revision: 308829 URL: https://svnweb.freebsd.org/changeset/base/308829 Log: Create projects/ipsec. The main goals are: * rework locking to make IPsec code more friendly for concurrent processing; * make lookups in SADB/SPDB faster; * revise PFKEY implementation, remove stale code, make it closer to RFC; * implement IPsec VTI (virtual tunneling interface); * make IPsec code loadable as kernel module. Part of these tasks already done, but merging code in one commit is hard to review and document. So, I will try to split it in many patches. Also, this probably will lead to new changes/improvements that I will rethink in process. Added: projects/ipsec/ - copied from r308827, head/ From owner-svn-src-projects@freebsd.org Sat Nov 19 14:40:20 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 512B1C4A29D for ; Sat, 19 Nov 2016 14:40:20 +0000 (UTC) (envelope-from ae@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 mx1.freebsd.org (Postfix) with ESMTPS id 10CCD19A0; Sat, 19 Nov 2016 14:40:19 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id uAJEeJxB001905; Sat, 19 Nov 2016 14:40:19 GMT (envelope-from ae@FreeBSD.org) Received: (from ae@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uAJEeJdi001903; Sat, 19 Nov 2016 14:40:19 GMT (envelope-from ae@FreeBSD.org) Message-Id: <201611191440.uAJEeJdi001903@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ae set sender to ae@FreeBSD.org using -f From: "Andrey V. Elsukov" Date: Sat, 19 Nov 2016 14:40:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r308831 - projects/ipsec/sys/netipsec X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Nov 2016 14:40:20 -0000 Author: ae Date: Sat Nov 19 14:40:18 2016 New Revision: 308831 URL: https://svnweb.freebsd.org/changeset/base/308831 Log: Change some IPsec structures. Change the fields order of struct secpolicyindex to match layout of struct secasindex. Remove unused fields. Change struct ipsecrequest. Remove most of fields and rwlock, keep only secasindex selector and required level of IPsec transform. Selector has src/dst addresses, security protocol (ESP/AH), IPsec mode (transport/tunnel) and request id. This will help to go away from nontrivial locking with IPSECREQUEST_LOCK(). Change struct secpolicy to keep ipsecrequests in the limited size array of pointers and add tcount (transforms count) field to specify number of transforms in the array. Limit maximum number of transforms with IPSEC_MAXREQ macro (it is 4 for now). Previously it was possible to specify unlimited number of IPsec transforms that should be handled in a sequence (this also called "SA bundle"). Actually such ability was not implemented in IPv6 code. Also modern IPsec RFC 4301 doesn't requires this support (p4.3). From a practical point of view support too many ipsec request in a chain also useless. The main idea is that ipsecrequest just defines transforms that we should do to conform to given security policy. Now we will not save used by policy SA for each packet in the policy's ipsecrequest. Instead we always will do new SA lookup and use the result as is. Holding the IPSECREQUEST_LOCK probably had another purpose. TCP code has used stored in ipsecrequest SA to determine the size consumed by IPsec headers. We will use hdrsz field in struct inpcbpolicy for this purpose. Add two new LIST_ENTRY to struct secpolicy. idhash will be used for fast SP lookup by id. drainq will be used by expiring code. Introduce several new SP states: * IPSEC_SPSTATE_LARVAL will be used by SP added by SADB_X_SPDSETIDX message. * IPSEC_SPSTATE_PCB will be used by SP added by setsockopt() call. * IPSEC_SPSTATE_IFNET will be used by SP added by IPsec virtual tunneling interface. Change struct inpcbpolicy. Now sp_in/sp_out fields can be used by kernel to cache security policies used by packets that have inpcb. In case when application set own security policy or configured IPsec bypass, flags field will have correspondig value. genid field will be used to check that SP pointer isn't expired. hdrsz field will be used by TCP code to determine size of headers consumed by IPsec. Modified: projects/ipsec/sys/netipsec/ipsec.h projects/ipsec/sys/netipsec/keydb.h Modified: projects/ipsec/sys/netipsec/ipsec.h ============================================================================== --- projects/ipsec/sys/netipsec/ipsec.h Sat Nov 19 13:57:21 2016 (r308830) +++ projects/ipsec/sys/netipsec/ipsec.h Sat Nov 19 14:40:18 2016 (r308831) @@ -65,35 +65,41 @@ * specifies ICMPv6 type, and the port field in "dst" specifies ICMPv6 code. */ struct secpolicyindex { - u_int8_t dir; /* direction of packet flow, see below */ union sockaddr_union src; /* IP src address for SP */ union sockaddr_union dst; /* IP dst address for SP */ - u_int8_t prefs; /* prefix length in bits for src */ - u_int8_t prefd; /* prefix length in bits for dst */ - u_int16_t ul_proto; /* upper layer Protocol */ -#ifdef notyet - uid_t uids; - uid_t uidd; - gid_t gids; - gid_t gidd; -#endif + uint8_t ul_proto; /* upper layer Protocol */ + uint8_t dir; /* direction of packet flow */ + uint8_t prefs; /* prefix length in bits for src */ + uint8_t prefd; /* prefix length in bits for dst */ +}; + +/* Request for IPsec */ +struct ipsecrequest { + struct secasindex saidx;/* hint for search proper SA */ + /* if __ss_len == 0 then no address specified.*/ + u_int level; /* IPsec level defined below. */ }; /* Security Policy Data Base */ struct secpolicy { TAILQ_ENTRY(secpolicy) chain; + LIST_ENTRY(secpolicy) idhash; + LIST_ENTRY(secpolicy) drainq; struct secpolicyindex spidx; /* selector */ - struct ipsecrequest *req; - /* pointer to the ipsec request tree, */ - /* if policy == IPSEC else this value == NULL.*/ - u_int refcnt; /* reference count */ +#define IPSEC_MAXREQ 4 + struct ipsecrequest *req[IPSEC_MAXREQ]; + u_int tcount; /* IPsec transforms count */ + volatile u_int refcnt; /* reference count */ u_int policy; /* policy_type per pfkeyv2.h */ u_int state; #define IPSEC_SPSTATE_DEAD 0 -#define IPSEC_SPSTATE_ALIVE 1 - u_int32_t priority; /* priority of this policy */ - u_int32_t id; /* It's unique number on the system. */ +#define IPSEC_SPSTATE_LARVAL 1 +#define IPSEC_SPSTATE_ALIVE 2 +#define IPSEC_SPSTATE_PCB 3 +#define IPSEC_SPSTATE_IFNET 4 + uint32_t priority; /* priority of this policy */ + uint32_t id; /* It's unique number on the system. */ /* * lifetime handler. * the policy can be used without limitiation if both lifetime and @@ -107,41 +113,25 @@ struct secpolicy { long validtime; /* duration this policy is valid without use */ }; -/* Request for IPsec */ -struct ipsecrequest { - struct ipsecrequest *next; - /* pointer to next structure */ - /* If NULL, it means the end of chain. */ - struct secasindex saidx;/* hint for search proper SA */ - /* if __ss_len == 0 then no address specified.*/ - u_int level; /* IPsec level defined below. */ - - struct secasvar *sav; /* place holder of SA for use */ - struct secpolicy *sp; /* back pointer to SP */ - struct rwlock lock; /* to interlock updates */ -}; - /* - * Need recursion for when crypto callbacks happen directly, - * as in the case of software crypto. Need to look at how - * hard it is to remove this... + * PCB security policies. + * Application can setup private security policies for socket. + * Such policies can have IPSEC, BYPASS and ENTRUST type. + * By default policies set to NULL, this mean that they have ENTRUST type. + * When application sets BYPASS or IPSEC type policy, flags field + * also updated. In case when flags is not set, the system could store + * used security policy into the sp_in/sp_out pointer to speedup further + * lookups. */ -#define IPSECREQUEST_LOCK_INIT(_isr) \ - rw_init_flags(&(_isr)->lock, "ipsec request", RW_RECURSE) -#define IPSECREQUEST_LOCK(_isr) rw_rlock(&(_isr)->lock) -#define IPSECREQUEST_UNLOCK(_isr) rw_runlock(&(_isr)->lock) -#define IPSECREQUEST_WLOCK(_isr) rw_wlock(&(_isr)->lock) -#define IPSECREQUEST_WUNLOCK(_isr) rw_wunlock(&(_isr)->lock) -#define IPSECREQUEST_UPGRADE(_isr) rw_try_upgrade(&(_isr)->lock) -#define IPSECREQUEST_DOWNGRADE(_isr) rw_downgrade(&(_isr)->lock) -#define IPSECREQUEST_LOCK_DESTROY(_isr) rw_destroy(&(_isr)->lock) -#define IPSECREQUEST_LOCK_ASSERT(_isr) rw_assert(&(_isr)->lock, RA_LOCKED) - -/* security policy in PCB */ struct inpcbpolicy { - struct secpolicy *sp_in; - struct secpolicy *sp_out; - int priv; /* privileged socket ? */ + struct secpolicy *sp_in; + struct secpolicy *sp_out; + + uint32_t genid; + uint16_t flags; +#define INP_INBOUND_POLICY 0x0001 +#define INP_OUTBOUND_POLICY 0x0002 + uint16_t hdrsz; }; /* SP acquiring list table. */ Modified: projects/ipsec/sys/netipsec/keydb.h ============================================================================== --- projects/ipsec/sys/netipsec/keydb.h Sat Nov 19 13:57:21 2016 (r308830) +++ projects/ipsec/sys/netipsec/keydb.h Sat Nov 19 14:40:18 2016 (r308831) @@ -54,9 +54,9 @@ union sockaddr_union { struct secasindex { union sockaddr_union src; /* source address for SA */ union sockaddr_union dst; /* destination address for SA */ - u_int16_t proto; /* IPPROTO_ESP or IPPROTO_AH */ - u_int8_t mode; /* mode of protocol, see ipsec.h */ - u_int32_t reqid; /* reqid id who owned this SA */ + uint8_t proto; /* IPPROTO_ESP or IPPROTO_AH */ + uint8_t mode; /* mode of protocol, see ipsec.h */ + uint32_t reqid; /* reqid id who owned this SA */ /* see IPSEC_MANUAL_REQID_MAX. */ }; From owner-svn-src-projects@freebsd.org Sat Nov 19 15:37:14 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3E148C4A692 for ; Sat, 19 Nov 2016 15:37:14 +0000 (UTC) (envelope-from ae@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 mx1.freebsd.org (Postfix) with ESMTPS id 119B7276; Sat, 19 Nov 2016 15:37:13 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id uAJFbDGl026651; Sat, 19 Nov 2016 15:37:13 GMT (envelope-from ae@FreeBSD.org) Received: (from ae@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uAJFbDLI026649; Sat, 19 Nov 2016 15:37:13 GMT (envelope-from ae@FreeBSD.org) Message-Id: <201611191537.uAJFbDLI026649@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ae set sender to ae@FreeBSD.org using -f From: "Andrey V. Elsukov" Date: Sat, 19 Nov 2016 15:37:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r308838 - projects/ipsec/sys/netipsec X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Nov 2016 15:37:14 -0000 Author: ae Date: Sat Nov 19 15:37:12 2016 New Revision: 308838 URL: https://svnweb.freebsd.org/changeset/base/308838 Log: Change some IPsec structures. Change struct secashead. Replace chain LIST with TAILQ and add two new LIST entries. addrhash will be used for lookup in hash by secasindex. drainq will be used by flush callout. Remove savtree field. Instead two TAILQ will be used. One to keep LARVAL SAs, another to keep alive (MATURE and DYING) SAs. Also add refcnt field. Change struct secasvar. Use TAILQ instead of LIST to keep SAs in a chain. Add spihash field for lookups by SPI. drainq field will be used by flush callout. Replace CURRENT lifetime expiring counters with PCPU counters to avoid locking for updates. Add two hash entries to struct secacq. Get rid of tdb_ident and tdb_crypto structures. Instead add two new structures xform_history and xform_data. struct xform_history will be used to store in the mbuf tag information about used SA. It contains all needed info to check that INBOUND security policy was fully applied to decrypted packet. In case of SA bundle, resulting mbuf will have several mbuf tags with such structures. struct xform_data will be used by crypto callbacks to store and obtain needed information before and after crypto processing. Change prototype of xform output callback. Now it will take as arguments referenced security policy, referenced security association and current transform's index. Modified: projects/ipsec/sys/netipsec/keydb.h projects/ipsec/sys/netipsec/xform.h Modified: projects/ipsec/sys/netipsec/keydb.h ============================================================================== --- projects/ipsec/sys/netipsec/keydb.h Sat Nov 19 15:35:40 2016 (r308837) +++ projects/ipsec/sys/netipsec/keydb.h Sat Nov 19 15:37:12 2016 (r308838) @@ -34,7 +34,7 @@ #define _NETIPSEC_KEYDB_H_ #ifdef _KERNEL - +#include #include #ifndef _SOCKADDR_UNION_DEFINED @@ -86,8 +86,11 @@ struct seclifetime { }; /* Security Association Data Base */ +TAILQ_HEAD(secasvar_queue, secasvar); struct secashead { - LIST_ENTRY(secashead) chain; + TAILQ_ENTRY(secashead) chain; + LIST_ENTRY(secashead) addrhash; /* hash by sproto+src+dst addresses */ + LIST_ENTRY(secashead) drainq; /* used ONLY by flush callout */ struct secasindex saidx; @@ -95,10 +98,10 @@ struct secashead { struct secident *identd; /* destination identity */ /* XXX I don't know how to use them. */ - u_int8_t state; /* MATURE or DEAD. */ - LIST_HEAD(_satree, secasvar) savtree[SADB_SASTATE_MAX+1]; - /* SA chain */ - /* The first of this list is newer SA */ + volatile u_int refcnt; /* reference count */ + uint8_t state; /* MATURE or DEAD. */ + struct secasvar_queue savtree_alive; /* MATURE and DYING SA */ + struct secasvar_queue savtree_larval; /* LARVAL SA */ }; struct xformsw; @@ -106,39 +109,53 @@ struct enc_xform; struct auth_hash; struct comp_algo; -/* Security Association */ +/* + * Security Association + * + * For INBOUND packets we do SA lookup using SPI, thus only SPIHASH is used. + * For OUTBOUND packets there may be several SA suitable for packet. + * We use key_preferred_oldsa variable to choose better SA. First of we do + * lookup for suitable SAH using packet's saidx. Then we use SAH's savtree + * to search better candidate. The newer SA (by created time) are placed + * in the beginning of the savtree list. There is no preference between + * DYING and MATURE. + */ struct secasvar { - LIST_ENTRY(secasvar) chain; - struct mtx lock; /* update/access lock */ + TAILQ_ENTRY(secasvar) chain; + LIST_ENTRY(secasvar) spihash; + LIST_ENTRY(secasvar) drainq; /* used ONLY by flush callout */ + + uint32_t spi; /* SPI Value, network byte order */ + uint32_t flags; /* holder for SADB_KEY_FLAGS */ - u_int refcnt; /* reference count */ - u_int8_t state; /* Status of this Association */ + uint32_t seq; /* sequence number */ + pid_t pid; /* message's pid */ + + uint8_t state; /* Status of this SA (pfkeyv2.h) */ + uint8_t alg_auth; /* Authentication Algorithm Identifier*/ + uint8_t alg_enc; /* Cipher Algorithm Identifier */ + uint8_t alg_comp; /* Compression Algorithm Identifier */ - u_int8_t alg_auth; /* Authentication Algorithm Identifier*/ - u_int8_t alg_enc; /* Cipher Algorithm Identifier */ - u_int8_t alg_comp; /* Compression Algorithm Identifier */ - u_int32_t spi; /* SPI Value, network byte order */ - u_int32_t flags; /* holder for SADB_KEY_FLAGS */ + uint16_t natt_type; /* IKE/ESP-marker in output. */ + uint16_t natt_esp_frag_len; /* MTU for payload fragmentation. */ + struct secashead *sah; /* back pointer to the secashead */ struct seckey *key_auth; /* Key for Authentication */ struct seckey *key_enc; /* Key for Encryption */ - u_int ivlen; /* length of IV */ - void *sched; /* intermediate encryption key */ - size_t schedlen; + struct secreplay *replay; /* replay prevention */ uint64_t cntr; /* counter for GCM and CTR */ + u_int ivlen; /* length of IV */ - struct secreplay *replay; /* replay prevention */ - time_t created; /* for lifetime */ + volatile u_int refcnt; /* reference count */ - struct seclifetime *lft_c; /* CURRENT lifetime, it's constant. */ + uint64_t created; /* time when SA was created */ + uint64_t firstused; /* time when SA was first used */ + counter_u64_t lft_c; /* CURRENT lifetime */ +#define lft_c_allocations lft_c +#define lft_c_bytes lft_c + 1 struct seclifetime *lft_h; /* HARD lifetime */ struct seclifetime *lft_s; /* SOFT lifetime */ - u_int32_t seq; /* sequence number */ - pid_t pid; /* message's pid */ - - struct secashead *sah; /* back pointer to the secashead */ - /* * NB: Fields with a tdb_ prefix are part of the "glue" used * to interface to the OpenBSD crypto support. This was done @@ -148,13 +165,9 @@ struct secasvar { struct enc_xform *tdb_encalgxform; /* encoding algorithm */ struct auth_hash *tdb_authalgxform; /* authentication algorithm */ struct comp_algo *tdb_compalgxform; /* compression algorithm */ - u_int64_t tdb_cryptoid; /* crypto session id */ + uint64_t tdb_cryptoid; /* crypto session id */ - /* - * NAT-Traversal. - */ - u_int16_t natt_type; /* IKE/ESP-marker in output. */ - u_int16_t natt_esp_frag_len; /* MTU for payload fragmentation. */ + struct mtx lock; /* update/access lock */ }; #define SECASVAR_LOCK_INIT(_sav) \ @@ -190,10 +203,11 @@ struct secreg { /* acquiring list table. */ struct secacq { LIST_ENTRY(secacq) chain; + LIST_ENTRY(secacq) addrhash; + LIST_ENTRY(secacq) seqhash; struct secasindex saidx; - - u_int32_t seq; /* sequence number */ + uint32_t seq; /* sequence number */ time_t created; /* for lifetime */ int count; /* for lifetime */ }; Modified: projects/ipsec/sys/netipsec/xform.h ============================================================================== --- projects/ipsec/sys/netipsec/xform.h Sat Nov 19 15:35:40 2016 (r308837) +++ projects/ipsec/sys/netipsec/xform.h Sat Nov 19 15:37:12 2016 (r308838) @@ -49,38 +49,33 @@ #define AH_HMAC_MAXHASHLEN (SHA2_512_HASH_LEN/2) /* Keep this updated */ #define AH_HMAC_INITIAL_RPL 1 /* replay counter initial value */ +struct secpolicy; +struct secasvar; + /* * Packet tag assigned on completion of IPsec processing; used - * to speedup processing when/if the packet comes back for more - * processing. + * to speedup security policy checking for INBOUND packets. */ -struct tdb_ident { - u_int32_t spi; - union sockaddr_union dst; - u_int8_t proto; - /* Cache those two for enc(4) in xform_ipip. */ - u_int8_t alg_auth; - u_int8_t alg_enc; +struct xform_history { + union sockaddr_union dst; /* destination address */ + uint32_t spi; /* Security Parameters Index */ + uint8_t proto; /* IPPROTO_ESP or IPPROTO_AH */ + uint8_t mode; /* transport or tunnel */ }; /* * Opaque data structure hung off a crypto operation descriptor. */ -struct tdb_crypto { - struct ipsecrequest *tc_isr; /* ipsec request state */ - u_int32_t tc_spi; /* associated SPI */ - union sockaddr_union tc_dst; /* dst addr of packet */ - u_int8_t tc_proto; /* current protocol, e.g. AH */ - u_int8_t tc_nxt; /* next protocol, e.g. IPV4 */ - int tc_protoff; /* current protocol offset */ - int tc_skip; /* data offset */ - caddr_t tc_ptr; /* associated crypto data */ - struct secasvar *tc_sav; /* related SA */ +struct xform_data { + struct secpolicy *sp; /* security policy */ + struct secasvar *sav; /* related SA */ + uint64_t cryptoid; /* used crypto session id */ + u_int idx; /* IPsec request index */ + int protoff; /* current protocol offset */ + int skip; /* data offset */ + uint8_t nxt; /* next protocol, e.g. IPV4 */ }; -struct secasvar; -struct ipescrequest; - struct xformsw { u_short xf_type; /* xform ID */ #define XF_IP4 1 /* unused */ @@ -97,8 +92,8 @@ struct xformsw { int (*xf_zeroize)(struct secasvar*); /* cleanup */ int (*xf_input)(struct mbuf*, struct secasvar*, /* input */ int, int); - int (*xf_output)(struct mbuf*, /* output */ - struct ipsecrequest *, struct mbuf **, int, int); + int (*xf_output)(struct mbuf*, /* output */ + struct secpolicy *, struct secasvar *, u_int, int, int); struct xformsw *xf_next; /* list of registered xforms */ }; From owner-svn-src-projects@freebsd.org Sat Nov 19 16:05:58 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D4278C4A319 for ; Sat, 19 Nov 2016 16:05:58 +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 mx1.freebsd.org (Postfix) with ESMTPS id 5AA97188D; Sat, 19 Nov 2016 16:05:58 +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 uAJG5viZ038940; Sat, 19 Nov 2016 16:05:57 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uAJG5toU038923; Sat, 19 Nov 2016 16:05:55 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201611191605.uAJG5toU038923@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sat, 19 Nov 2016 16:05:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r308842 - in projects/clang390-import: . bin/dd bin/echo bin/sleep cddl/contrib/opensolaris/cmd/ztest cddl/contrib/opensolaris/lib/libdtrace/common cddl/lib/libdtrace contrib/amd contri... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Nov 2016 16:05:58 -0000 Author: dim Date: Sat Nov 19 16:05:55 2016 New Revision: 308842 URL: https://svnweb.freebsd.org/changeset/base/308842 Log: Merge ^/head r308491 through r308841. Added: projects/clang390-import/contrib/amd/amd/info_sun.c - copied unchanged from r308841, head/contrib/amd/amd/info_sun.c projects/clang390-import/contrib/amd/amd/ops_ext.c - copied unchanged from r308841, head/contrib/amd/amd/ops_ext.c projects/clang390-import/contrib/amd/amd/ops_lustre.c - copied unchanged from r308841, head/contrib/amd/amd/ops_lustre.c projects/clang390-import/contrib/amd/amd/ops_nfs4.c - copied unchanged from r308841, head/contrib/amd/amd/ops_nfs4.c projects/clang390-import/contrib/amd/amd/ops_udf.c - copied unchanged from r308841, head/contrib/amd/amd/ops_udf.c projects/clang390-import/contrib/amd/amd/sun2amd.8 - copied unchanged from r308841, head/contrib/amd/amd/sun2amd.8 projects/clang390-import/contrib/amd/amd/sun2amd.c - copied unchanged from r308841, head/contrib/amd/amd/sun2amd.c projects/clang390-import/contrib/amd/amd/sun_map.c - copied unchanged from r308841, head/contrib/amd/amd/sun_map.c projects/clang390-import/contrib/amd/amd/sun_map.h - copied unchanged from r308841, head/contrib/amd/amd/sun_map.h projects/clang390-import/contrib/amd/amd/sun_map_parse.y - copied unchanged from r308841, head/contrib/amd/amd/sun_map_parse.y projects/clang390-import/contrib/amd/amd/sun_map_tok.l - copied unchanged from r308841, head/contrib/amd/amd/sun_map_tok.l projects/clang390-import/contrib/amd/amd/test1.sh - copied unchanged from r308841, head/contrib/amd/amd/test1.sh projects/clang390-import/contrib/amd/fsinfo/null_gram.c - copied unchanged from r308841, head/contrib/amd/fsinfo/null_gram.c projects/clang390-import/contrib/amd/fsinfo/null_gram.h - copied unchanged from r308841, head/contrib/amd/fsinfo/null_gram.h projects/clang390-import/contrib/amd/fsinfo/null_gram.y - copied unchanged from r308841, head/contrib/amd/fsinfo/null_gram.y projects/clang390-import/contrib/amd/fsinfo/null_lex.c - copied unchanged from r308841, head/contrib/amd/fsinfo/null_lex.c projects/clang390-import/contrib/amd/fsinfo/null_lex.l - copied unchanged from r308841, head/contrib/amd/fsinfo/null_lex.l projects/clang390-import/contrib/amd/include/nfs_common.h - copied unchanged from r308841, head/contrib/amd/include/nfs_common.h projects/clang390-import/contrib/hyperv/tools/hv_vss_daemon.8 - copied unchanged from r308841, head/contrib/hyperv/tools/hv_vss_daemon.8 projects/clang390-import/contrib/hyperv/tools/hv_vss_daemon.c - copied unchanged from r308841, head/contrib/hyperv/tools/hv_vss_daemon.c projects/clang390-import/lib/libc/riscv/softfloat/ - copied from r308841, head/lib/libc/riscv/softfloat/ projects/clang390-import/lib/libcapsicum/Makefile.depend - copied unchanged from r308841, head/lib/libcapsicum/Makefile.depend projects/clang390-import/lib/libefivar/Makefile.depend - copied unchanged from r308841, head/lib/libefivar/Makefile.depend projects/clang390-import/lib/msun/riscv/Symbol.map - copied unchanged from r308841, head/lib/msun/riscv/Symbol.map projects/clang390-import/sbin/zfsbootcfg/Makefile.depend - copied unchanged from r308841, head/sbin/zfsbootcfg/Makefile.depend projects/clang390-import/share/man/man4/bnxt.4 - copied unchanged from r308841, head/share/man/man4/bnxt.4 projects/clang390-import/share/man/man4/hv_vss.4 - copied unchanged from r308841, head/share/man/man4/hv_vss.4 projects/clang390-import/sys/arm/ti/omap4/omap4_mp.h - copied unchanged from r308841, head/sys/arm/ti/omap4/omap4_mp.h projects/clang390-import/sys/arm/ti/omap4/pandaboard/pandaboard.h - copied unchanged from r308841, head/sys/arm/ti/omap4/pandaboard/pandaboard.h projects/clang390-import/sys/dev/bnxt/ - copied from r308841, head/sys/dev/bnxt/ projects/clang390-import/sys/dev/dme/ - copied from r308841, head/sys/dev/dme/ projects/clang390-import/sys/dev/etherswitch/e6000sw/e6060sw.c - copied unchanged from r308841, head/sys/dev/etherswitch/e6000sw/e6060sw.c projects/clang390-import/sys/dev/etherswitch/infineon/ - copied from r308841, head/sys/dev/etherswitch/infineon/ projects/clang390-import/sys/dev/gpio/gpiopower.c - copied unchanged from r308841, head/sys/dev/gpio/gpiopower.c projects/clang390-import/sys/dev/hyperv/pcib/ - copied from r308841, head/sys/dev/hyperv/pcib/ projects/clang390-import/sys/dev/hyperv/utilities/hv_snapshot.c - copied unchanged from r308841, head/sys/dev/hyperv/utilities/hv_snapshot.c projects/clang390-import/sys/dev/hyperv/utilities/hv_snapshot.h - copied unchanged from r308841, head/sys/dev/hyperv/utilities/hv_snapshot.h projects/clang390-import/sys/gnu/dts/include/dt-bindings/dma/jz4780-dma.h - copied unchanged from r308841, head/sys/gnu/dts/include/dt-bindings/dma/jz4780-dma.h projects/clang390-import/sys/gnu/dts/include/dt-bindings/net/rfkill-regulator.h - copied unchanged from r308841, head/sys/gnu/dts/include/dt-bindings/net/rfkill-regulator.h projects/clang390-import/sys/gnu/dts/mips/ingenic/ - copied from r308841, head/sys/gnu/dts/mips/ingenic/ projects/clang390-import/sys/modules/bnxt/ - copied from r308841, head/sys/modules/bnxt/ projects/clang390-import/sys/modules/hyperv/pcib/ - copied from r308841, head/sys/modules/hyperv/pcib/ projects/clang390-import/sys/riscv/include/fpe.h - copied unchanged from r308841, head/sys/riscv/include/fpe.h projects/clang390-import/tools/sched/make_ktr.sh - copied unchanged from r308841, head/tools/sched/make_ktr.sh projects/clang390-import/tools/sched/schedgraph.d - copied unchanged from r308841, head/tools/sched/schedgraph.d projects/clang390-import/tools/tools/nanobsd/legacy.sh - copied unchanged from r308841, head/tools/tools/nanobsd/legacy.sh projects/clang390-import/usr.sbin/efivar/Makefile.depend - copied unchanged from r308841, head/usr.sbin/efivar/Makefile.depend projects/clang390-import/usr.sbin/hyperv/tools/Makefile.inc - copied unchanged from r308841, head/usr.sbin/hyperv/tools/Makefile.inc projects/clang390-import/usr.sbin/hyperv/tools/kvp/ - copied from r308841, head/usr.sbin/hyperv/tools/kvp/ projects/clang390-import/usr.sbin/hyperv/tools/vss/ - copied from r308841, head/usr.sbin/hyperv/tools/vss/ Deleted: projects/clang390-import/share/man/man4/hv_ata_pci_disengage.4 projects/clang390-import/sys/arm/rockchip/rk30xx_common.c projects/clang390-import/sys/arm/ti/omap4/pandaboard/files.pandaboard projects/clang390-import/sys/arm/ti/omap4/pandaboard/std.pandaboard projects/clang390-import/sys/dev/dpaa/dpaa.c projects/clang390-import/usr.sbin/hyperv/tools/Makefile projects/clang390-import/usr.sbin/hyperv/tools/Makefile.depend Modified: projects/clang390-import/Makefile projects/clang390-import/Makefile.inc1 projects/clang390-import/UPDATING projects/clang390-import/bin/dd/dd.c projects/clang390-import/bin/echo/Makefile.depend projects/clang390-import/bin/sleep/Makefile.depend projects/clang390-import/cddl/contrib/opensolaris/cmd/ztest/ztest.c projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cc.c projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cg.c projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_errtags.h projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_impl.h projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c projects/clang390-import/cddl/lib/libdtrace/Makefile projects/clang390-import/contrib/amd/AUTHORS projects/clang390-import/contrib/amd/BUGS projects/clang390-import/contrib/amd/COPYING projects/clang390-import/contrib/amd/ChangeLog projects/clang390-import/contrib/amd/FAQ projects/clang390-import/contrib/amd/INSTALL projects/clang390-import/contrib/amd/MIRRORS.html projects/clang390-import/contrib/amd/MIRRORS.txt projects/clang390-import/contrib/amd/NEWS projects/clang390-import/contrib/amd/README projects/clang390-import/contrib/amd/README.attrcache projects/clang390-import/contrib/amd/README.ldap projects/clang390-import/contrib/amd/README.y2k projects/clang390-import/contrib/amd/amd/am_ops.c projects/clang390-import/contrib/amd/amd/amd.8 projects/clang390-import/contrib/amd/amd/amd.c projects/clang390-import/contrib/amd/amd/amd.h projects/clang390-import/contrib/amd/amd/amfs_auto.c projects/clang390-import/contrib/amd/amd/amfs_direct.c projects/clang390-import/contrib/amd/amd/amfs_error.c projects/clang390-import/contrib/amd/amd/amfs_generic.c projects/clang390-import/contrib/amd/amd/amfs_host.c projects/clang390-import/contrib/amd/amd/amfs_link.c projects/clang390-import/contrib/amd/amd/amfs_linkx.c projects/clang390-import/contrib/amd/amd/amfs_nfsl.c projects/clang390-import/contrib/amd/amd/amfs_nfsx.c projects/clang390-import/contrib/amd/amd/amfs_program.c projects/clang390-import/contrib/amd/amd/amfs_root.c projects/clang390-import/contrib/amd/amd/amfs_toplvl.c projects/clang390-import/contrib/amd/amd/amfs_union.c projects/clang390-import/contrib/amd/amd/amq_subr.c projects/clang390-import/contrib/amd/amd/amq_svc.c projects/clang390-import/contrib/amd/amd/autil.c projects/clang390-import/contrib/amd/amd/clock.c projects/clang390-import/contrib/amd/amd/conf.c projects/clang390-import/contrib/amd/amd/conf_parse.y projects/clang390-import/contrib/amd/amd/conf_tok.l projects/clang390-import/contrib/amd/amd/get_args.c projects/clang390-import/contrib/amd/amd/info_exec.c projects/clang390-import/contrib/amd/amd/info_file.c projects/clang390-import/contrib/amd/amd/info_hesiod.c projects/clang390-import/contrib/amd/amd/info_ldap.c projects/clang390-import/contrib/amd/amd/info_ndbm.c projects/clang390-import/contrib/amd/amd/info_nis.c projects/clang390-import/contrib/amd/amd/info_nisplus.c projects/clang390-import/contrib/amd/amd/info_passwd.c projects/clang390-import/contrib/amd/amd/info_union.c projects/clang390-import/contrib/amd/amd/map.c projects/clang390-import/contrib/amd/amd/mapc.c projects/clang390-import/contrib/amd/amd/mntfs.c projects/clang390-import/contrib/amd/amd/nfs_prot_svc.c projects/clang390-import/contrib/amd/amd/nfs_start.c projects/clang390-import/contrib/amd/amd/nfs_subr.c projects/clang390-import/contrib/amd/amd/ops_TEMPLATE.c projects/clang390-import/contrib/amd/amd/ops_cachefs.c projects/clang390-import/contrib/amd/amd/ops_cdfs.c projects/clang390-import/contrib/amd/amd/ops_efs.c projects/clang390-import/contrib/amd/amd/ops_lofs.c projects/clang390-import/contrib/amd/amd/ops_mfs.c projects/clang390-import/contrib/amd/amd/ops_nfs.c projects/clang390-import/contrib/amd/amd/ops_nfs3.c projects/clang390-import/contrib/amd/amd/ops_nullfs.c projects/clang390-import/contrib/amd/amd/ops_pcfs.c projects/clang390-import/contrib/amd/amd/ops_tfs.c projects/clang390-import/contrib/amd/amd/ops_tmpfs.c projects/clang390-import/contrib/amd/amd/ops_ufs.c projects/clang390-import/contrib/amd/amd/ops_umapfs.c projects/clang390-import/contrib/amd/amd/ops_unionfs.c projects/clang390-import/contrib/amd/amd/ops_xfs.c projects/clang390-import/contrib/amd/amd/opts.c projects/clang390-import/contrib/amd/amd/readdir.c projects/clang390-import/contrib/amd/amd/restart.c projects/clang390-import/contrib/amd/amd/rpc_fwd.c projects/clang390-import/contrib/amd/amd/sched.c projects/clang390-import/contrib/amd/amd/srvr_amfs_auto.c projects/clang390-import/contrib/amd/amd/srvr_nfs.c projects/clang390-import/contrib/amd/amq/amq.8 projects/clang390-import/contrib/amd/amq/amq.c projects/clang390-import/contrib/amd/amq/amq.h projects/clang390-import/contrib/amd/amq/amq_clnt.c projects/clang390-import/contrib/amd/amq/amq_xdr.c projects/clang390-import/contrib/amd/amq/pawd.1 projects/clang390-import/contrib/amd/amq/pawd.c projects/clang390-import/contrib/amd/bootstrap projects/clang390-import/contrib/amd/conf/checkmount/checkmount_bsd44.c projects/clang390-import/contrib/amd/conf/mtab/mtab_bsd.c projects/clang390-import/contrib/amd/conf/nfs_prot/nfs_prot_freebsd2.h projects/clang390-import/contrib/amd/conf/nfs_prot/nfs_prot_freebsd3.h projects/clang390-import/contrib/amd/conf/transp/transp_sockets.c projects/clang390-import/contrib/amd/conf/umount/umount_bsd44.c projects/clang390-import/contrib/amd/doc/am-utils.texi projects/clang390-import/contrib/amd/doc/stamp-vti projects/clang390-import/contrib/amd/doc/texinfo.tex projects/clang390-import/contrib/amd/doc/version.texi projects/clang390-import/contrib/amd/fixmount/fixmount.8 projects/clang390-import/contrib/amd/fixmount/fixmount.c projects/clang390-import/contrib/amd/fsinfo/fsi_analyze.c projects/clang390-import/contrib/amd/fsinfo/fsi_data.h projects/clang390-import/contrib/amd/fsinfo/fsi_dict.c projects/clang390-import/contrib/amd/fsinfo/fsi_gram.y projects/clang390-import/contrib/amd/fsinfo/fsi_lex.l projects/clang390-import/contrib/amd/fsinfo/fsi_util.c projects/clang390-import/contrib/amd/fsinfo/fsinfo.8 projects/clang390-import/contrib/amd/fsinfo/fsinfo.c projects/clang390-import/contrib/amd/fsinfo/fsinfo.h projects/clang390-import/contrib/amd/fsinfo/wr_atab.c projects/clang390-import/contrib/amd/fsinfo/wr_bparam.c projects/clang390-import/contrib/amd/fsinfo/wr_dumpset.c projects/clang390-import/contrib/amd/fsinfo/wr_exportfs.c projects/clang390-import/contrib/amd/fsinfo/wr_fstab.c projects/clang390-import/contrib/amd/hlfsd/hlfsd.8 projects/clang390-import/contrib/amd/hlfsd/hlfsd.c projects/clang390-import/contrib/amd/hlfsd/hlfsd.h projects/clang390-import/contrib/amd/hlfsd/homedir.c projects/clang390-import/contrib/amd/hlfsd/nfs_prot_svc.c projects/clang390-import/contrib/amd/hlfsd/stubs.c projects/clang390-import/contrib/amd/include/am_compat.h projects/clang390-import/contrib/amd/include/am_defs.h projects/clang390-import/contrib/amd/include/am_utils.h projects/clang390-import/contrib/amd/include/am_xdr_func.h projects/clang390-import/contrib/amd/include/amq_defs.h projects/clang390-import/contrib/amd/include/mount_headers1.h projects/clang390-import/contrib/amd/include/mount_headers2.h projects/clang390-import/contrib/amd/ldap-id.ms projects/clang390-import/contrib/amd/ldap-id.txt projects/clang390-import/contrib/amd/libamu/amu.h projects/clang390-import/contrib/amd/libamu/hasmntopt.c projects/clang390-import/contrib/amd/libamu/misc_rpc.c projects/clang390-import/contrib/amd/libamu/mount_fs.c projects/clang390-import/contrib/amd/libamu/mtab.c projects/clang390-import/contrib/amd/libamu/nfs_prot_xdr.c projects/clang390-import/contrib/amd/libamu/strerror.c projects/clang390-import/contrib/amd/libamu/strutil.c projects/clang390-import/contrib/amd/libamu/wire.c projects/clang390-import/contrib/amd/libamu/xdr_func.c projects/clang390-import/contrib/amd/libamu/xutil.c projects/clang390-import/contrib/amd/mk-amd-map/mk-amd-map.8 projects/clang390-import/contrib/amd/mk-amd-map/mk-amd-map.c projects/clang390-import/contrib/amd/scripts/amd.conf-sample projects/clang390-import/contrib/amd/scripts/amd.conf.5 projects/clang390-import/contrib/amd/scripts/automount2amd.8 projects/clang390-import/contrib/amd/scripts/fixrmtab.in projects/clang390-import/contrib/amd/vers.m4 projects/clang390-import/contrib/amd/wire-test/wire-test.8 projects/clang390-import/contrib/amd/wire-test/wire-test.c projects/clang390-import/etc/devd/hyperv.conf projects/clang390-import/etc/mtree/BSD.include.dist projects/clang390-import/etc/rc.subr projects/clang390-import/gnu/usr.bin/cc/Makefile.tgt projects/clang390-import/include/Makefile projects/clang390-import/lib/csu/mips/crti.S projects/clang390-import/lib/csu/mips/crtn.S projects/clang390-import/lib/libc/Makefile projects/clang390-import/lib/libc/riscv/Makefile.inc projects/clang390-import/lib/libc/riscv/Symbol.map projects/clang390-import/lib/libc/riscv/gen/_setjmp.S projects/clang390-import/lib/libc/riscv/gen/flt_rounds.c projects/clang390-import/lib/libc/riscv/gen/setjmp.S projects/clang390-import/lib/libc/softfloat/Makefile.inc projects/clang390-import/lib/libc/sys/sendfile.2 projects/clang390-import/lib/libcompiler_rt/Makefile.inc projects/clang390-import/lib/libgcc_eh/Makefile projects/clang390-import/lib/libgcc_s/Makefile projects/clang390-import/lib/libsysdecode/Makefile projects/clang390-import/lib/libsysdecode/mktables projects/clang390-import/lib/libutil/gr_util.c projects/clang390-import/lib/libutil/pw_util.c projects/clang390-import/lib/msun/riscv/Makefile.inc projects/clang390-import/lib/msun/riscv/fenv.c projects/clang390-import/lib/msun/riscv/fenv.h projects/clang390-import/libexec/ftpd/ftpd.c projects/clang390-import/libexec/rtld-elf/Makefile projects/clang390-import/libexec/rtld-elf/aarch64/reloc.c projects/clang390-import/libexec/rtld-elf/aarch64/rtld_machdep.h projects/clang390-import/libexec/rtld-elf/amd64/reloc.c projects/clang390-import/libexec/rtld-elf/amd64/rtld_machdep.h projects/clang390-import/libexec/rtld-elf/arm/reloc.c projects/clang390-import/libexec/rtld-elf/arm/rtld_machdep.h projects/clang390-import/libexec/rtld-elf/i386/reloc.c projects/clang390-import/libexec/rtld-elf/i386/rtld_machdep.h projects/clang390-import/libexec/rtld-elf/mips/reloc.c projects/clang390-import/libexec/rtld-elf/mips/rtld_machdep.h projects/clang390-import/libexec/rtld-elf/powerpc/reloc.c projects/clang390-import/libexec/rtld-elf/powerpc/rtld_machdep.h projects/clang390-import/libexec/rtld-elf/powerpc64/reloc.c projects/clang390-import/libexec/rtld-elf/powerpc64/rtld_machdep.h projects/clang390-import/libexec/rtld-elf/riscv/reloc.c projects/clang390-import/libexec/rtld-elf/riscv/rtld_machdep.h projects/clang390-import/libexec/rtld-elf/rtld.c projects/clang390-import/libexec/rtld-elf/rtld.h projects/clang390-import/libexec/rtld-elf/sparc64/reloc.c projects/clang390-import/libexec/rtld-elf/sparc64/rtld_machdep.h projects/clang390-import/release/Makefile.vm projects/clang390-import/release/doc/en_US.ISO8859-1/hardware/article.xml projects/clang390-import/rescue/rescue/Makefile.depend projects/clang390-import/sbin/etherswitchcfg/etherswitchcfg.c projects/clang390-import/sbin/ifconfig/ifieee80211.c projects/clang390-import/sbin/ipfw/ipfw2.c projects/clang390-import/sbin/ipfw/ipfw2.h projects/clang390-import/sbin/ipfw/ipv6.c projects/clang390-import/sbin/md5/Makefile.depend projects/clang390-import/share/examples/jails/rc.conf.jails projects/clang390-import/share/examples/jails/rcjail.xxx.conf projects/clang390-import/share/man/man4/Makefile projects/clang390-import/share/man/man4/hv_vmbus.4 projects/clang390-import/share/man/man4/rtwn_pci.4 projects/clang390-import/share/man/man4/smb.4 projects/clang390-import/share/man/man4/snd_uaudio.4 projects/clang390-import/share/man/man9/usbdi.9 projects/clang390-import/share/man/man9/vm_page_alloc.9 projects/clang390-import/share/misc/committers-src.dot projects/clang390-import/share/mk/bsd.cpu.mk projects/clang390-import/share/mk/bsd.dep.mk projects/clang390-import/share/mk/bsd.init.mk projects/clang390-import/share/mk/bsd.lib.mk projects/clang390-import/share/mk/bsd.subdir.mk projects/clang390-import/share/mk/bsd.sys.mk projects/clang390-import/share/mk/local.meta.sys.mk projects/clang390-import/share/mk/src.opts.mk projects/clang390-import/share/mk/sys.mk projects/clang390-import/share/zoneinfo/Makefile projects/clang390-import/sys/amd64/amd64/trap.c projects/clang390-import/sys/arm/allwinner/a10/a10_intc.c projects/clang390-import/sys/arm/allwinner/a10_gpio.c projects/clang390-import/sys/arm/allwinner/a10_hdmi.c projects/clang390-import/sys/arm/allwinner/a10_mmc.c projects/clang390-import/sys/arm/allwinner/a10_sramc.c projects/clang390-import/sys/arm/allwinner/a20/a20_cpu_cfg.c projects/clang390-import/sys/arm/allwinner/aw_ccu.c projects/clang390-import/sys/arm/allwinner/aw_cir.c projects/clang390-import/sys/arm/allwinner/aw_machdep.c projects/clang390-import/sys/arm/allwinner/aw_nmi.c projects/clang390-import/sys/arm/allwinner/aw_thermal.c projects/clang390-import/sys/arm/allwinner/aw_ts.c projects/clang390-import/sys/arm/allwinner/aw_wdog.c projects/clang390-import/sys/arm/allwinner/clk/aw_gate.c projects/clang390-import/sys/arm/allwinner/clk/aw_mmcclk.c projects/clang390-import/sys/arm/allwinner/clk/aw_pll.c projects/clang390-import/sys/arm/allwinner/if_emac.c projects/clang390-import/sys/arm/allwinner/timer.c projects/clang390-import/sys/arm/altera/socfpga/socfpga_common.c projects/clang390-import/sys/arm/altera/socfpga/socfpga_gpio.c projects/clang390-import/sys/arm/altera/socfpga/socfpga_manager.c projects/clang390-import/sys/arm/altera/socfpga/socfpga_rstmgr.c projects/clang390-import/sys/arm/amlogic/aml8726/aml8726_ccm.c projects/clang390-import/sys/arm/amlogic/aml8726/aml8726_fb.c projects/clang390-import/sys/arm/amlogic/aml8726/aml8726_gpio.c projects/clang390-import/sys/arm/amlogic/aml8726/aml8726_i2c.c projects/clang390-import/sys/arm/amlogic/aml8726/aml8726_mmc.c projects/clang390-import/sys/arm/amlogic/aml8726/aml8726_pic.c projects/clang390-import/sys/arm/amlogic/aml8726/aml8726_pinctrl.c projects/clang390-import/sys/arm/amlogic/aml8726/aml8726_rng.c projects/clang390-import/sys/arm/amlogic/aml8726/aml8726_rtc.c projects/clang390-import/sys/arm/amlogic/aml8726/aml8726_sdxc-m8.c projects/clang390-import/sys/arm/amlogic/aml8726/aml8726_timer.c projects/clang390-import/sys/arm/amlogic/aml8726/aml8726_usb_phy-m6.c projects/clang390-import/sys/arm/amlogic/aml8726/aml8726_wdt.c projects/clang390-import/sys/arm/amlogic/aml8726/uart_dev_aml8726.c projects/clang390-import/sys/arm/annapurna/alpine/alpine_machdep.c projects/clang390-import/sys/arm/annapurna/alpine/alpine_machdep_mp.c projects/clang390-import/sys/arm/arm/generic_timer.c projects/clang390-import/sys/arm/arm/gic.c projects/clang390-import/sys/arm/arm/gic_fdt.c projects/clang390-import/sys/arm/arm/mp_machdep.c projects/clang390-import/sys/arm/arm/mpcore_timer.c projects/clang390-import/sys/arm/arm/pl190.c projects/clang390-import/sys/arm/arm/pl310.c projects/clang390-import/sys/arm/arm/pmap-v6.c projects/clang390-import/sys/arm/arm/pmu.c projects/clang390-import/sys/arm/at91/at91_aic.c projects/clang390-import/sys/arm/at91/at91_cfata.c projects/clang390-import/sys/arm/at91/at91_common.c projects/clang390-import/sys/arm/at91/at91_mci.c projects/clang390-import/sys/arm/at91/at91_ohci_fdt.c projects/clang390-import/sys/arm/at91/at91_pinctrl.c projects/clang390-import/sys/arm/at91/at91_pio.c projects/clang390-import/sys/arm/at91/at91_pit.c projects/clang390-import/sys/arm/at91/at91_pmc.c projects/clang390-import/sys/arm/at91/at91_rst.c projects/clang390-import/sys/arm/at91/at91_sdramc.c projects/clang390-import/sys/arm/at91/at91_shdwc.c projects/clang390-import/sys/arm/at91/at91_spi.c projects/clang390-import/sys/arm/at91/at91_tcb.c projects/clang390-import/sys/arm/at91/at91_twi.c projects/clang390-import/sys/arm/at91/at91_wdt.c projects/clang390-import/sys/arm/at91/if_ate.c projects/clang390-import/sys/arm/at91/if_macb.c projects/clang390-import/sys/arm/broadcom/bcm2835/bcm2835_cpufreq.c projects/clang390-import/sys/arm/broadcom/bcm2835/bcm2835_dma.c projects/clang390-import/sys/arm/broadcom/bcm2835/bcm2835_fb.c projects/clang390-import/sys/arm/broadcom/bcm2835/bcm2835_fbd.c projects/clang390-import/sys/arm/broadcom/bcm2835/bcm2835_ft5406.c projects/clang390-import/sys/arm/broadcom/bcm2835/bcm2835_intr.c projects/clang390-import/sys/arm/broadcom/bcm2835/bcm2835_machdep.c projects/clang390-import/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c projects/clang390-import/sys/arm/broadcom/bcm2835/bcm2835_spi.c projects/clang390-import/sys/arm/broadcom/bcm2835/bcm2835_systimer.c projects/clang390-import/sys/arm/broadcom/bcm2835/bcm2835_wdog.c projects/clang390-import/sys/arm/conf/GENERIC projects/clang390-import/sys/arm/conf/PANDABOARD projects/clang390-import/sys/arm/freescale/imx/imx51_ccm.c projects/clang390-import/sys/arm/freescale/imx/imx51_ipuv3.c projects/clang390-import/sys/arm/freescale/imx/imx51_ipuv3_fbd.c projects/clang390-import/sys/arm/freescale/imx/imx6_audmux.c projects/clang390-import/sys/arm/freescale/imx/imx6_ipu.c projects/clang390-import/sys/arm/freescale/imx/imx6_sdma.c projects/clang390-import/sys/arm/freescale/imx/imx6_ssi.c projects/clang390-import/sys/arm/freescale/imx/imx_gpio.c projects/clang390-import/sys/arm/freescale/imx/imx_gpt.c projects/clang390-import/sys/arm/freescale/imx/imx_i2c.c projects/clang390-import/sys/arm/freescale/imx/imx_iomux.c projects/clang390-import/sys/arm/freescale/imx/imx_wdog.c projects/clang390-import/sys/arm/freescale/imx/tzic.c projects/clang390-import/sys/arm/freescale/vybrid/vf_adc.c projects/clang390-import/sys/arm/freescale/vybrid/vf_anadig.c projects/clang390-import/sys/arm/freescale/vybrid/vf_common.c projects/clang390-import/sys/arm/freescale/vybrid/vf_dcu4.c projects/clang390-import/sys/arm/freescale/vybrid/vf_dmamux.c projects/clang390-import/sys/arm/freescale/vybrid/vf_edma.c projects/clang390-import/sys/arm/freescale/vybrid/vf_ehci.c projects/clang390-import/sys/arm/freescale/vybrid/vf_gpio.c projects/clang390-import/sys/arm/freescale/vybrid/vf_i2c.c projects/clang390-import/sys/arm/freescale/vybrid/vf_iomuxc.c projects/clang390-import/sys/arm/freescale/vybrid/vf_machdep.c projects/clang390-import/sys/arm/freescale/vybrid/vf_mscm.c projects/clang390-import/sys/arm/freescale/vybrid/vf_port.c projects/clang390-import/sys/arm/freescale/vybrid/vf_sai.c projects/clang390-import/sys/arm/freescale/vybrid/vf_spi.c projects/clang390-import/sys/arm/freescale/vybrid/vf_src.c projects/clang390-import/sys/arm/freescale/vybrid/vf_tcon.c projects/clang390-import/sys/arm/lpc/lpc_fb.c projects/clang390-import/sys/arm/lpc/lpc_intc.c projects/clang390-import/sys/arm/lpc/lpc_machdep.c projects/clang390-import/sys/arm/lpc/lpc_timer.c projects/clang390-import/sys/arm/mv/armadaxp/armadaxp.c projects/clang390-import/sys/arm/mv/gpio.c projects/clang390-import/sys/arm/mv/mv_common.c projects/clang390-import/sys/arm/mv/mv_machdep.c projects/clang390-import/sys/arm/mv/mv_pci.c projects/clang390-import/sys/arm/mv/mv_ts.c projects/clang390-import/sys/arm/nvidia/tegra124/tegra124_machdep.c projects/clang390-import/sys/arm/nvidia/tegra124/tegra124_pmc.c projects/clang390-import/sys/arm/nvidia/tegra_abpmisc.c projects/clang390-import/sys/arm/nvidia/tegra_ahci.c projects/clang390-import/sys/arm/nvidia/tegra_efuse.c projects/clang390-import/sys/arm/nvidia/tegra_gpio.c projects/clang390-import/sys/arm/nvidia/tegra_i2c.c projects/clang390-import/sys/arm/nvidia/tegra_pcie.c projects/clang390-import/sys/arm/nvidia/tegra_rtc.c projects/clang390-import/sys/arm/nvidia/tegra_uart.c projects/clang390-import/sys/arm/nvidia/tegra_usbphy.c projects/clang390-import/sys/arm/rockchip/files.rk30xx projects/clang390-import/sys/arm/rockchip/rk30xx_gpio.c projects/clang390-import/sys/arm/rockchip/rk30xx_grf.c projects/clang390-import/sys/arm/rockchip/rk30xx_machdep.c projects/clang390-import/sys/arm/rockchip/rk30xx_pmu.c projects/clang390-import/sys/arm/rockchip/rk30xx_wdog.c projects/clang390-import/sys/arm/samsung/exynos/exynos5_common.c projects/clang390-import/sys/arm/ti/aintc.c projects/clang390-import/sys/arm/ti/am335x/am335x_ecap.c projects/clang390-import/sys/arm/ti/am335x/am335x_ehrpwm.c projects/clang390-import/sys/arm/ti/am335x/am335x_gpio.c projects/clang390-import/sys/arm/ti/am335x/am335x_lcd.c projects/clang390-import/sys/arm/ti/am335x/am335x_lcd_syscons.c projects/clang390-import/sys/arm/ti/am335x/am335x_musb.c projects/clang390-import/sys/arm/ti/am335x/am335x_prcm.c projects/clang390-import/sys/arm/ti/am335x/am335x_pwmss.c projects/clang390-import/sys/arm/ti/am335x/am335x_scm_padconf.c projects/clang390-import/sys/arm/ti/am335x/am335x_scm_padconf.h projects/clang390-import/sys/arm/ti/am335x/am335x_usbss.c projects/clang390-import/sys/arm/ti/cpsw/if_cpsw.c projects/clang390-import/sys/arm/ti/omap4/files.omap4 projects/clang390-import/sys/arm/ti/omap4/omap4_gpio.c projects/clang390-import/sys/arm/ti/omap4/omap4_mp.c projects/clang390-import/sys/arm/ti/omap4/omap4_prcm_clks.c projects/clang390-import/sys/arm/ti/omap4/omap4_scm_padconf.c projects/clang390-import/sys/arm/ti/omap4/omap4_scm_padconf.h projects/clang390-import/sys/arm/ti/omap4/pandaboard/pandaboard.c projects/clang390-import/sys/arm/ti/ti_adc.c projects/clang390-import/sys/arm/ti/ti_cpuid.c projects/clang390-import/sys/arm/ti/ti_cpuid.h projects/clang390-import/sys/arm/ti/ti_edma3.c projects/clang390-import/sys/arm/ti/ti_gpio.c projects/clang390-import/sys/arm/ti/ti_hwmods.c projects/clang390-import/sys/arm/ti/ti_machdep.c projects/clang390-import/sys/arm/ti/ti_mbox.c projects/clang390-import/sys/arm/ti/ti_pinmux.c projects/clang390-import/sys/arm/ti/ti_pruss.c projects/clang390-import/sys/arm/ti/ti_scm.c projects/clang390-import/sys/arm/ti/ti_sdhci.c projects/clang390-import/sys/arm/ti/ti_sdma.c projects/clang390-import/sys/arm/ti/ti_spi.c projects/clang390-import/sys/arm/ti/ti_wdt.c projects/clang390-import/sys/arm/ti/usb/omap_ehci.c projects/clang390-import/sys/arm/ti/usb/omap_host.c projects/clang390-import/sys/arm/ti/usb/omap_tll.c projects/clang390-import/sys/arm/versatile/pl050.c projects/clang390-import/sys/arm/versatile/sp804.c projects/clang390-import/sys/arm/versatile/versatile_clcd.c projects/clang390-import/sys/arm/versatile/versatile_common.c projects/clang390-import/sys/arm/versatile/versatile_machdep.c projects/clang390-import/sys/arm/versatile/versatile_pci.c projects/clang390-import/sys/arm/versatile/versatile_sic.c projects/clang390-import/sys/arm/versatile/versatile_timer.c projects/clang390-import/sys/arm/xilinx/zy7_devcfg.c projects/clang390-import/sys/arm/xilinx/zy7_ehci.c projects/clang390-import/sys/arm/xilinx/zy7_gpio.c projects/clang390-import/sys/arm/xilinx/zy7_machdep.c projects/clang390-import/sys/arm/xilinx/zy7_slcr.c projects/clang390-import/sys/arm64/conf/GENERIC projects/clang390-import/sys/boot/common/commands.c projects/clang390-import/sys/boot/common/dev_net.c projects/clang390-import/sys/boot/common/install.c projects/clang390-import/sys/boot/common/md.c projects/clang390-import/sys/boot/efi/libefi/efinet.c projects/clang390-import/sys/boot/efi/libefi/efipart.c projects/clang390-import/sys/boot/fdt/dts/arm/sun7i-a20-hdmi.dtsi projects/clang390-import/sys/boot/fdt/dts/powerpc/p2041rdb.dts projects/clang390-import/sys/boot/fdt/dts/powerpc/p2041si.dtsi projects/clang390-import/sys/boot/fdt/dts/powerpc/p3041ds.dts projects/clang390-import/sys/boot/fdt/dts/powerpc/p3041si.dtsi projects/clang390-import/sys/boot/fdt/dts/powerpc/p5020ds.dts projects/clang390-import/sys/boot/fdt/dts/powerpc/p5020si.dtsi projects/clang390-import/sys/boot/forth/loader.conf projects/clang390-import/sys/boot/i386/libfirewire/firewire.c projects/clang390-import/sys/boot/i386/libi386/bioscd.c projects/clang390-import/sys/boot/i386/libi386/biosdisk.c projects/clang390-import/sys/boot/i386/libi386/pxe.c projects/clang390-import/sys/boot/mips/beri/loader/beri_disk_cfi.c projects/clang390-import/sys/boot/mips/beri/loader/beri_disk_sdcard.c projects/clang390-import/sys/boot/pc98/libpc98/bioscd.c projects/clang390-import/sys/boot/pc98/libpc98/biosdisk.c projects/clang390-import/sys/boot/uboot/lib/disk.c projects/clang390-import/sys/boot/usb/storage/umass_loader.c projects/clang390-import/sys/boot/userboot/userboot/host.c projects/clang390-import/sys/boot/userboot/userboot/userboot_disk.c projects/clang390-import/sys/boot/zfs/zfs.c projects/clang390-import/sys/boot/zfs/zfsimpl.c projects/clang390-import/sys/cam/scsi/scsi_xpt.c projects/clang390-import/sys/cddl/compat/opensolaris/sys/vnode.h projects/clang390-import/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c projects/clang390-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h projects/clang390-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h projects/clang390-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h projects/clang390-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c projects/clang390-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c projects/clang390-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c projects/clang390-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c projects/clang390-import/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c projects/clang390-import/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h projects/clang390-import/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c projects/clang390-import/sys/conf/Makefile.mips projects/clang390-import/sys/conf/NOTES projects/clang390-import/sys/conf/files projects/clang390-import/sys/conf/files.amd64 projects/clang390-import/sys/conf/files.arm64 projects/clang390-import/sys/conf/files.i386 projects/clang390-import/sys/conf/kern.pre.mk projects/clang390-import/sys/conf/newvers.sh projects/clang390-import/sys/conf/options projects/clang390-import/sys/conf/options.riscv projects/clang390-import/sys/contrib/ncsw/inc/xx_ext.h projects/clang390-import/sys/contrib/ncsw/user/env/xx.c projects/clang390-import/sys/contrib/vchiq/interface/compat/vchi_bsd.c projects/clang390-import/sys/dev/acpi_support/acpi_hp.c projects/clang390-import/sys/dev/bhnd/bcma/bcma.c projects/clang390-import/sys/dev/bhnd/bcma/bcma_dmp.h projects/clang390-import/sys/dev/cpuctl/cpuctl.c projects/clang390-import/sys/dev/dpaa/bman_fdt.c projects/clang390-import/sys/dev/dpaa/fman.c projects/clang390-import/sys/dev/dpaa/fman.h projects/clang390-import/sys/dev/dpaa/if_dtsec.c projects/clang390-import/sys/dev/dpaa/if_dtsec_fdt.c projects/clang390-import/sys/dev/dpaa/if_dtsec_rm.c projects/clang390-import/sys/dev/dpaa/qman_fdt.c projects/clang390-import/sys/dev/drm2/drmP.h projects/clang390-import/sys/dev/drm2/drm_memory.c projects/clang390-import/sys/dev/drm2/drm_os_freebsd.c projects/clang390-import/sys/dev/drm2/drm_os_freebsd.h projects/clang390-import/sys/dev/drm2/ttm/ttm_bo_util.c projects/clang390-import/sys/dev/e1000/if_em.c projects/clang390-import/sys/dev/etherswitch/ip17x/ip175c.c projects/clang390-import/sys/dev/etherswitch/ip17x/ip175c.h projects/clang390-import/sys/dev/etherswitch/rtl8366/rtl8366rb.c projects/clang390-import/sys/dev/etherswitch/rtl8366/rtl8366rbvar.h projects/clang390-import/sys/dev/fdt/fdt_arm_platform.c projects/clang390-import/sys/dev/fdt/fdt_common.c projects/clang390-import/sys/dev/fdt/fdt_common.h projects/clang390-import/sys/dev/fdt/fdt_powerpc.c projects/clang390-import/sys/dev/gpio/gpiobus.c projects/clang390-import/sys/dev/hyperv/vmbus/vmbus.c projects/clang390-import/sys/dev/hyperv/vmbus/vmbus_if.m projects/clang390-import/sys/dev/hyperv/vmbus/vmbus_var.h projects/clang390-import/sys/dev/ic/ns16550.h projects/clang390-import/sys/dev/iicbus/iicsmb.c projects/clang390-import/sys/dev/intpm/intpm.c projects/clang390-import/sys/dev/ioat/ioat.c projects/clang390-import/sys/dev/iwm/if_iwm.c projects/clang390-import/sys/dev/kbdmux/kbdmux.c projects/clang390-import/sys/dev/rtwn/if_rtwn_tx.h projects/clang390-import/sys/dev/rtwn/pci/rtwn_pci_attach.c projects/clang390-import/sys/dev/rtwn/pci/rtwn_pci_rx.c projects/clang390-import/sys/dev/rtwn/pci/rtwn_pci_tx.c projects/clang390-import/sys/dev/rtwn/rtl8192c/pci/r92ce_attach.c projects/clang390-import/sys/dev/rtwn/rtl8192c/usb/r92cu_attach.c projects/clang390-import/sys/dev/rtwn/rtl8812a/r12a_rom.c projects/clang390-import/sys/dev/rtwn/rtl8812a/r12a_var.h projects/clang390-import/sys/dev/rtwn/rtl8812a/usb/r12au_attach.c projects/clang390-import/sys/dev/rtwn/rtl8821a/usb/r21au_attach.c projects/clang390-import/sys/dev/rtwn/usb/rtwn_usb_rx.c projects/clang390-import/sys/dev/smbus/smb.c projects/clang390-import/sys/dev/smbus/smb.h projects/clang390-import/sys/dev/uart/uart_bus_fdt.c projects/clang390-import/sys/dev/uart/uart_core.c projects/clang390-import/sys/dev/uart/uart_dev_ns8250.c projects/clang390-import/sys/dev/usb/controller/dwc_otg.c projects/clang390-import/sys/dev/usb/controller/dwc_otg.h projects/clang390-import/sys/dev/usb/controller/dwc_otg_fdt.c projects/clang390-import/sys/dev/usb/controller/dwc_otg_fdt.h projects/clang390-import/sys/dev/usb/net/if_smsc.c projects/clang390-import/sys/dev/virtio/console/virtio_console.c projects/clang390-import/sys/fs/autofs/autofs.c projects/clang390-import/sys/fs/nfs/nfs_commonsubs.c projects/clang390-import/sys/fs/tmpfs/tmpfs_subr.c projects/clang390-import/sys/geom/mirror/g_mirror.c projects/clang390-import/sys/geom/mirror/g_mirror.h projects/clang390-import/sys/geom/multipath/g_multipath.c projects/clang390-import/sys/i386/i386/trap.c projects/clang390-import/sys/kern/kern_exec.c projects/clang390-import/sys/kern/kern_sendfile.c projects/clang390-import/sys/kern/kern_umtx.c projects/clang390-import/sys/kern/sched_4bsd.c projects/clang390-import/sys/kern/subr_bus.c projects/clang390-import/sys/kern/uipc_mqueue.c projects/clang390-import/sys/kern/uipc_shm.c projects/clang390-import/sys/kern/vfs_bio.c projects/clang390-import/sys/kern/vfs_cache.c projects/clang390-import/sys/kern/vfs_export.c projects/clang390-import/sys/kern/vfs_mount.c projects/clang390-import/sys/mips/atheros/ar531x/files.ar5315 projects/clang390-import/sys/mips/atheros/ar531x/if_are.c projects/clang390-import/sys/mips/atheros/ar531x/if_arereg.h projects/clang390-import/sys/mips/include/cpufunc.h projects/clang390-import/sys/mips/include/cpuregs.h projects/clang390-import/sys/mips/include/locore.h projects/clang390-import/sys/mips/include/param.h projects/clang390-import/sys/mips/mediatek/mtk_soc.c projects/clang390-import/sys/mips/mips/cpu.c projects/clang390-import/sys/mips/mips/pmap.c projects/clang390-import/sys/modules/Makefile projects/clang390-import/sys/modules/dtrace/dtrace/Makefile projects/clang390-import/sys/modules/hyperv/utilities/Makefile projects/clang390-import/sys/modules/hyperv/vmbus/Makefile projects/clang390-import/sys/modules/kbdmux/Makefile projects/clang390-import/sys/modules/rpi_ft5406/Makefile projects/clang390-import/sys/net/iflib.c projects/clang390-import/sys/net/rtsock.c projects/clang390-import/sys/net80211/_ieee80211.h projects/clang390-import/sys/net80211/ieee80211_adhoc.c projects/clang390-import/sys/net80211/ieee80211_crypto.c projects/clang390-import/sys/net80211/ieee80211_crypto.h projects/clang390-import/sys/net80211/ieee80211_crypto_ccmp.c projects/clang390-import/sys/net80211/ieee80211_crypto_tkip.c projects/clang390-import/sys/net80211/ieee80211_hostap.c projects/clang390-import/sys/net80211/ieee80211_ioctl.c projects/clang390-import/sys/net80211/ieee80211_node.c projects/clang390-import/sys/net80211/ieee80211_output.c projects/clang390-import/sys/net80211/ieee80211_scan_sta.c projects/clang390-import/sys/net80211/ieee80211_sta.c projects/clang390-import/sys/net80211/ieee80211_tdma.c projects/clang390-import/sys/net80211/ieee80211_var.h projects/clang390-import/sys/net80211/ieee80211_wds.c projects/clang390-import/sys/netgraph/ng_l2tp.c projects/clang390-import/sys/netinet/tcp_input.c projects/clang390-import/sys/netinet/tcp_stacks/fastpath.c projects/clang390-import/sys/netinet/tcp_subr.c projects/clang390-import/sys/netinet/tcp_timewait.c projects/clang390-import/sys/powerpc/booke/pmap.c projects/clang390-import/sys/powerpc/conf/MPC85XX projects/clang390-import/sys/powerpc/conf/MPC85XXSPE projects/clang390-import/sys/powerpc/conf/dpaa/files.dpaa projects/clang390-import/sys/powerpc/include/pmap.h projects/clang390-import/sys/powerpc/mpc85xx/mpc85xx.h projects/clang390-import/sys/powerpc/mpc85xx/platform_mpc85xx.c projects/clang390-import/sys/powerpc/mpc85xx/qoriq_gpio.c projects/clang390-import/sys/riscv/conf/GENERIC projects/clang390-import/sys/riscv/include/pcb.h projects/clang390-import/sys/riscv/include/reg.h projects/clang390-import/sys/riscv/include/riscvreg.h projects/clang390-import/sys/riscv/riscv/genassym.c projects/clang390-import/sys/riscv/riscv/machdep.c projects/clang390-import/sys/riscv/riscv/mp_machdep.c projects/clang390-import/sys/riscv/riscv/pmap.c projects/clang390-import/sys/riscv/riscv/swtch.S projects/clang390-import/sys/riscv/riscv/trap.c projects/clang390-import/sys/riscv/riscv/vm_machdep.c projects/clang390-import/sys/sys/kerneldump.h projects/clang390-import/sys/sys/queue.h projects/clang390-import/sys/sys/sf_buf.h projects/clang390-import/sys/sys/socket.h projects/clang390-import/sys/ufs/ffs/ffs_vfsops.c projects/clang390-import/sys/vm/swap_pager.c projects/clang390-import/sys/vm/vm_fault.c projects/clang390-import/sys/vm/vm_mmap.c projects/clang390-import/sys/vm/vm_object.c projects/clang390-import/sys/vm/vm_object.h projects/clang390-import/sys/vm/vm_page.c projects/clang390-import/sys/vm/vm_page.h projects/clang390-import/sys/vm/vm_reserv.c projects/clang390-import/sys/vm/vm_reserv.h projects/clang390-import/sys/vm/vnode_pager.c projects/clang390-import/targets/pseudo/userland/gnu/Makefile.depend projects/clang390-import/targets/pseudo/userland/misc/Makefile.depend projects/clang390-import/tools/tools/git/arcgit projects/clang390-import/tools/tools/git/importgit projects/clang390-import/tools/tools/nanobsd/defaults.sh projects/clang390-import/tools/tools/nanobsd/nanobsd.sh projects/clang390-import/tools/tools/nanobsd/pcengines/common.conf projects/clang390-import/usr.bin/basename/Makefile.depend projects/clang390-import/usr.bin/cmp/Makefile.depend projects/clang390-import/usr.bin/col/Makefile.depend projects/clang390-import/usr.bin/dc/Makefile.depend projects/clang390-import/usr.bin/dirname/Makefile.depend projects/clang390-import/usr.bin/elfdump/Makefile.depend projects/clang390-import/usr.bin/fold/Makefile.depend projects/clang390-import/usr.bin/fold/fold.c projects/clang390-import/usr.bin/gcore/gcore.c projects/clang390-import/usr.bin/getopt/Makefile.depend projects/clang390-import/usr.bin/jot/Makefile.depend projects/clang390-import/usr.bin/kdump/Makefile.depend projects/clang390-import/usr.bin/locale/locale.c projects/clang390-import/usr.bin/locate/bigram/Makefile.depend projects/clang390-import/usr.bin/logname/Makefile.depend projects/clang390-import/usr.bin/netstat/mbuf.c projects/clang390-import/usr.bin/printenv/Makefile.depend projects/clang390-import/usr.bin/tee/Makefile.depend projects/clang390-import/usr.bin/tr/Makefile.depend projects/clang390-import/usr.bin/vmstat/vmstat.c projects/clang390-import/usr.bin/whois/whois.c projects/clang390-import/usr.bin/write/Makefile.depend projects/clang390-import/usr.bin/yes/Makefile.depend projects/clang390-import/usr.sbin/amd/amd/Makefile projects/clang390-import/usr.sbin/amd/fsinfo/Makefile projects/clang390-import/usr.sbin/amd/include/config.h projects/clang390-import/usr.sbin/bhyvectl/bhyvectl.8 projects/clang390-import/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_if.c projects/clang390-import/usr.sbin/crunch/crunchide/crunchide.c projects/clang390-import/usr.sbin/crunch/crunchide/exec_elf32.c projects/clang390-import/usr.sbin/daemon/Makefile.depend projects/clang390-import/usr.sbin/hyperv/Makefile projects/clang390-import/usr.sbin/pw/grupd.c projects/clang390-import/usr.sbin/pw/pw_nis.c projects/clang390-import/usr.sbin/pw/pwupd.c projects/clang390-import/usr.sbin/smbmsg/smbmsg.c Directory Properties: projects/clang390-import/ (props changed) projects/clang390-import/cddl/ (props changed) projects/clang390-import/cddl/contrib/opensolaris/ (props changed) projects/clang390-import/contrib/amd/ (props changed) projects/clang390-import/sys/cddl/contrib/opensolaris/ (props changed) Modified: projects/clang390-import/Makefile ============================================================================== --- projects/clang390-import/Makefile Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/Makefile Sat Nov 19 16:05:55 2016 (r308842) @@ -239,7 +239,7 @@ _MAKE+= MK_META_MODE=no _TARGET_ARCH= ${TARGET:S/pc98/i386/:S/arm64/aarch64/} .elif !defined(TARGET) && defined(TARGET_ARCH) && \ ${TARGET_ARCH} != ${MACHINE_ARCH} -_TARGET= ${TARGET_ARCH:C/mips(n32|64)?(el)?(hf)?/mips/:C/arm(v6)?(eb)?/arm/:C/aarch64/arm64/:C/powerpc64/powerpc/:C/powerpcspe/powerpc/:C/riscv64/riscv/} +_TARGET= ${TARGET_ARCH:C/mips(n32|64)?(el)?(hf)?/mips/:C/arm(v6)?(eb)?/arm/:C/aarch64/arm64/:C/powerpc64/powerpc/:C/powerpcspe/powerpc/:C/riscv64(sf)?/riscv/} .endif .if defined(TARGET) && !defined(_TARGET) _TARGET=${TARGET} Modified: projects/clang390-import/Makefile.inc1 ============================================================================== --- projects/clang390-import/Makefile.inc1 Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/Makefile.inc1 Sat Nov 19 16:05:55 2016 (r308842) @@ -364,6 +364,7 @@ KNOWN_ARCHES?= aarch64/arm64 \ powerpc64/powerpc \ powerpcspe/powerpc \ riscv64/riscv \ + riscv64sf/riscv \ sparc64 .if ${TARGET} == ${TARGET_ARCH} @@ -676,9 +677,6 @@ _worldtmp: .PHONY .endif .else rm -rf ${WORLDTMP}/legacy/usr/include -# XXX - These can depend on any header file. - rm -f ${OBJTREE}${.CURDIR}/lib/libsysdecode/ioctl.c - rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/kdump_subr.c .endif .for _dir in \ lib lib/casper usr legacy/bin legacy/usr Modified: projects/clang390-import/UPDATING ============================================================================== --- projects/clang390-import/UPDATING Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/UPDATING Sat Nov 19 16:05:55 2016 (r308842) @@ -130,7 +130,7 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12 20160527: CAM will now strip leading spaces from SCSI disks' serial numbers. - This will effect users who create UFS filesystems on SCSI disks using + This will affect users who create UFS filesystems on SCSI disks using those disk's diskid device nodes. For example, if /etc/fstab previously contained a line like "/dev/diskid/DISK-%20%20%20%20%20%20%20ABCDEFG0123456", you should Modified: projects/clang390-import/bin/dd/dd.c ============================================================================== --- projects/clang390-import/bin/dd/dd.c Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/bin/dd/dd.c Sat Nov 19 16:05:55 2016 (r308842) @@ -48,10 +48,13 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include +#include #include +#include #include #include #include @@ -92,6 +95,10 @@ main(int argc __unused, char *argv[]) jcl(argv); setup(); + caph_cache_catpages(); + if (cap_enter() == -1 && errno != ENOSYS) + err(1, "unable to enter capability mode"); + (void)signal(SIGINFO, siginfo_handler); (void)signal(SIGINT, terminate); @@ -125,6 +132,8 @@ static void setup(void) { u_int cnt; + cap_rights_t rights; + unsigned long cmds[] = { FIODTYPE, MTIOCTOP }; if (in.name == NULL) { in.name = "stdin"; @@ -133,13 +142,20 @@ setup(void) in.fd = open(in.name, O_RDONLY, 0); if (in.fd == -1) err(1, "%s", in.name); + if (caph_limit_stdin() == -1) + err(1, "unable to limit capability rights"); } getfdtype(&in); + cap_rights_init(&rights, CAP_READ, CAP_SEEK); + if (cap_rights_limit(in.fd, &rights) == -1 && errno != ENOSYS) + err(1, "unable to limit capability rights"); + if (files_cnt > 1 && !(in.flags & ISTAPE)) errx(1, "files is not supported for non-tape devices"); + cap_rights_set(&rights, CAP_WRITE, CAP_FTRUNCATE, CAP_IOCTL); if (out.name == NULL) { /* No way to check for read access here. */ out.fd = STDOUT_FILENO; @@ -156,13 +172,27 @@ setup(void) if (out.fd == -1) { out.fd = open(out.name, O_WRONLY | OFLAGS, DEFFILEMODE); out.flags |= NOREAD; + cap_rights_clear(&rights, CAP_READ); } if (out.fd == -1) err(1, "%s", out.name); + if (caph_limit_stdout() == -1) + err(1, "unable to limit capability rights"); } getfdtype(&out); + if (cap_rights_limit(out.fd, &rights) == -1 && errno != ENOSYS) + err(1, "unable to limit capability rights"); + if (cap_ioctls_limit(out.fd, cmds, nitems(cmds)) == -1 && + errno != ENOSYS) + err(1, "unable to limit capability rights"); + + if (in.fd != STDERR_FILENO && out.fd != STDERR_FILENO) { + if (caph_limit_stderr() == -1) + err(1, "unable to limit capability rights"); + } + /* * Allocate space for the input and output buffers. If not doing * record oriented I/O, only need a single buffer. Modified: projects/clang390-import/bin/echo/Makefile.depend ============================================================================== --- projects/clang390-import/bin/echo/Makefile.depend Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/bin/echo/Makefile.depend Sat Nov 19 16:05:55 2016 (r308842) @@ -8,6 +8,7 @@ DIRDEPS = \ include/xlocale \ lib/${CSU_DIR} \ lib/libc \ + lib/libcapsicum \ lib/libcompiler_rt \ Modified: projects/clang390-import/bin/sleep/Makefile.depend ============================================================================== --- projects/clang390-import/bin/sleep/Makefile.depend Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/bin/sleep/Makefile.depend Sat Nov 19 16:05:55 2016 (r308842) @@ -8,6 +8,7 @@ DIRDEPS = \ include/xlocale \ lib/${CSU_DIR} \ lib/libc \ + lib/libcapsicum \ lib/libcompiler_rt \ Modified: projects/clang390-import/cddl/contrib/opensolaris/cmd/ztest/ztest.c ============================================================================== --- projects/clang390-import/cddl/contrib/opensolaris/cmd/ztest/ztest.c Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/cddl/contrib/opensolaris/cmd/ztest/ztest.c Sat Nov 19 16:05:55 2016 (r308842) @@ -1371,7 +1371,6 @@ ztest_log_write(ztest_ds_t *zd, dmu_tx_t itx->itx_private = zd; itx->itx_wr_state = write_state; itx->itx_sync = (ztest_random(8) == 0); - itx->itx_sod += (write_state == WR_NEED_COPY ? lr->lr_length : 0); bcopy(&lr->lr_common + 1, &itx->itx_lr + 1, sizeof (*lr) - sizeof (lr_t)); Modified: projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cc.c ============================================================================== --- projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cc.c Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cc.c Sat Nov 19 16:05:55 2016 (r308842) @@ -1058,46 +1058,6 @@ dt_action_printm(dtrace_hdl_t *dtp, dt_n } static void -dt_action_printt(dtrace_hdl_t *dtp, dt_node_t *dnp, dtrace_stmtdesc_t *sdp) -{ - dtrace_actdesc_t *ap = dt_stmt_action(dtp, sdp); - - dt_node_t *size = dnp->dn_args; - dt_node_t *addr = dnp->dn_args->dn_list; - - char n[DT_TYPE_NAMELEN]; - - if (dt_node_is_posconst(size) == 0) { - dnerror(size, D_PRINTT_SIZE, "printt( ) argument #1 must " - "be a non-zero positive integral constant expression\n"); - } - - if (addr == NULL || addr->dn_kind != DT_NODE_FUNC || - addr->dn_ident != dt_idhash_lookup(dtp->dt_globals, "typeref")) { - dnerror(addr, D_PRINTT_ADDR, - "printt( ) argument #2 is incompatible with " - "prototype:\n\tprototype: typeref()\n" - "\t argument: %s\n", - dt_node_type_name(addr, n, sizeof (n))); - } - - dt_cg(yypcb, addr); - ap->dtad_difo = dt_as(yypcb); - ap->dtad_kind = DTRACEACT_PRINTT; - - ap->dtad_difo->dtdo_rtype.dtdt_flags |= DIF_TF_BYREF; - - /* - * Allow additional buffer space for the data size, type size, - * type string length and a stab in the dark (32 bytes) for the - * type string. The type string is part of the typeref() that - * this action references. - */ - ap->dtad_difo->dtdo_rtype.dtdt_size = size->dn_value + 3 * sizeof(uintptr_t) + 32; - -} - -static void dt_action_commit(dtrace_hdl_t *dtp, dt_node_t *dnp, dtrace_stmtdesc_t *sdp) { dtrace_actdesc_t *ap = dt_stmt_action(dtp, sdp); @@ -1169,9 +1129,6 @@ dt_compile_fun(dtrace_hdl_t *dtp, dt_nod case DT_ACT_PRINTM: dt_action_printm(dtp, dnp->dn_expr, sdp); break; - case DT_ACT_PRINTT: - dt_action_printt(dtp, dnp->dn_expr, sdp); - break; case DT_ACT_RAISE: dt_action_raise(dtp, dnp->dn_expr, sdp); break; Modified: projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cg.c ============================================================================== --- projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cg.c Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cg.c Sat Nov 19 16:05:55 2016 (r308842) @@ -1353,40 +1353,6 @@ dt_cg_inline(dt_node_t *dnp, dt_irlist_t } } -static void -dt_cg_func_typeref(dtrace_hdl_t *dtp, dt_node_t *dnp) -{ - dtrace_typeinfo_t dtt; - dt_node_t *addr = dnp->dn_args; - dt_node_t *nelm = addr->dn_list; - dt_node_t *strp = nelm->dn_list; - dt_node_t *typs = strp->dn_list; - char buf[DT_TYPE_NAMELEN]; - char *p; - - ctf_type_name(addr->dn_ctfp, addr->dn_type, buf, sizeof (buf)); - - /* - * XXX Hack alert! XXX - * The prototype has two dummy args that we munge to represent - * the type string and the type size. - * - * Yes, I hear your grumble, but it works for now. We'll come - * up with a more elegant implementation later. :-) - */ - free(strp->dn_string); - - if ((p = strchr(buf, '*')) != NULL) - *p = '\0'; - - strp->dn_string = strdup(buf); - - if (dtrace_lookup_by_type(dtp, DTRACE_OBJ_EVERY, buf, &dtt) < 0) - return; - - typs->dn_value = ctf_type_size(dtt.dtt_ctfp, dtt.dtt_type); -} - typedef struct dt_xlmemb { dt_ident_t *dtxl_idp; /* translated ident */ dt_irlist_t *dtxl_dlp; /* instruction list */ @@ -2002,8 +1968,6 @@ dt_cg_node(dt_node_t *dnp, dt_irlist_t * switch (dnp->dn_kind) { case DT_NODE_FUNC: { - dtrace_hdl_t *dtp = yypcb->pcb_hdl; - if ((idp = dnp->dn_ident)->di_kind != DT_IDENT_FUNC) { dnerror(dnp, D_CG_EXPR, "%s %s( ) may not be " "called from a D expression (D program " @@ -2011,15 +1975,6 @@ dt_cg_node(dt_node_t *dnp, dt_irlist_t * dt_idkind_name(idp->di_kind), idp->di_name); } - switch (idp->di_id) { - case DIF_SUBR_TYPEREF: - dt_cg_func_typeref(dtp, dnp); - break; - - default: - break; - } - dt_cg_arglist(dnp->dn_ident, dnp->dn_args, dlp, drp); dnp->dn_reg = dt_regset_alloc(drp); Modified: projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c ============================================================================== --- projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c Sat Nov 19 16:05:55 2016 (r308842) @@ -1537,314 +1537,6 @@ dt_print_umod(dtrace_hdl_t *dtp, FILE *f return (err); } -int -dt_print_memory(dtrace_hdl_t *dtp, FILE *fp, caddr_t addr) -{ - int quiet = (dtp->dt_options[DTRACEOPT_QUIET] != DTRACEOPT_UNSET); - size_t nbytes = *((uintptr_t *) addr); - - return (dt_print_bytes(dtp, fp, addr + sizeof(uintptr_t), - nbytes, 50, quiet, 1)); -} - -typedef struct dt_type_cbdata { - dtrace_hdl_t *dtp; - dtrace_typeinfo_t dtt; - caddr_t addr; - caddr_t addrend; - const char *name; - int f_type; - int indent; - int type_width; - int name_width; - FILE *fp; -} dt_type_cbdata_t; - -static int dt_print_type_data(dt_type_cbdata_t *, ctf_id_t); - -static int -dt_print_type_member(const char *name, ctf_id_t type, ulong_t off, void *arg) -{ - dt_type_cbdata_t cbdata; - dt_type_cbdata_t *cbdatap = arg; - ssize_t ssz; - - if ((ssz = ctf_type_size(cbdatap->dtt.dtt_ctfp, type)) <= 0) - return (0); - - off /= 8; - - cbdata = *cbdatap; - cbdata.name = name; - cbdata.addr += off; - cbdata.addrend = cbdata.addr + ssz; - - return (dt_print_type_data(&cbdata, type)); -} - -static int -dt_print_type_width(const char *name, ctf_id_t type, ulong_t off, void *arg) -{ - char buf[DT_TYPE_NAMELEN]; - char *p; - dt_type_cbdata_t *cbdatap = arg; - size_t sz = strlen(name); - - ctf_type_name(cbdatap->dtt.dtt_ctfp, type, buf, sizeof (buf)); - - if ((p = strchr(buf, '[')) != NULL) - p[-1] = '\0'; - else - p = ""; - - sz += strlen(p); - - if (sz > cbdatap->name_width) - cbdatap->name_width = sz; - - sz = strlen(buf); - - if (sz > cbdatap->type_width) - cbdatap->type_width = sz; - - return (0); -} - -static int -dt_print_type_data(dt_type_cbdata_t *cbdatap, ctf_id_t type) -{ - caddr_t addr = cbdatap->addr; - caddr_t addrend = cbdatap->addrend; - char buf[DT_TYPE_NAMELEN]; - char *p; - int cnt = 0; - uint_t kind = ctf_type_kind(cbdatap->dtt.dtt_ctfp, type); - ssize_t ssz = ctf_type_size(cbdatap->dtt.dtt_ctfp, type); - - ctf_type_name(cbdatap->dtt.dtt_ctfp, type, buf, sizeof (buf)); - - if ((p = strchr(buf, '[')) != NULL) - p[-1] = '\0'; - else - p = ""; - - if (cbdatap->f_type) { - int type_width = roundup(cbdatap->type_width + 1, 4); - int name_width = roundup(cbdatap->name_width + 1, 4); - - name_width -= strlen(cbdatap->name); - - dt_printf(cbdatap->dtp, cbdatap->fp, "%*s%-*s%s%-*s = ",cbdatap->indent * 4,"",type_width,buf,cbdatap->name,name_width,p); - } - - while (addr < addrend) { - dt_type_cbdata_t cbdata; - ctf_arinfo_t arinfo; - ctf_encoding_t cte; - uintptr_t *up; - void *vp = addr; - cbdata = *cbdatap; - cbdata.name = ""; - cbdata.addr = addr; - cbdata.addrend = addr + ssz; - cbdata.f_type = 0; - cbdata.indent++; - cbdata.type_width = 0; - cbdata.name_width = 0; - - if (cnt > 0) - dt_printf(cbdatap->dtp, cbdatap->fp, "%*s", cbdatap->indent * 4,""); - - switch (kind) { - case CTF_K_INTEGER: - if (ctf_type_encoding(cbdatap->dtt.dtt_ctfp, type, &cte) != 0) - return (-1); - if ((cte.cte_format & CTF_INT_SIGNED) != 0) - switch (cte.cte_bits) { - case 8: - if (isprint(*((char *) vp))) - dt_printf(cbdatap->dtp, cbdatap->fp, "'%c', ", *((char *) vp)); - dt_printf(cbdatap->dtp, cbdatap->fp, "%d (0x%x);\n", *((char *) vp), *((char *) vp)); - break; - case 16: - dt_printf(cbdatap->dtp, cbdatap->fp, "%hd (0x%hx);\n", *((short *) vp), *((u_short *) vp)); - break; - case 32: - dt_printf(cbdatap->dtp, cbdatap->fp, "%d (0x%x);\n", *((int *) vp), *((u_int *) vp)); - break; - case 64: - dt_printf(cbdatap->dtp, cbdatap->fp, "%jd (0x%jx);\n", *((long long *) vp), *((unsigned long long *) vp)); - break; - default: - dt_printf(cbdatap->dtp, cbdatap->fp, "CTF_K_INTEGER: format %x offset %u bits %u\n",cte.cte_format,cte.cte_offset,cte.cte_bits); - break; - } - else - switch (cte.cte_bits) { - case 8: - dt_printf(cbdatap->dtp, cbdatap->fp, "%u (0x%x);\n", *((uint8_t *) vp) & 0xff, *((uint8_t *) vp) & 0xff); - break; - case 16: - dt_printf(cbdatap->dtp, cbdatap->fp, "%hu (0x%hx);\n", *((u_short *) vp), *((u_short *) vp)); - break; - case 32: - dt_printf(cbdatap->dtp, cbdatap->fp, "%u (0x%x);\n", *((u_int *) vp), *((u_int *) vp)); - break; - case 64: - dt_printf(cbdatap->dtp, cbdatap->fp, "%ju (0x%jx);\n", *((unsigned long long *) vp), *((unsigned long long *) vp)); - break; - default: - dt_printf(cbdatap->dtp, cbdatap->fp, "CTF_K_INTEGER: format %x offset %u bits %u\n",cte.cte_format,cte.cte_offset,cte.cte_bits); - break; - } - break; - case CTF_K_FLOAT: - dt_printf(cbdatap->dtp, cbdatap->fp, "CTF_K_FLOAT: format %x offset %u bits %u\n",cte.cte_format,cte.cte_offset,cte.cte_bits); - break; - case CTF_K_POINTER: - dt_printf(cbdatap->dtp, cbdatap->fp, "%p;\n", *((void **) addr)); - break; - case CTF_K_ARRAY: - if (ctf_array_info(cbdatap->dtt.dtt_ctfp, type, &arinfo) != 0) - return (-1); - dt_printf(cbdatap->dtp, cbdatap->fp, "{\n%*s",cbdata.indent * 4,""); - dt_print_type_data(&cbdata, arinfo.ctr_contents); - dt_printf(cbdatap->dtp, cbdatap->fp, "%*s};\n",cbdatap->indent * 4,""); - break; - case CTF_K_FUNCTION: - dt_printf(cbdatap->dtp, cbdatap->fp, "CTF_K_FUNCTION:\n"); - break; - case CTF_K_STRUCT: - cbdata.f_type = 1; - if (ctf_member_iter(cbdatap->dtt.dtt_ctfp, type, - dt_print_type_width, &cbdata) != 0) - return (-1); - dt_printf(cbdatap->dtp, cbdatap->fp, "{\n"); - if (ctf_member_iter(cbdatap->dtt.dtt_ctfp, type, - dt_print_type_member, &cbdata) != 0) - return (-1); - dt_printf(cbdatap->dtp, cbdatap->fp, "%*s};\n",cbdatap->indent * 4,""); - break; - case CTF_K_UNION: - cbdata.f_type = 1; - if (ctf_member_iter(cbdatap->dtt.dtt_ctfp, type, - dt_print_type_width, &cbdata) != 0) - return (-1); - dt_printf(cbdatap->dtp, cbdatap->fp, "{\n"); - if (ctf_member_iter(cbdatap->dtt.dtt_ctfp, type, - dt_print_type_member, &cbdata) != 0) - return (-1); - dt_printf(cbdatap->dtp, cbdatap->fp, "%*s};\n",cbdatap->indent * 4,""); - break; - case CTF_K_ENUM: - dt_printf(cbdatap->dtp, cbdatap->fp, "%s;\n", ctf_enum_name(cbdatap->dtt.dtt_ctfp, type, *((int *) vp))); - break; - case CTF_K_TYPEDEF: - dt_print_type_data(&cbdata, ctf_type_reference(cbdatap->dtt.dtt_ctfp,type)); - break; - case CTF_K_VOLATILE: - if (cbdatap->f_type) - dt_printf(cbdatap->dtp, cbdatap->fp, "volatile "); - dt_print_type_data(&cbdata, ctf_type_reference(cbdatap->dtt.dtt_ctfp,type)); - break; - case CTF_K_CONST: - if (cbdatap->f_type) - dt_printf(cbdatap->dtp, cbdatap->fp, "const "); - dt_print_type_data(&cbdata, ctf_type_reference(cbdatap->dtt.dtt_ctfp,type)); - break; - case CTF_K_RESTRICT: - if (cbdatap->f_type) - dt_printf(cbdatap->dtp, cbdatap->fp, "restrict "); - dt_print_type_data(&cbdata, ctf_type_reference(cbdatap->dtt.dtt_ctfp,type)); - break; - default: - break; - } - - addr += ssz; - cnt++; - } - - return (0); -} - -static int -dt_print_type(dtrace_hdl_t *dtp, FILE *fp, caddr_t addr) -{ - caddr_t addrend; - char *p; - dtrace_typeinfo_t dtt; - dt_type_cbdata_t cbdata; - int num = 0; - int quiet = (dtp->dt_options[DTRACEOPT_QUIET] != DTRACEOPT_UNSET); - ssize_t ssz; - - if (!quiet) - dt_printf(dtp, fp, "\n"); - - /* Get the total number of bytes of data buffered. */ - size_t nbytes = *((uintptr_t *) addr); - addr += sizeof(uintptr_t); - - /* - * Get the size of the type so that we can check that it matches - * the CTF data we look up and so that we can figure out how many - * type elements are buffered. - */ - size_t typs = *((uintptr_t *) addr); - addr += sizeof(uintptr_t); - - /* - * Point to the type string in the buffer. Get it's string - * length and round it up to become the offset to the start - * of the buffered type data which we would like to be aligned - * for easy access. - */ - char *strp = (char *) addr; - int offset = roundup(strlen(strp) + 1, sizeof(uintptr_t)); - - /* - * The type string might have a format such as 'int [20]'. - * Check if there is an array dimension present. - */ - if ((p = strchr(strp, '[')) != NULL) { - /* Strip off the array dimension. */ - *p++ = '\0'; - - for (; *p != '\0' && *p != ']'; p++) - num = num * 10 + *p - '0'; - } else - /* No array dimension, so default. */ - num = 1; - - /* Lookup the CTF type from the type string. */ - if (dtrace_lookup_by_type(dtp, DTRACE_OBJ_EVERY, strp, &dtt) < 0) - return (-1); - - /* Offset the buffer address to the start of the data... */ - addr += offset; - - ssz = ctf_type_size(dtt.dtt_ctfp, dtt.dtt_type); - - if (typs != ssz) { - printf("Expected type size from buffer (%lu) to match type size looked up now (%ld)\n", (u_long) typs, (long) ssz); - return (-1); - } - - cbdata.dtp = dtp; - cbdata.dtt = dtt; - cbdata.name = ""; - cbdata.addr = addr; - cbdata.addrend = addr + nbytes; - cbdata.indent = 1; - cbdata.f_type = 1; - cbdata.type_width = 0; - cbdata.name_width = 0; - cbdata.fp = fp; - - return (dt_print_type_data(&cbdata, dtt.dtt_type)); -} - static int dt_print_sym(dtrace_hdl_t *dtp, FILE *fp, const char *format, caddr_t addr) { @@ -1904,6 +1596,16 @@ dt_print_mod(dtrace_hdl_t *dtp, FILE *fp return (0); } +static int +dt_print_memory(dtrace_hdl_t *dtp, FILE *fp, caddr_t addr) +{ + int quiet = (dtp->dt_options[DTRACEOPT_QUIET] != DTRACEOPT_UNSET); + size_t nbytes = *((uintptr_t *) addr); + + return (dt_print_bytes(dtp, fp, addr + sizeof(uintptr_t), + nbytes, 50, quiet, 1)); +} + typedef struct dt_normal { dtrace_aggvarid_t dtnd_id; uint64_t dtnd_normal; @@ -2644,12 +2346,6 @@ dt_consume_cpu(dtrace_hdl_t *dtp, FILE * goto nextrec; } - if (act == DTRACEACT_PRINTT) { - if (dt_print_type(dtp, fp, addr) < 0) - return (-1); - goto nextrec; - } - if (DTRACEACT_ISPRINTFLIKE(act)) { void *fmtdata; int (*func)(dtrace_hdl_t *, FILE *, void *, Modified: projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_errtags.h ============================================================================== --- projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_errtags.h Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_errtags.h Sat Nov 19 16:05:55 2016 (r308842) @@ -265,8 +265,6 @@ typedef enum { D_NOREG, /* no available internal registers */ D_PRINTM_ADDR, /* printm() memref bad type */ D_PRINTM_SIZE, /* printm() size bad type */ - D_PRINTT_ADDR, /* printt() typeref bad type */ - D_PRINTT_SIZE /* printt() size bad type */ } dt_errtag_t; extern const char *dt_errtag(dt_errtag_t); Modified: projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_impl.h ============================================================================== --- projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_impl.h Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_impl.h Sat Nov 19 16:05:55 2016 (r308842) @@ -488,7 +488,6 @@ struct dtrace_hdl { #define DT_ACT_SETOPT DT_ACT(28) /* setopt() action */ #define DT_ACT_PRINT DT_ACT(29) /* print() action */ #define DT_ACT_PRINTM DT_ACT(30) /* printm() action */ -#define DT_ACT_PRINTT DT_ACT(31) /* printt() action */ /* * Sentinel to tell freopen() to restore the saved stdout. This must not Modified: projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c ============================================================================== --- projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c Sat Nov 19 16:05:55 2016 (r308842) @@ -392,8 +392,6 @@ static const dt_ident_t _dtrace_globals[ &dt_idops_func, "void(@, ...)" }, { "printm", DT_IDENT_ACTFUNC, 0, DT_ACT_PRINTM, DT_ATTR_STABCMN, DT_VERS_1_0, &dt_idops_func, "void(size_t, uintptr_t *)" }, -{ "printt", DT_IDENT_ACTFUNC, 0, DT_ACT_PRINTT, DT_ATTR_STABCMN, DT_VERS_1_0, - &dt_idops_func, "void(size_t, uintptr_t *)" }, { "probefunc", DT_IDENT_SCALAR, 0, DIF_VAR_PROBEFUNC, DT_ATTR_STABCMN, DT_VERS_1_0, &dt_idops_type, "string" }, { "probemod", DT_IDENT_SCALAR, 0, DIF_VAR_PROBEMOD, @@ -505,8 +503,6 @@ static const dt_ident_t _dtrace_globals[ &dt_idops_func, "void(@, size_t, ...)" }, { "trunc", DT_IDENT_ACTFUNC, 0, DT_ACT_TRUNC, DT_ATTR_STABCMN, DT_VERS_1_0, &dt_idops_func, "void(...)" }, -{ "typeref", DT_IDENT_FUNC, 0, DIF_SUBR_TYPEREF, DT_ATTR_STABCMN, DT_VERS_1_1, - &dt_idops_func, "uintptr_t *(void *, size_t, string, size_t)" }, { "uaddr", DT_IDENT_ACTFUNC, 0, DT_ACT_UADDR, DT_ATTR_STABCMN, DT_VERS_1_2, &dt_idops_func, "_usymaddr(uintptr_t)" }, { "ucaller", DT_IDENT_SCALAR, 0, DIF_VAR_UCALLER, DT_ATTR_STABCMN, Modified: projects/clang390-import/cddl/lib/libdtrace/Makefile ============================================================================== --- projects/clang390-import/cddl/lib/libdtrace/Makefile Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/cddl/lib/libdtrace/Makefile Sat Nov 19 16:05:55 2016 (r308842) @@ -121,12 +121,10 @@ LIBADD= ctf elf proc pthread rtld_db CLEANFILES= dt_errtags.c dt_names.c -dt_errtags.c: - sh ${OPENSOLARIS_USR_DISTDIR}/lib/libdtrace/common/mkerrtags.sh < ${OPENSOLARIS_USR_DISTDIR}/lib/libdtrace/common/dt_errtags.h > dt_errtags.c - -dt_names.c: - sh ${OPENSOLARIS_USR_DISTDIR}/lib/libdtrace/common/mknames.sh < ${OPENSOLARIS_SYS_DISTDIR}/uts/common/sys/dtrace.h > dt_names.c +.include -beforedepend: dt_errtags.c dt_names.c +dt_errtags.c: ${OPENSOLARIS_USR_DISTDIR}/lib/libdtrace/common/dt_errtags.h + sh ${OPENSOLARIS_USR_DISTDIR}/lib/libdtrace/common/mkerrtags.sh < ${.ALLSRC} > ${.TARGET} -.include +dt_names.c: ${OPENSOLARIS_SYS_DISTDIR}/uts/common/sys/dtrace.h + sh ${OPENSOLARIS_USR_DISTDIR}/lib/libdtrace/common/mknames.sh < ${.ALLSRC} > ${.TARGET} Modified: projects/clang390-import/contrib/amd/AUTHORS ============================================================================== --- projects/clang390-import/contrib/amd/AUTHORS Sat Nov 19 16:00:05 2016 (r308841) +++ projects/clang390-import/contrib/amd/AUTHORS Sat Nov 19 16:05:55 2016 (r308842) @@ -6,22 +6,22 @@ This file lists the ones who contributed particular order, and I thank them all. This is of course not to diminish the smaller contributes of the many others. Thank you all. -* Erez Zadok +* Erez Zadok The most significant changes were made by Erez Zadok in terms of bug fixes, ports, and new features added. Erez Zadok is the current maintainer of am-utils, as of January 1997. -* Ion Badulescu +* Ion Badulescu Co-maintainer of am-utils since late 1999: Linux and Solaris autofs support, Linux NFSv3 support, major code reorganization, etc... -* Randall S. Winchester +* Randall S. Winchester May 7, 1997: contributed a special version of upl102 that included NFS V.3 support. Some of the code was contributed by Christos Zoulas -. I (Erez) ported these changes to am-utils. +. I (Erez) ported these changes to am-utils. September 12, 1997: lots of small prototype cleanups and fixes to numerous files. @@ -35,12 +35,12 @@ February 1, 1998: fixes for NetBSD to be September 4, 1999: assorted fixes for NetBSD 1.4+. -* Hannes Reinecke +* Hannes Reinecke Back in 1995, contributed code for linux. A new parser for file system specific options that only exist under linux. -* Leif Johansson +* Leif Johansson June 22, 1997: minor patch to ensure that systems without an RE library work. @@ -52,7 +52,7 @@ functions. Contributed scripts/amd2ldif August 4, 1997: info_ldap.c fixes and adding two new amd.conf ldap variables: ldap_cache_seconds and ldap_cache_maxmem. -* Andreas Stolcke +* Andreas Stolcke June 22, 1997: patches to ensure that proto= and vers= options work properly in mount tables and can be overridden. Later on, more code @@ -68,11 +68,11 @@ message. December 19, 1997: detected an FMR (Free Memory Read) in amd/mntfs.c, uninit_mntfs(). -* Danny Braniss +* Danny Braniss July, 6 1997: contributed patches to hesiod on bsdi3. -* Tom Schmidt +* Tom Schmidt July 10, 1997: Recommdation to include libgdbm if libc has no dbm_open. Patches for netgrp(host) command. Mods to aux/config.guess to recognize @@ -86,7 +86,7 @@ IFF_ROUTE instead of IFF_LOOPBACK. May 30, 2000: correct logging types for addopts/mergeopts messages. -* Daniel S. Riley +* Daniel S. Riley July 11, 1997: fixes to DU-4.0 to support string POSIX.1 signals, and struct sockaddr with sa_len field. @@ -99,15 +99,15 @@ grpid, nosuid, and actimo. August 15, 1998: fix memory leak in processing of /defaults, and avoid accessing uninitialized memory in osf1. -* Roman Hodek +* Roman Hodek July 23, 1997: Got lots of patches from the Debian Linux folks, who fixed several generic bugs, and one serious one for Linux. The latter involved using connected sockets for NFS mounts on kernels 1.3.10 and older. Roman's -work is baed on amd-upl102, and work from Ian Murdock -and Dominik Kubla . +work is baed on amd-upl102, and work from Ian Murdock +and Dominik Kubla . -* Rainer Orth +* Rainer Orth August 6, 1997: assorted fixes to support hesiod-1.3, solaris 2.4 (which I already fixed but did not release yet), and support for $LDFLAGS at @@ -132,34 +132,34 @@ mount tables in Solaris 8. February 9, 2000: new debug options hrtime (hi-res timer) and xdrtrace. bug fixes. -* Jason Thorpe +* Jason Thorpe August 25, 1997: make amd work when talking to NIS+ servers in NIS compatibility mode. Fix originally came from Matthieu Herrb -. +. -* Chris Metcalf +* Chris Metcalf August 29, 1997: patch to make amd use FQHN for NFS/RPC authentication, useful esp. for cross-domain NFS mounts. September 2, 1997: if plock() succeeded, don't display errno string. -* Enami Tsugutomo +* Enami Tsugutomo September 4, 1997: don't ping remote servers with NFS V.3 always, but V.2, regardless of client's NFS version. (conf/transp/transp_sockets.c) -* Dan Riley +* Dan Riley September 19, 1997: make sure that amd works with more secure portmappers that do not allow forwarding of RPC messages to other services. -* Wolfgang Rupprecht +* Wolfgang Rupprecht August 10, 1997: netbsd and other bsd systems have a mask flag for pcfs_args (msdos mount). -* Christos Zoulas +* Christos Zoulas September 25, 1997: fix to initialize uid/gid fields of pcfs_args_t on netbsd. @@ -181,7 +181,7 @@ TLI implementations. Patch to print ver options had been initialized, so we can print domain, host, and hostd. Linux patch to use umount2(2) if umount(2) fails. -* Bill Paul +* Bill Paul November 5, 1997: NFS v.3 support for AIX 4.2.1, which does *not* include headers for this. Bill had to guess at the right structures, field names, @@ -189,26 +189,26 @@ sizes, alignment, etc. January 15, 1999: small ldap bug fixes. -* Stefan Vogel +* Stefan Vogel November 14, 1997: typo in the subscription instructions to amd-dev. -* Guntram Wolski +* Guntram Wolski November 15, 1997: pointed out mismatching documentation for the -o option. -* Michael Hucka +* Michael Hucka January 11, 1997: pointed out reversed definition of NFS mount options vers and proto. -* Albert Chin +* Albert Chin January 12, 1998: minor bug in output of amd -H. June 23, 2005: assortment of small compile bugs on aix4, and solaris 5/6/7. -* Thomas Richter +* Thomas Richter January 13, 1998: use case insensitive comparisons for variables that need it (such as all hostname related ones, and more). @@ -216,11 +216,11 @@ it (such as all hostname related ones, a July 20, 1998: don't leak memory in the private version of yp_all (when vendor yp_all is bad). -* Fred Korz +* Fred Korz January 30, 1998: minor typo fixed to tftp example in am-utils.texi. -* Donald Buczek +* Donald Buczek March 6, 1998: correctly inherit existing NFS V.3 mounts upon restart. @@ -230,36 +230,36 @@ March 20, 1998: do not close stdout in c allow startup script to redirect it. Set a temporary secure umask(0022) before writing log file and restore it afterwards. -* Matthew Crosby +* Matthew Crosby April 20, 1998: allow arbitrary number of interfaces in wire listing. -* David O'Brien +* David O'Brien September 4, 1998: bug fix to avoid overrunning hostname buffer, and minor amd.conf man page typo correction. September 22, 1999: use more secure vsnprintf in real_plog(). -* Danny Rathjens +* Danny Rathjens October 29, 1998: swap arguments to kill(2) in amd.c. -* Mike Mitchell +* Mike Mitchell November 3, 1998: amd/nfs_subr.c (nfsproc_lookup_2_svc): try to avoid a race condition between unmounting and re-mounting an entry, by increasing the ttl of a looked up entry before unmounting it. -* Douglas K. Rand" +* Douglas K. Rand" December 3, 1998: case insensitive host name match for nfsl. -* David Wolfskill +* David Wolfskill January 28, 1999: don't turn on/off noconn option if it was already in that state. -* Jeffrey C Honig +* Jeffrey C Honig March 14, 1999: clean up more autogenerated files upon "make distclean". March 15, 1999: avoid overly verbose NIS warning even on systems that don't @@ -271,30 +271,30 @@ detection for bsdi4. September 17, 1999: fixes to expn. -* Paul Balyoz +* Paul Balyoz March 26, 1999: ensure lostaltmail displays Y2K compliant dates. -* Jon Peatfield +* Jon Peatfield March 30, 1999: turn off incomplete NFS V.3 support in HPUX 10.20. September 22, 1999: safe reloading of maps without first clearing old copies, and using cached copies if map failed to reload. -* Peter Breitenlohner +* Peter Breitenlohner July 24, 1999: patch for linux 2.2.x to work with older libc5 systems, and nis_isup mis-logic fixes. December 13, 2001: report typos in scripts/amd.conf.5. -* Dale Talcott +* Dale Talcott July 26, 1999: added NFS3 support for AIX mounting. -* Christophe Kalt +* Christophe Kalt July 14, 1999: add netgrpd() syntax function which uses FQHN. -* Andrew J. Korty +* Andrew J. Korty September 5, 1999: pawd works for type:=nfsl. -* Nick Williams +* Nick Williams September 1, 1999: bug fix for incorrect symlinks when two locations are requested simultaneously. @@ -306,38 +306,38 @@ doing rapid mounts and umounts in succes June 5, 2000: better handling of potential race-conditions during rapid u/mounts. Correctly update d_drops stats for amq -s. -* Johann Pfefferl +* Johann Pfefferl November 16, 1999: fix to ldap code so repeated calls to string2he don't corrupt the string passed. -* Amitha Perera +* Amitha Perera December 9, 1999: detect all wire() interfaces correctly. -* Steven Danz +* Steven Danz January 25, 2000: allow browsable auto maps. -* Wolfram Klaus . +* Wolfram Klaus . November 21, 2000: recognize proplist mnttab flag. -* Thomas Klausner +* Thomas Klausner November 21, 2000: lots of NetBSD fixes (many of which are generic). April 18, 2003: patch to reference am-utils info pages in man page. November 28, 2004: small fixes to typos in amd.conf(5) man page. -* Olaf Kirch +* Olaf Kirch February 1, 2001: important Linux NFS error number mapping fixed *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Sat Nov 19 16:23:55 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C4B37C4A9DC for ; Sat, 19 Nov 2016 16:23:55 +0000 (UTC) (envelope-from ae@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 mx1.freebsd.org (Postfix) with ESMTPS id 9683E391; Sat, 19 Nov 2016 16:23:55 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id uAJGNs59046828; Sat, 19 Nov 2016 16:23:54 GMT (envelope-from ae@FreeBSD.org) Received: (from ae@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uAJGNsWA046825; Sat, 19 Nov 2016 16:23:54 GMT (envelope-from ae@FreeBSD.org) Message-Id: <201611191623.uAJGNsWA046825@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ae set sender to ae@FreeBSD.org using -f From: "Andrey V. Elsukov" Date: Sat, 19 Nov 2016 16:23:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r308844 - projects/ipsec/sys/netipsec X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Nov 2016 16:23:55 -0000 Author: ae Date: Sat Nov 19 16:23:54 2016 New Revision: 308844 URL: https://svnweb.freebsd.org/changeset/base/308844 Log: Adjust key_debug code to produce more readably output. Add KEYDBG() macro that eventually will replace KEYDEBUG() macro. Add IPSEC_ADDRSTRLEN macro to specify maximum buffer size needed to format printable version of IP address used by IPsec. It is equal to INET6_ADDRSTRLEN + '%' + strlen(maximum value of sin6_scope_id). Modified: projects/ipsec/sys/netipsec/ipsec.h projects/ipsec/sys/netipsec/key_debug.c projects/ipsec/sys/netipsec/key_debug.h Modified: projects/ipsec/sys/netipsec/ipsec.h ============================================================================== --- projects/ipsec/sys/netipsec/ipsec.h Sat Nov 19 16:08:40 2016 (r308843) +++ projects/ipsec/sys/netipsec/ipsec.h Sat Nov 19 16:23:54 2016 (r308844) @@ -146,6 +146,9 @@ struct secspacq { }; #endif /* _KERNEL */ +/* buffer size for formatted output of ipsec address */ +#define IPSEC_ADDRSTRLEN (INET6_ADDRSTRLEN + 11) + /* according to IANA assignment, port 0x0000 and proto 0xff are reserved. */ #define IPSEC_PORT_ANY 0 #define IPSEC_ULPROTO_ANY 255 Modified: projects/ipsec/sys/netipsec/key_debug.c ============================================================================== --- projects/ipsec/sys/netipsec/key_debug.c Sat Nov 19 16:08:40 2016 (r308843) +++ projects/ipsec/sys/netipsec/key_debug.c Sat Nov 19 16:23:54 2016 (r308844) @@ -54,6 +54,7 @@ #include #ifdef _KERNEL #include +#include #endif #ifndef _KERNEL @@ -456,134 +457,219 @@ kdebug_sadb_x_policy(struct sadb_ext *ex #ifdef _KERNEL /* %%%: about SPD and SAD */ -void -kdebug_secpolicy(struct secpolicy *sp) +const char* +kdebug_secpolicy_state(u_int state) { - /* sanity check */ - if (sp == NULL) - panic("%s: NULL pointer was passed.\n", __func__); - printf("secpolicy{ refcnt=%u policy=%u\n", - sp->refcnt, sp->policy); + switch (state) { + case IPSEC_SPSTATE_DEAD: + return ("dead"); + case IPSEC_SPSTATE_LARVAL: + return ("larval"); + case IPSEC_SPSTATE_ALIVE: + return ("alive"); + case IPSEC_SPSTATE_PCB: + return ("pcb"); + case IPSEC_SPSTATE_IFNET: + return ("ifnet"); + } + return ("unknown"); +} - kdebug_secpolicyindex(&sp->spidx); +const char* +kdebug_secpolicy_policy(u_int policy) +{ - switch (sp->policy) { + switch (policy) { case IPSEC_POLICY_DISCARD: - printf(" type=discard }\n"); - break; + return ("discard"); case IPSEC_POLICY_NONE: - printf(" type=none }\n"); - break; + return ("none"); case IPSEC_POLICY_IPSEC: - { - struct ipsecrequest *isr; - for (isr = sp->req; isr != NULL; isr = isr->next) { - - printf(" level=%u\n", isr->level); - kdebug_secasindex(&isr->saidx); - - if (isr->sav != NULL) - kdebug_secasv(isr->sav); - } - printf(" }\n"); - } - break; - case IPSEC_POLICY_BYPASS: - printf(" type=bypass }\n"); - break; + return ("ipsec"); case IPSEC_POLICY_ENTRUST: - printf(" type=entrust }\n"); - break; - default: - printf("%s: Invalid policy found. %d\n", __func__, sp->policy); - break; + return ("entrust"); + case IPSEC_POLICY_BYPASS: + return ("bypass"); } - - return; + return ("unknown"); } -void -kdebug_secpolicyindex(struct secpolicyindex *spidx) +const char* +kdebug_secpolicyindex_dir(u_int dir) { - char buf[INET6_ADDRSTRLEN]; - /* sanity check */ - if (spidx == NULL) - panic("%s: NULL pointer was passed.\n", __func__); + switch (dir) { + case IPSEC_DIR_ANY: + return ("any"); + case IPSEC_DIR_INBOUND: + return ("in"); + case IPSEC_DIR_OUTBOUND: + return ("out"); + } + return ("unknown"); +} - printf("secpolicyindex{ dir=%u prefs=%u prefd=%u ul_proto=%u\n", - spidx->dir, spidx->prefs, spidx->prefd, spidx->ul_proto); +const char* +kdebug_ipsecrequest_level(u_int level) +{ - printf("%s -> ", ipsec_address(&spidx->src, buf, sizeof(buf))); - printf("%s }\n", ipsec_address(&spidx->dst, buf, sizeof(buf))); + switch (level) { + case IPSEC_LEVEL_DEFAULT: + return ("default"); + case IPSEC_LEVEL_USE: + return ("use"); + case IPSEC_LEVEL_REQUIRE: + return ("require"); + case IPSEC_LEVEL_UNIQUE: + return ("unique"); + } + return ("unknown"); } -void -kdebug_secasindex(struct secasindex *saidx) +const char* +kdebug_secasindex_mode(u_int mode) { - char buf[INET6_ADDRSTRLEN]; - /* sanity check */ - if (saidx == NULL) - panic("%s: NULL pointer was passed.\n", __func__); + switch (mode) { + case IPSEC_MODE_ANY: + return ("any"); + case IPSEC_MODE_TRANSPORT: + return ("transport"); + case IPSEC_MODE_TUNNEL: + return ("tunnel"); + case IPSEC_MODE_TCPMD5: + return ("tcp-md5"); + } + return ("unknown"); +} - printf("secasindex{ mode=%u proto=%u\n", - saidx->mode, saidx->proto); +const char* +kdebug_secasv_state(u_int state) +{ - printf("%s -> ", ipsec_address(&saidx->src, buf, sizeof(buf))); - printf("%s }\n", ipsec_address(&saidx->dst, buf, sizeof(buf))); + switch (state) { + case SADB_SASTATE_LARVAL: + return ("larval"); + case SADB_SASTATE_MATURE: + return ("mature"); + case SADB_SASTATE_DYING: + return ("dying"); + case SADB_SASTATE_DEAD: + return ("dead"); + } + return ("unknown"); } -static void -kdebug_sec_lifetime(struct seclifetime *lft) +static char* +kdebug_port2str(const struct sockaddr *sa, char *buf, size_t len) { - /* sanity check */ - if (lft == NULL) - panic("%s: NULL pointer was passed.\n", __func__); + uint16_t port; - printf("sec_lifetime{ alloc=%u, bytes=%u\n", - lft->allocations, (u_int32_t)lft->bytes); - printf(" addtime=%u, usetime=%u }\n", - (u_int32_t)lft->addtime, (u_int32_t)lft->usetime); + IPSEC_ASSERT(sa != NULL, ("null sa")); + switch (sa->sa_family) { +#ifdef INET + case AF_INET: + port = ntohs(((const struct sockaddr_in *)sa)->sin_port); + break; +#endif +#ifdef INET6 + case AF_INET6: + port = ntohs(((const struct sockaddr_in6 *)sa)->sin6_port); + break; +#endif + default: + port = 0; + } + if (port == 0) + return ("*"); + snprintf(buf, len, "%u", port); + return (buf); +} - return; +void +kdebug_secpolicy(struct secpolicy *sp) +{ + u_int idx; + + IPSEC_ASSERT(sp != NULL, ("null sp")); + printf("SP { refcnt=%u id=%u priority=%u state=%s policy=%s\n", + sp->refcnt, sp->id, sp->priority, + kdebug_secpolicy_state(sp->state), + kdebug_secpolicy_policy(sp->policy)); + kdebug_secpolicyindex(&sp->spidx, " "); + for (idx = 0; idx < sp->tcount; idx++) { + printf(" req[%u]{ level=%s ", idx, + kdebug_ipsecrequest_level(sp->req[idx]->level)); + kdebug_secasindex(&sp->req[idx]->saidx, NULL); + printf(" }\n"); + } + printf("}\n"); } void -kdebug_secasv(struct secasvar *sav) +kdebug_secpolicyindex(struct secpolicyindex *spidx, const char *indent) { - /* sanity check */ - if (sav == NULL) - panic("%s: NULL pointer was passed.\n", __func__); + char buf[IPSEC_ADDRSTRLEN]; - printf("secas{"); - kdebug_secasindex(&sav->sah->saidx); + IPSEC_ASSERT(spidx != NULL, ("null spidx")); + if (indent != NULL) + printf("%s", indent); + printf("spidx { dir=%s ul_proto=", + kdebug_secpolicyindex_dir(spidx->dir)); + if (spidx->ul_proto == IPSEC_ULPROTO_ANY) + printf("* "); + else + printf("%u ", spidx->ul_proto); + printf("%s/%u -> ", ipsec_address(&spidx->src, buf, sizeof(buf)), + spidx->prefs); + printf("%s/%u }\n", ipsec_address(&spidx->dst, buf, sizeof(buf)), + spidx->prefd); +} - printf(" refcnt=%u state=%u auth=%u enc=%u\n", - sav->refcnt, sav->state, sav->alg_auth, sav->alg_enc); - printf(" spi=%u flags=%u\n", - (u_int32_t)ntohl(sav->spi), sav->flags); +void +kdebug_secasindex(const struct secasindex *saidx, const char *indent) +{ + char buf[IPSEC_ADDRSTRLEN], port[6]; + + IPSEC_ASSERT(saidx != NULL, ("null saidx")); + if (indent != NULL) + printf("%s", indent); + printf("saidx { mode=%s proto=%u reqid=%u ", + kdebug_secasindex_mode(saidx->mode), saidx->proto, saidx->reqid); + printf("%s:%s -> ", ipsec_address(&saidx->src, buf, sizeof(buf)), + kdebug_port2str(&saidx->src.sa, port, sizeof(port))); + printf("%s:%s }\n", ipsec_address(&saidx->dst, buf, sizeof(buf)), + kdebug_port2str(&saidx->dst.sa, port, sizeof(port))); +} - if (sav->key_auth != NULL) - kdebug_sadb_key((struct sadb_ext *)sav->key_auth); - if (sav->key_enc != NULL) - kdebug_sadb_key((struct sadb_ext *)sav->key_enc); +static void +kdebug_sec_lifetime(struct seclifetime *lft, const char *indent) +{ - if (sav->replay != NULL) - kdebug_secreplay(sav->replay); - if (sav->lft_c != NULL) - kdebug_sec_lifetime(sav->lft_c); - if (sav->lft_h != NULL) - kdebug_sec_lifetime(sav->lft_h); - if (sav->lft_s != NULL) - kdebug_sec_lifetime(sav->lft_s); + IPSEC_ASSERT(lft != NULL, ("null lft")); + if (indent != NULL) + printf("%s", indent); + printf("lifetime { alloc=%u, bytes=%ju addtime=%ju usetime=%ju }\n", + lft->allocations, (uintmax_t)lft->bytes, (uintmax_t)lft->addtime, + (uintmax_t)lft->usetime); +} -#ifdef notyet - /* XXX: misc[123] ? */ -#endif +void +kdebug_secash(struct secashead *sah, const char *indent) +{ - return; + IPSEC_ASSERT(sah != NULL, ("null sah")); + if (indent != NULL) + printf("%s", indent); + printf("SAH { refcnt=%u state=%s\n", sah->refcnt, + kdebug_secasv_state(sah->state)); + if (indent != NULL) + printf("%s", indent); + kdebug_secasindex(&sah->saidx, indent); + if (indent != NULL) + printf("%s", indent); + printf("}\n"); } static void @@ -591,27 +677,60 @@ kdebug_secreplay(struct secreplay *rpl) { int len, l; - /* sanity check */ - if (rpl == NULL) - panic("%s: NULL pointer was passed.\n", __func__); - - printf(" secreplay{ count=%u wsize=%u seq=%u lastseq=%u", + IPSEC_ASSERT(rpl != NULL, ("null rpl")); + printf(" secreplay { count=%u wsize=%u seq=%u lastseq=%u", rpl->count, rpl->wsize, rpl->seq, rpl->lastseq); if (rpl->bitmap == NULL) { - printf(" }\n"); + printf(" }\n"); return; } - printf("\n bitmap { "); - + printf("\n bitmap { "); for (len = 0; len < rpl->wsize; len++) { for (l = 7; l >= 0; l--) printf("%u", (((rpl->bitmap)[len] >> l) & 1) ? 1 : 0); } - printf(" }\n"); + printf(" }\n"); +} - return; +void +kdebug_secasv(struct secasvar *sav) +{ + struct seclifetime lft_c; + + IPSEC_ASSERT(sav != NULL, ("null sav")); + + printf("SA { refcnt=%u spi=%u seq=%u pid=%u flags=0x%x state=%s\n", + sav->refcnt, ntohl(sav->spi), sav->seq, (uint32_t)sav->pid, + sav->flags, kdebug_secasv_state(sav->state)); + kdebug_secash(sav->sah, " "); + + lft_c.addtime = sav->created; + lft_c.allocations = (uint32_t)counter_u64_fetch( + sav->lft_c_allocations); + lft_c.bytes = counter_u64_fetch(sav->lft_c_bytes); + lft_c.usetime = sav->firstused; + kdebug_sec_lifetime(&lft_c, " c_"); + if (sav->lft_h != NULL) + kdebug_sec_lifetime(sav->lft_h, " h_"); + if (sav->lft_s != NULL) + kdebug_sec_lifetime(sav->lft_s, " s_"); + + if (sav->tdb_authalgxform != NULL) + printf(" alg_auth=%s\n", sav->tdb_authalgxform->name); + if (sav->key_auth != NULL) + KEYDBG(DUMP, + kdebug_sadb_key((struct sadb_ext *)sav->key_auth)); + if (sav->tdb_encalgxform != NULL) + printf(" alg_enc=%s\n", sav->tdb_encalgxform->name); + if (sav->key_enc != NULL) + KEYDBG(DUMP, + kdebug_sadb_key((struct sadb_ext *)sav->key_enc)); + if (sav->replay != NULL) + KEYDBG(DUMP, + kdebug_secreplay(sav->replay)); + printf("}\n"); } void Modified: projects/ipsec/sys/netipsec/key_debug.h ============================================================================== --- projects/ipsec/sys/netipsec/key_debug.h Sat Nov 19 16:08:40 2016 (r308843) +++ projects/ipsec/sys/netipsec/key_debug.h Sat Nov 19 16:23:54 2016 (r308844) @@ -53,10 +53,15 @@ #define KEYDEBUG_IPSEC_DATA (KEYDEBUG_IPSEC | KEYDEBUG_DATA) #define KEYDEBUG_IPSEC_DUMP (KEYDEBUG_IPSEC | KEYDEBUG_DUMP) +#define KEYDBG(lev, arg) \ + if ((V_key_debug_level & (KEYDEBUG_ ## lev)) == (KEYDEBUG_ ## lev)) { \ + arg; \ + } + #define KEYDEBUG(lev,arg) \ do { if ((V_key_debug_level & (lev)) == (lev)) { arg; } } while (0) -VNET_DECLARE(u_int32_t, key_debug_level); +VNET_DECLARE(uint32_t, key_debug_level); #define V_key_debug_level VNET(key_debug_level) #endif /*_KERNEL*/ @@ -69,15 +74,23 @@ extern void kdebug_sadb_x_policy(struct struct secpolicy; struct secpolicyindex; struct secasindex; +struct secashead; struct secasvar; struct secreplay; struct mbuf; -extern void kdebug_secpolicy(struct secpolicy *); -extern void kdebug_secpolicyindex(struct secpolicyindex *); -extern void kdebug_secasindex(struct secasindex *); -extern void kdebug_secasv(struct secasvar *); -extern void kdebug_mbufhdr(const struct mbuf *); -extern void kdebug_mbuf(const struct mbuf *); +const char* kdebug_secpolicy_state(u_int); +const char* kdebug_secpolicy_policy(u_int); +const char* kdebug_secpolicyindex_dir(u_int); +const char* kdebug_ipsecrequest_level(u_int); +const char* kdebug_secasindex_mode(u_int); +const char* kdebug_secasv_state(u_int); +void kdebug_secpolicy(struct secpolicy *); +void kdebug_secpolicyindex(struct secpolicyindex *, const char *); +void kdebug_secasindex(const struct secasindex *, const char *); +void kdebug_secash(struct secashead *, const char *); +void kdebug_secasv(struct secasvar *); +void kdebug_mbufhdr(const struct mbuf *); +void kdebug_mbuf(const struct mbuf *); #endif /*_KERNEL*/ struct sockaddr; From owner-svn-src-projects@freebsd.org Sat Nov 19 19:06:30 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D501FC4BA30 for ; Sat, 19 Nov 2016 19:06:30 +0000 (UTC) (envelope-from ae@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 mx1.freebsd.org (Postfix) with ESMTPS id A5354187; Sat, 19 Nov 2016 19:06:30 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id uAJJ6T2T030250; Sat, 19 Nov 2016 19:06:29 GMT (envelope-from ae@FreeBSD.org) Received: (from ae@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uAJJ6T5V030247; Sat, 19 Nov 2016 19:06:29 GMT (envelope-from ae@FreeBSD.org) Message-Id: <201611191906.uAJJ6T5V030247@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ae set sender to ae@FreeBSD.org using -f From: "Andrey V. Elsukov" Date: Sat, 19 Nov 2016 19:06:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r308861 - projects/ipsec/sys/netinet X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Nov 2016 19:06:30 -0000 Author: ae Date: Sat Nov 19 19:06:29 2016 New Revision: 308861 URL: https://svnweb.freebsd.org/changeset/base/308861 Log: Change ip_ipsec_output() to return only two values 0 and 1. It returns 1 when IPSec consumes mbuf or some fatal error occured. In case of error it frees mbuf. When no IPSec processing is required, it returns zero. Also change its prototype to take mbuf pointer, since we don't expect that mbuf can be changed, but not consumed. Add IPSEC_OUTPUT() wrapper macro to hide call to ip_ipsec_output(). I guess such interface will be used by IPsec module. Remove direction argument from ipsec4_checkpolicy(). This function is intended to use only with OUTBOUND traffic. Also change ipsec4_process_packet() to take security policy returned by ipsec4_checkpolicy() instead of accession to ipsecrequest. Add inpcb pointer to arguments list, it will be needed to update hdrsz field of struct inpcbpolicy. Modified: projects/ipsec/sys/netinet/ip_ipsec.c projects/ipsec/sys/netinet/ip_ipsec.h projects/ipsec/sys/netinet/ip_output.c Modified: projects/ipsec/sys/netinet/ip_ipsec.c ============================================================================== --- projects/ipsec/sys/netinet/ip_ipsec.c Sat Nov 19 18:19:21 2016 (r308860) +++ projects/ipsec/sys/netinet/ip_ipsec.c Sat Nov 19 19:06:29 2016 (r308861) @@ -145,19 +145,14 @@ ip_ipsec_mtu(struct mbuf *m, int mtu) } /* - * * Called from ip_output(). - * 1 = drop packet, 0 = continue processing packet, - * -1 = packet was reinjected and stop processing packet + * 0 = continue processing packet + * 1 = packet was consumed, stop processing */ int -ip_ipsec_output(struct mbuf **m, struct inpcb *inp, int *error) +ip_ipsec_output(struct mbuf *m, struct inpcb *inp, int *error) { struct secpolicy *sp; - - if (!key_havesp(IPSEC_DIR_OUTBOUND)) - return 0; - /* * Check the security policy (SP) for the packet and, if * required, do IPsec-related processing. There are two @@ -167,14 +162,13 @@ ip_ipsec_output(struct mbuf **m, struct * AH, ESP, etc. processing), there will be a tag to bypass * the lookup and related policy checking. */ - if (m_tag_find(*m, PACKET_TAG_IPSEC_OUT_DONE, NULL) != NULL) { - *error = 0; + *error = 0; + if (m_tag_find(m, PACKET_TAG_IPSEC_OUT_DONE, NULL) != NULL) return (0); - } - sp = ipsec4_checkpolicy(*m, IPSEC_DIR_OUTBOUND, error, inp); + sp = ipsec4_checkpolicy(m, inp, error); /* * There are four return cases: - * sp != NULL apply IPsec policy + * sp != NULL apply IPsec policy * sp == NULL, error == 0 no IPsec handling needed * sp == NULL, error == -EINVAL discard packet w/o error * sp == NULL, error != 0 discard packet, report error @@ -184,22 +178,21 @@ ip_ipsec_output(struct mbuf **m, struct * Do delayed checksums now because we send before * this is done in the normal processing path. */ - if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) { - in_delayed_cksum(*m); - (*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA; + if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA) { + in_delayed_cksum(m); + m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA; } #ifdef SCTP - if ((*m)->m_pkthdr.csum_flags & CSUM_SCTP) { - struct ip *ip = mtod(*m, struct ip *); + if (m->m_pkthdr.csum_flags & CSUM_SCTP) { + struct ip *ip = mtod(m, struct ip *); - sctp_delayed_cksum(*m, (uint32_t)(ip->ip_hl << 2)); - (*m)->m_pkthdr.csum_flags &= ~CSUM_SCTP; + sctp_delayed_cksum(m, (uint32_t)(ip->ip_hl << 2)); + m->m_pkthdr.csum_flags &= ~CSUM_SCTP; } #endif - /* NB: callee frees mbuf */ - *error = ipsec4_process_packet(*m, sp->req); - KEY_FREESP(&sp); + /* NB: callee frees mbuf and releases reference to SP */ + *error = ipsec4_process_packet(m, sp, inp); if (*error == EJUSTRETURN) { /* * We had a SP with a level of 'use' and no SA. We @@ -207,20 +200,10 @@ ip_ipsec_output(struct mbuf **m, struct * IPsec processing and return without error. */ *error = 0; - goto done; + return (0); } - /* - * Preserve KAME behaviour: ENOENT can be returned - * when an SA acquire is in progress. Don't propagate - * this to user-level; it confuses applications. - * - * XXX this will go away when the SADB is redone. - */ - if (*error == ENOENT) - *error = 0; - goto reinjected; + return (1); /* mbuf consumed by IPsec */ } else { /* sp == NULL */ - if (*error != 0) { /* * Hack: -EINVAL is used to signal that a packet @@ -230,16 +213,10 @@ ip_ipsec_output(struct mbuf **m, struct */ if (*error == -EINVAL) *error = 0; - goto bad; + m_freem(m); + return (1); } /* No IPsec processing for this packet. */ } -done: return (0); -reinjected: - return (-1); -bad: - if (sp != NULL) - KEY_FREESP(&sp); - return 1; } Modified: projects/ipsec/sys/netinet/ip_ipsec.h ============================================================================== --- projects/ipsec/sys/netinet/ip_ipsec.h Sat Nov 19 18:19:21 2016 (r308860) +++ projects/ipsec/sys/netinet/ip_ipsec.h Sat Nov 19 19:06:29 2016 (r308861) @@ -32,9 +32,11 @@ #ifndef _NETINET_IP_IPSEC_H_ #define _NETINET_IP_IPSEC_H_ +#define IPSEC_OUTPUT(sc, m, inp, perr) ip_ipsec_output((m), (inp), (perr)) + int ip_ipsec_filtertunnel(struct mbuf *); int ip_ipsec_fwd(struct mbuf *); int ip_ipsec_input(struct mbuf *, int); int ip_ipsec_mtu(struct mbuf *, int); -int ip_ipsec_output(struct mbuf **, struct inpcb *, int *); +int ip_ipsec_output(struct mbuf *, struct inpcb *, int *); #endif Modified: projects/ipsec/sys/netinet/ip_output.c ============================================================================== --- projects/ipsec/sys/netinet/ip_output.c Sat Nov 19 18:19:21 2016 (r308860) +++ projects/ipsec/sys/netinet/ip_output.c Sat Nov 19 19:06:29 2016 (r308861) @@ -556,15 +556,8 @@ again: sendit: #ifdef IPSEC - switch(ip_ipsec_output(&m, inp, &error)) { - case 1: - goto bad; - case -1: + if (IPSEC_OUTPUT(ipv4, m, inp, &error) != 0) goto done; - case 0: - default: - break; /* Continue with packet processing. */ - } /* * Check if there was a route for this packet; return error if not. */ From owner-svn-src-projects@freebsd.org Sat Nov 19 19:23:12 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EB49CC4BF1E for ; Sat, 19 Nov 2016 19:23:12 +0000 (UTC) (envelope-from ae@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 mx1.freebsd.org (Postfix) with ESMTPS id C57F5C09; Sat, 19 Nov 2016 19:23:12 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id uAJJNBEk037888; Sat, 19 Nov 2016 19:23:11 GMT (envelope-from ae@FreeBSD.org) Received: (from ae@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uAJJNB2i037885; Sat, 19 Nov 2016 19:23:11 GMT (envelope-from ae@FreeBSD.org) Message-Id: <201611191923.uAJJNB2i037885@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ae set sender to ae@FreeBSD.org using -f From: "Andrey V. Elsukov" Date: Sat, 19 Nov 2016 19:23:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r308862 - projects/ipsec/sys/netinet6 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Nov 2016 19:23:13 -0000 Author: ae Date: Sat Nov 19 19:23:11 2016 New Revision: 308862 URL: https://svnweb.freebsd.org/changeset/base/308862 Log: Change ip6_ipsec_output() to return only two values 0 and 1. It returns 1 when IPSec consumes mbuf or some fatal error occured. In case of error it frees mbuf. When no IPSec processing is required, it returns zero. Also change its prototype to take mbuf pointer, since we don't expect that mbuf can be changed, but not consumed. Add IPSEC_OUTPUT() wrapper macro to hide call to ip6_ipsec_output(). Add ipsec6_checkpolicy() function similar to ipsec4_checkpolicy(). Also change ipsec6_process_packet() to take security policy returned by ipsec6_checkpolicy() instead of accessing to ipsecrequest. Add inpcb pointer to arguments list, it will be needed to update hdrsz field of struct inpcbpolicy. Move IPSEC block to the top of ip6_output() to fix possible mbufs leak when IPv6 extension headers are present (MAKE_EXTHDR allocates mbufs). Modified: projects/ipsec/sys/netinet6/ip6_ipsec.c projects/ipsec/sys/netinet6/ip6_ipsec.h projects/ipsec/sys/netinet6/ip6_output.c Modified: projects/ipsec/sys/netinet6/ip6_ipsec.c ============================================================================== --- projects/ipsec/sys/netinet6/ip6_ipsec.c Sat Nov 19 19:06:29 2016 (r308861) +++ projects/ipsec/sys/netinet6/ip6_ipsec.c Sat Nov 19 19:23:11 2016 (r308862) @@ -141,15 +141,13 @@ ip6_ipsec_input(struct mbuf *m, int nxt) /* * Called from ip6_output(). - * 1 = drop packet, 0 = continue processing packet, - * -1 = packet was reinjected and stop processing packet + * 0 = continue processing packet + * 1 = packet was consumed, stop processing */ - int -ip6_ipsec_output(struct mbuf **m, struct inpcb *inp, int *error) +ip6_ipsec_output(struct mbuf *m, struct inpcb *inp, int *error) { struct secpolicy *sp; - /* * Check the security policy (SP) for the packet and, if * required, do IPsec-related processing. There are two @@ -159,11 +157,10 @@ ip6_ipsec_output(struct mbuf **m, struct * AH, ESP, etc. processing), there will be a tag to bypass * the lookup and related policy checking. */ - if (m_tag_find(*m, PACKET_TAG_IPSEC_OUT_DONE, NULL) != NULL) { - *error = 0; + *error = 0; + if (m_tag_find(m, PACKET_TAG_IPSEC_OUT_DONE, NULL) != NULL) return (0); - } - sp = ipsec4_checkpolicy(*m, IPSEC_DIR_OUTBOUND, error, inp); + sp = ipsec6_checkpolicy(m, inp, error); /* * There are four return cases: * sp != NULL apply IPsec policy @@ -177,46 +174,35 @@ ip6_ipsec_output(struct mbuf **m, struct * this is done in the normal processing path. */ #ifdef INET - if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) { - in_delayed_cksum(*m); - (*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA; + if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA) { + in_delayed_cksum(m); + m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA; } #endif - if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) { - in6_delayed_cksum(*m, (*m)->m_pkthdr.len - sizeof(struct ip6_hdr), - sizeof(struct ip6_hdr)); - (*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6; + if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) { + in6_delayed_cksum(m, m->m_pkthdr.len - + sizeof(struct ip6_hdr), sizeof(struct ip6_hdr)); + m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6; } #ifdef SCTP - 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; + 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; } #endif - /* NB: callee frees mbuf */ - *error = ipsec6_process_packet(*m, sp->req); - KEY_FREESP(&sp); + /* NB: callee frees mbuf and releases reference to SP */ + *error = ipsec6_process_packet(m, sp, inp); if (*error == EJUSTRETURN) { /* * We had a SP with a level of 'use' and no SA. We * will just continue to process the packet without - * IPsec processing. + * IPsec processing and return without error. */ *error = 0; - goto done; + return (0); } - - /* - * Preserve KAME behaviour: ENOENT can be returned - * when an SA acquire is in progress. Don't propagate - * this to user-level; it confuses applications. - * - * XXX this will go away when the SADB is redone. - */ - if (*error == ENOENT) - *error = 0; - goto reinjected; + return (1); /* mbuf consumed by IPsec */ } else { /* sp == NULL */ if (*error != 0) { /* @@ -227,18 +213,12 @@ ip6_ipsec_output(struct mbuf **m, struct */ if (*error == -EINVAL) *error = 0; - goto bad; + m_freem(m); + return (1); } /* No IPsec processing for this packet. */ } -done: return (0); -reinjected: - return (-1); -bad: - if (sp != NULL) - KEY_FREESP(&sp); - return (1); } #if 0 Modified: projects/ipsec/sys/netinet6/ip6_ipsec.h ============================================================================== --- projects/ipsec/sys/netinet6/ip6_ipsec.h Sat Nov 19 19:06:29 2016 (r308861) +++ projects/ipsec/sys/netinet6/ip6_ipsec.h Sat Nov 19 19:23:11 2016 (r308862) @@ -32,10 +32,12 @@ #ifndef _NETINET_IP6_IPSEC_H_ #define _NETINET_IP6_IPSEC_H_ +#define IPSEC_OUTPUT(sc, m, inp, perr) ip6_ipsec_output((m), (inp), (perr)) + int ip6_ipsec_filtertunnel(struct mbuf *); int ip6_ipsec_fwd(struct mbuf *); int ip6_ipsec_input(struct mbuf *, int); -int ip6_ipsec_output(struct mbuf **, struct inpcb *, int *); +int ip6_ipsec_output(struct mbuf *, struct inpcb *, int *); #if 0 int ip6_ipsec_mtu(struct mbuf *); #endif Modified: projects/ipsec/sys/netinet6/ip6_output.c ============================================================================== --- projects/ipsec/sys/netinet6/ip6_output.c Sat Nov 19 19:06:29 2016 (r308861) +++ projects/ipsec/sys/netinet6/ip6_output.c Sat Nov 19 19:23:11 2016 (r308862) @@ -335,6 +335,16 @@ ip6_output(struct mbuf *m0, struct ip6_p } } +#ifdef IPSEC + /* + * IPSec checking which handles several cases. + * FAST IPSEC: We re-injected the packet. + * XXX: need scope argument. + */ + if (IPSEC_OUTPUT(ipv6, m, inp, &error) != 0) + goto done; +#endif /* IPSEC */ + bzero(&exthdrs, sizeof(exthdrs)); if (opt) { /* Hop-by-Hop options header */ @@ -359,24 +369,6 @@ ip6_output(struct mbuf *m0, struct ip6_p MAKE_EXTHDR(opt->ip6po_dest2, &exthdrs.ip6e_dest2); } -#ifdef IPSEC - /* - * IPSec checking which handles several cases. - * FAST IPSEC: We re-injected the packet. - * XXX: need scope argument. - */ - switch(ip6_ipsec_output(&m, inp, &error)) - { - case 1: /* Bad packet */ - goto freehdrs; - case -1: /* IPSec done */ - goto done; - case 0: /* No IPSec */ - default: - break; - } -#endif /* IPSEC */ - /* * Calculate the total length of the extension header chain. * Keep the length of the unfragmentable part for fragmentation. From owner-svn-src-projects@freebsd.org Sat Nov 19 19:59:30 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8061AC4B8E5 for ; Sat, 19 Nov 2016 19:59:30 +0000 (UTC) (envelope-from ae@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 mx1.freebsd.org (Postfix) with ESMTPS id 4CCA6207; Sat, 19 Nov 2016 19:59:30 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id uAJJxTHZ050485; Sat, 19 Nov 2016 19:59:29 GMT (envelope-from ae@FreeBSD.org) Received: (from ae@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uAJJxThe050482; Sat, 19 Nov 2016 19:59:29 GMT (envelope-from ae@FreeBSD.org) Message-Id: <201611191959.uAJJxThe050482@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ae set sender to ae@FreeBSD.org using -f From: "Andrey V. Elsukov" Date: Sat, 19 Nov 2016 19:59:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r308864 - projects/ipsec/sys/netinet6 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Nov 2016 19:59:30 -0000 Author: ae Date: Sat Nov 19 19:59:28 2016 New Revision: 308864 URL: https://svnweb.freebsd.org/changeset/base/308864 Log: Add ip6_ipsec_forward() function and call it from ip6_forward(). This function is inteded to check inbound and outbound security policies for forwarded packet. If inbound policy doesn't discard packet, then we check outbound policy. Since we act as router, we can apply only tunnel mode IPsec to forwarded traffic (with transport mode we will not receive responces from partner). So, if matched outbound policy has tunnel mode transform, we can handle packet with IPsec. And this packet will be consumed by ipsec6_process_packet(). Thus all logic related to IPsec and MTU calculation in ip6_forward() is just dead code. Remove ip[6]_ipsec_fwd() and all code with deep IPsec knowledge logic from ip6_forward(). Use ip6_ipsec_forward() instead. Also add IPSEC_FORWARD() wrapper macro. Modified: projects/ipsec/sys/netinet6/ip6_forward.c projects/ipsec/sys/netinet6/ip6_ipsec.c projects/ipsec/sys/netinet6/ip6_ipsec.h Modified: projects/ipsec/sys/netinet6/ip6_forward.c ============================================================================== --- projects/ipsec/sys/netinet6/ip6_forward.c Sat Nov 19 19:25:38 2016 (r308863) +++ projects/ipsec/sys/netinet6/ip6_forward.c Sat Nov 19 19:59:28 2016 (r308864) @@ -71,9 +71,6 @@ __FBSDID("$FreeBSD$"); #ifdef IPSEC #include -#include -#include -#include #endif /* IPSEC */ /* @@ -100,9 +97,6 @@ ip6_forward(struct mbuf *m, int srcrt) struct ifnet *origifp; /* maybe unnecessary */ u_int32_t inzone, outzone; struct in6_addr src_in6, dst_in6, odst; -#ifdef IPSEC - struct secpolicy *sp = NULL; -#endif struct m_tag *fwd_tag; char ip6bufs[INET6_ADDRSTRLEN], ip6bufd[INET6_ADDRSTRLEN]; @@ -130,32 +124,17 @@ ip6_forward(struct mbuf *m, int srcrt) m_freem(m); return; } -#ifdef IPSEC - /* - * Check if this packet has an active SA and needs to be dropped - * instead of forwarded. - */ - if (ip6_ipsec_fwd(m) != 0) { - IP6STAT_INC(ip6s_cantforward); - m_freem(m); - return; - } -#endif /* IPSEC */ + if ( #ifdef IPSTEALTH - if (!V_ip6stealth) { + V_ip6stealth == 0 && #endif - if (ip6->ip6_hlim <= IPV6_HLIMDEC) { + ip6->ip6_hlim <= IPV6_HLIMDEC) { /* XXX in6_ifstat_inc(rt->rt_ifp, ifs6_in_discard) */ icmp6_error(m, ICMP6_TIME_EXCEEDED, - ICMP6_TIME_EXCEED_TRANSIT, 0); + ICMP6_TIME_EXCEED_TRANSIT, 0); return; } - ip6->ip6_hlim -= IPV6_HLIMDEC; - -#ifdef IPSTEALTH - } -#endif /* * Save at most ICMPV6_PLD_MAXLEN (= the min IPv6 MTU - @@ -168,167 +147,27 @@ ip6_forward(struct mbuf *m, int srcrt) */ mcopy = m_copym(m, 0, imin(m->m_pkthdr.len, ICMPV6_PLD_MAXLEN), M_NOWAIT); - -#ifdef IPSEC - /* get a security policy for this packet */ - sp = ipsec_getpolicybyaddr(m, IPSEC_DIR_OUTBOUND, &error); - if (sp == NULL) { - IPSEC6STAT_INC(ips_out_inval); - IP6STAT_INC(ip6s_cantforward); - if (mcopy) { -#if 0 - /* XXX: what icmp ? */ -#else - m_freem(mcopy); +#ifdef IPSTEALTH + if (V_ip6stealth == 0) #endif - } - m_freem(m); - return; - } + ip6->ip6_hlim -= IPV6_HLIMDEC; - error = 0; - - /* check policy */ - switch (sp->policy) { - case IPSEC_POLICY_DISCARD: - /* - * This packet is just discarded. - */ - IPSEC6STAT_INC(ips_out_polvio); - IP6STAT_INC(ip6s_cantforward); - KEY_FREESP(&sp); - if (mcopy) { -#if 0 - /* XXX: what icmp ? */ -#else - m_freem(mcopy); -#endif - } - m_freem(m); +#ifdef IPSEC + if (IPSEC_FORWARD(ipv6, m, &error) != 0) { + /* mbuf consumed by IPsec */ + m_freem(mcopy); return; - - case IPSEC_POLICY_BYPASS: - case IPSEC_POLICY_NONE: - /* no need to do IPsec. */ - KEY_FREESP(&sp); - goto skip_ipsec; - - case IPSEC_POLICY_IPSEC: - if (sp->req == NULL) { - /* XXX should be panic ? */ - printf("ip6_forward: No IPsec request specified.\n"); - IP6STAT_INC(ip6s_cantforward); - KEY_FREESP(&sp); - if (mcopy) { -#if 0 - /* XXX: what icmp ? */ -#else - m_freem(mcopy); -#endif - } - m_freem(m); - return; - } - /* do IPsec */ - break; - - case IPSEC_POLICY_ENTRUST: - default: - /* should be panic ?? */ - printf("ip6_forward: Invalid policy found. %d\n", sp->policy); - KEY_FREESP(&sp); - goto skip_ipsec; } - - { - struct ipsecrequest *isr = NULL; - - /* - * when the kernel forwards a packet, it is not proper to apply - * IPsec transport mode to the packet. This check avoid from this. - * at present, if there is even a transport mode SA request in the - * security policy, the kernel does not apply IPsec to the packet. - * this check is not enough because the following case is valid. - * ipsec esp/tunnel/xxx-xxx/require esp/transport//require; - */ - for (isr = sp->req; isr; isr = isr->next) { - if (isr->saidx.mode == IPSEC_MODE_ANY) - goto doipsectunnel; - if (isr->saidx.mode == IPSEC_MODE_TUNNEL) - goto doipsectunnel; - } - - /* - * if there's no need for tunnel mode IPsec, skip. - */ - if (!isr) - goto skip_ipsec; - - doipsectunnel: - /* - * All the extension headers will become inaccessible - * (since they can be encrypted). - * Don't panic, we need no more updates to extension headers - * on inner IPv6 packet (since they are now encapsulated). - * - * IPv6 [ESP|AH] IPv6 [extension headers] payload - */ - /* - * If we need to encapsulate the packet, do it here - * ipsec6_proces_packet will send the packet using ip6_output + * mbuf wasn't consumed by IPsec, check error code. */ - error = ipsec6_process_packet(m, sp->req); - /* Release SP if an error occurred */ - if (error != 0) - KEY_FREESP(&sp); - if (error == EJUSTRETURN) { - /* - * We had a SP with a level of 'use' and no SA. We - * will just continue to process the packet without - * IPsec processing. - */ - error = 0; - goto skip_ipsec; - } - - if (error) { - /* mbuf is already reclaimed in ipsec6_process_packet. */ - switch (error) { - case EHOSTUNREACH: - case ENETUNREACH: - case EMSGSIZE: - case ENOBUFS: - case ENOMEM: - break; - default: - printf("ip6_output (ipsec): error code %d\n", error); - /* FALLTHROUGH */ - case ENOENT: - /* don't show these error codes to the user */ - break; - } + if (error != 0) { IP6STAT_INC(ip6s_cantforward); - if (mcopy) { -#if 0 - /* XXX: what icmp ? */ -#else - m_freem(mcopy); -#endif - } + m_freem(mcopy); + m_freem(m); return; - } else { - /* - * In the FAST IPSec case we have already - * re-injected the packet and it has been freed - * by the ipsec_done() function. So, just clean - * up after ourselves. - */ - m = NULL; - goto freecopy; } - } -skip_ipsec: + /* No IPsec processing required */ #endif again: bzero(&rin6, sizeof(struct route_in6)); @@ -540,34 +379,9 @@ pass: /* See if the size was changed by the packet filter. */ if (m->m_pkthdr.len > IN6_LINKMTU(rt->rt_ifp)) { in6_ifstat_inc(rt->rt_ifp, ifs6_in_toobig); - if (mcopy) { - u_long mtu; -#ifdef IPSEC - size_t ipsechdrsiz; -#endif /* IPSEC */ - - mtu = IN6_LINKMTU(rt->rt_ifp); -#ifdef IPSEC - /* - * When we do IPsec tunnel ingress, we need to play - * with the link value (decrement IPsec header size - * from mtu value). The code is much simpler than v4 - * case, as we have the outgoing interface for - * encapsulated packet as "rt->rt_ifp". - */ - ipsechdrsiz = ipsec_hdrsiz(mcopy, IPSEC_DIR_OUTBOUND, - NULL); - if (ipsechdrsiz < mtu) - mtu -= ipsechdrsiz; - /* - * if mtu becomes less than minimum MTU, - * tell minimum MTU (and I'll need to fragment it). - */ - if (mtu < IPV6_MMTU) - mtu = IPV6_MMTU; -#endif /* IPSEC */ - icmp6_error(mcopy, ICMP6_PACKET_TOO_BIG, 0, mtu); - } + if (mcopy) + icmp6_error(mcopy, ICMP6_PACKET_TOO_BIG, 0, + IN6_LINKMTU(rt->rt_ifp)); goto bad; } Modified: projects/ipsec/sys/netinet6/ip6_ipsec.c ============================================================================== --- projects/ipsec/sys/netinet6/ip6_ipsec.c Sat Nov 19 19:25:38 2016 (r308863) +++ projects/ipsec/sys/netinet6/ip6_ipsec.c Sat Nov 19 19:59:28 2016 (r308864) @@ -106,19 +106,6 @@ ip6_ipsec_filtertunnel(struct mbuf *m) } /* - * Check if this packet has an active SA and needs to be dropped instead - * of forwarded. - * Called from ip6_forward(). - * 1 = drop packet, 0 = forward packet. - */ -int -ip6_ipsec_fwd(struct mbuf *m) -{ - - return (ipsec6_in_reject(m, NULL)); -} - -/* * Check if protocol type doesn't have a further header and do IPSEC * decryption or reject right now. Protocols with further headers get * their IPSEC treatment within the protocol specific processing. @@ -221,53 +208,84 @@ ip6_ipsec_output(struct mbuf *m, struct return (0); } -#if 0 /* - * Compute the MTU for a forwarded packet that gets IPSEC encapsulated. - * Called from ip_forward(). - * Returns MTU suggestion for ICMP needfrag reply. + * Called from ip6_forward(). + * 1 = drop packet, 0 = forward packet. */ int -ip6_ipsec_mtu(struct mbuf *m) +ip6_ipsec_forward(struct mbuf *m, int *error) { - int mtu = 0; + struct secpolicy *sp; + int idx; + /* - * If the packet is routed over IPsec tunnel, tell the - * originator the tunnel MTU. - * tunnel MTU = if MTU - sizeof(IP) - ESP/AH hdrsiz - * XXX quickhack!!! - */ -#ifdef IPSEC - struct secpolicy *sp = NULL; - int ipsecerror; - int ipsechdr; - struct route *ro; - sp = ipsec_getpolicybyaddr(m, - IPSEC_DIR_OUTBOUND, - IP_FORWARDING, - &ipsecerror); + * Check if this packet has an active inbound SP and needs to be + * dropped instead of forwarded. + */ + if (ipsec6_in_reject(m, NULL) != 0) { + *error = EACCES; + return (0); + } + /* + * Now check outbound SP. + */ + sp = ipsec6_checkpolicy(m, NULL, error); + /* + * There are four return cases: + * sp != NULL apply IPsec policy + * sp == NULL, error == 0 no IPsec handling needed + * sp == NULL, error == -EINVAL discard packet w/o error + * sp == NULL, error != 0 discard packet, report error + */ if (sp != NULL) { - /* count IPsec header size */ - ipsechdr = ipsec_hdrsiz(m, IPSEC_DIR_OUTBOUND, NULL); - /* - * find the correct route for outer IPv4 - * header, compute tunnel MTU. + * We have SP with IPsec transform, but we should check that + * it has tunnel mode request, because we can't use transport + * mode when forwarding. + * + * RFC2473 says: + * "A tunnel IPv6 packet resulting from the encapsulation of + * an original packet is considered an IPv6 packet originating + * from the tunnel entry-point node." + * So, we don't need MTU checking, after IPsec processing + * we will just fragment it if needed. */ - if (sp->req != NULL && - sp->req->sav != NULL && - sp->req->sav->sah != NULL) { - ro = &sp->req->sav->sah->route_cache.sa_route; - if (ro->ro_rt && ro->ro_rt->rt_ifp) { - mtu = ro->ro_rt->rt_mtu ? ro->ro_rt->rt_mtu : - ro->ro_rt->rt_ifp->if_mtu; - mtu -= ipsechdr; - } + for (idx = 0; idx < sp->tcount; idx++) { + if (sp->req[idx]->saidx.mode == IPSEC_MODE_TUNNEL) + break; + } + if (idx == sp->tcount) { + *error = EACCES; + IPSEC6STAT_INC(ips_out_inval); + key_freesp(&sp); + return (0); } - KEY_FREESP(&sp); + /* NB: callee frees mbuf and releases reference to SP */ + *error = ipsec6_process_packet(m, sp, NULL); + if (*error == EJUSTRETURN) { + /* + * We had a SP with a level of 'use' and no SA. We + * will just continue to process the packet without + * IPsec processing and return without error. + */ + *error = 0; + return (0); + } + return (1); /* mbuf consumed by IPsec */ + } else { /* sp == NULL */ + if (*error != 0) { + /* + * Hack: -EINVAL is used to signal that a packet + * should be silently discarded. This is typically + * because we asked key management for an SA and + * it was delayed (e.g. kicked up to IKE). + */ + if (*error == -EINVAL) + *error = 0; + m_freem(m); + return (1); + } + /* No IPsec processing for this packet. */ } -#endif /* IPSEC */ - /* XXX else case missing. */ - return mtu; + return (0); } -#endif Modified: projects/ipsec/sys/netinet6/ip6_ipsec.h ============================================================================== --- projects/ipsec/sys/netinet6/ip6_ipsec.h Sat Nov 19 19:25:38 2016 (r308863) +++ projects/ipsec/sys/netinet6/ip6_ipsec.h Sat Nov 19 19:59:28 2016 (r308864) @@ -32,13 +32,11 @@ #ifndef _NETINET_IP6_IPSEC_H_ #define _NETINET_IP6_IPSEC_H_ +#define IPSEC_FORWARD(sc, m, perr) ip6_ipsec_forward((m), (perr)) #define IPSEC_OUTPUT(sc, m, inp, perr) ip6_ipsec_output((m), (inp), (perr)) int ip6_ipsec_filtertunnel(struct mbuf *); -int ip6_ipsec_fwd(struct mbuf *); int ip6_ipsec_input(struct mbuf *, int); +int ip6_ipsec_forward(struct mbuf *, int *); int ip6_ipsec_output(struct mbuf *, struct inpcb *, int *); -#if 0 -int ip6_ipsec_mtu(struct mbuf *); -#endif #endif From owner-svn-src-projects@freebsd.org Sat Nov 19 21:05:18 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 44914C4BA0F for ; Sat, 19 Nov 2016 21:05: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 mx1.freebsd.org (Postfix) with ESMTPS id 16D7990E; Sat, 19 Nov 2016 21:05: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 uAJL5Hud078208; Sat, 19 Nov 2016 21:05:17 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uAJL5HM8078207; Sat, 19 Nov 2016 21:05:17 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201611192105.uAJL5HM8078207@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sat, 19 Nov 2016 21:05:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r308867 - projects/clang390-import/contrib/llvm/lib/Target/X86 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Nov 2016 21:05:18 -0000 Author: dim Date: Sat Nov 19 21:05:17 2016 New Revision: 308867 URL: https://svnweb.freebsd.org/changeset/base/308867 Log: Work around LLVM PR30879, which is about a bad interaction between X86 Call Frame Optimization on i386 and libunwind, by disallowing the optimization for i386-freebsd12. This should fix some instances of broken exception handling when frame pointers are omitted, in particular some unittests run during the build of editors/libreoffice. This hack will be removed as soon as upstream has implemented a more permanent fix for this problem. Upstream PR: https://llvm.org/bugs/show_bug.cgi?id=30879 Reviewed by: emaste PR: 212343 Modified: projects/clang390-import/contrib/llvm/lib/Target/X86/X86CallFrameOptimization.cpp Modified: projects/clang390-import/contrib/llvm/lib/Target/X86/X86CallFrameOptimization.cpp ============================================================================== --- projects/clang390-import/contrib/llvm/lib/Target/X86/X86CallFrameOptimization.cpp Sat Nov 19 20:03:59 2016 (r308866) +++ projects/clang390-import/contrib/llvm/lib/Target/X86/X86CallFrameOptimization.cpp Sat Nov 19 21:05:17 2016 (r308867) @@ -125,6 +125,11 @@ bool X86CallFrameOptimization::isLegal(M if (NoX86CFOpt.getValue()) return false; + // Work around LLVM PR30879 (bad interaction between CFO and libunwind) + if (STI->isTargetFreeBSD() && STI->is32Bit() && + STI->getTargetTriple().getOSMajorVersion() >= 12) + return false; + // We can't encode multiple DW_CFA_GNU_args_size or DW_CFA_def_cfa_offset // in the compact unwind encoding that Darwin uses. So, bail if there // is a danger of that being generated. From owner-svn-src-projects@freebsd.org Sat Nov 19 21:10:49 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 046B1C4BAAB for ; Sat, 19 Nov 2016 21:10:49 +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 mx1.freebsd.org (Postfix) with ESMTPS id 8F4A7ADA; Sat, 19 Nov 2016 21:10: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 uAJLAlOP078492; Sat, 19 Nov 2016 21:10:47 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uAJLAktp078482; Sat, 19 Nov 2016 21:10:46 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201611192110.uAJLAktp078482@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sat, 19 Nov 2016 21:10:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r308868 - in projects/clang390-import: bin/dd sbin/nvmecontrol sys/boot/i386/libi386 sys/conf sys/dev/nvme sys/mips/atheros/ar531x sys/mips/broadcom sys/mips/conf sys/mips/include sys/m... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Nov 2016 21:10:49 -0000 Author: dim Date: Sat Nov 19 21:10:46 2016 New Revision: 308868 URL: https://svnweb.freebsd.org/changeset/base/308868 Log: Merge ^/head r308842 through r308867. Added: projects/clang390-import/sys/mips/conf/CANNA - copied unchanged from r308867, head/sys/mips/conf/CANNA projects/clang390-import/sys/mips/conf/CI20 - copied unchanged from r308867, head/sys/mips/conf/CI20 projects/clang390-import/sys/mips/conf/JZ4780 - copied unchanged from r308867, head/sys/mips/conf/JZ4780 projects/clang390-import/sys/mips/conf/JZ4780.hints - copied unchanged from r308867, head/sys/mips/conf/JZ4780.hints projects/clang390-import/sys/mips/conf/X1000 - copied unchanged from r308867, head/sys/mips/conf/X1000 projects/clang390-import/sys/mips/conf/X1000.hints - copied unchanged from r308867, head/sys/mips/conf/X1000.hints projects/clang390-import/sys/mips/ingenic/ - copied from r308867, head/sys/mips/ingenic/ Modified: projects/clang390-import/bin/dd/dd.c projects/clang390-import/sbin/nvmecontrol/logpage.c projects/clang390-import/sys/boot/i386/libi386/smbios.c projects/clang390-import/sys/conf/files.mips projects/clang390-import/sys/conf/options.mips projects/clang390-import/sys/dev/nvme/nvme.h projects/clang390-import/sys/mips/atheros/ar531x/files.ar5315 projects/clang390-import/sys/mips/broadcom/files.broadcom projects/clang390-import/sys/mips/include/cache.h projects/clang390-import/sys/mips/mediatek/files.mediatek projects/clang390-import/sys/mips/mips/busdma_machdep.c projects/clang390-import/sys/mips/mips/cache_mipsNN.c projects/clang390-import/sys/mips/mips/exception.S Directory Properties: projects/clang390-import/ (props changed) Modified: projects/clang390-import/bin/dd/dd.c ============================================================================== --- projects/clang390-import/bin/dd/dd.c Sat Nov 19 21:05:17 2016 (r308867) +++ projects/clang390-import/bin/dd/dd.c Sat Nov 19 21:10:46 2016 (r308868) @@ -48,13 +48,10 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include -#include #include -#include #include #include #include @@ -95,10 +92,6 @@ main(int argc __unused, char *argv[]) jcl(argv); setup(); - caph_cache_catpages(); - if (cap_enter() == -1 && errno != ENOSYS) - err(1, "unable to enter capability mode"); - (void)signal(SIGINFO, siginfo_handler); (void)signal(SIGINT, terminate); @@ -132,8 +125,6 @@ static void setup(void) { u_int cnt; - cap_rights_t rights; - unsigned long cmds[] = { FIODTYPE, MTIOCTOP }; if (in.name == NULL) { in.name = "stdin"; @@ -142,20 +133,13 @@ setup(void) in.fd = open(in.name, O_RDONLY, 0); if (in.fd == -1) err(1, "%s", in.name); - if (caph_limit_stdin() == -1) - err(1, "unable to limit capability rights"); } getfdtype(&in); - cap_rights_init(&rights, CAP_READ, CAP_SEEK); - if (cap_rights_limit(in.fd, &rights) == -1 && errno != ENOSYS) - err(1, "unable to limit capability rights"); - if (files_cnt > 1 && !(in.flags & ISTAPE)) errx(1, "files is not supported for non-tape devices"); - cap_rights_set(&rights, CAP_WRITE, CAP_FTRUNCATE, CAP_IOCTL); if (out.name == NULL) { /* No way to check for read access here. */ out.fd = STDOUT_FILENO; @@ -172,27 +156,13 @@ setup(void) if (out.fd == -1) { out.fd = open(out.name, O_WRONLY | OFLAGS, DEFFILEMODE); out.flags |= NOREAD; - cap_rights_clear(&rights, CAP_READ); } if (out.fd == -1) err(1, "%s", out.name); - if (caph_limit_stdout() == -1) - err(1, "unable to limit capability rights"); } getfdtype(&out); - if (cap_rights_limit(out.fd, &rights) == -1 && errno != ENOSYS) - err(1, "unable to limit capability rights"); - if (cap_ioctls_limit(out.fd, cmds, nitems(cmds)) == -1 && - errno != ENOSYS) - err(1, "unable to limit capability rights"); - - if (in.fd != STDERR_FILENO && out.fd != STDERR_FILENO) { - if (caph_limit_stderr() == -1) - err(1, "unable to limit capability rights"); - } - /* * Allocate space for the input and output buffers. If not doing * record oriented I/O, only need a single buffer. Modified: projects/clang390-import/sbin/nvmecontrol/logpage.c ============================================================================== --- projects/clang390-import/sbin/nvmecontrol/logpage.c Sat Nov 19 21:05:17 2016 (r308867) +++ projects/clang390-import/sbin/nvmecontrol/logpage.c Sat Nov 19 21:10:46 2016 (r308868) @@ -42,6 +42,11 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include + +#if _BYTE_ORDER != _LITTLE_ENDIAN +#error "Code only works on little endian machines" +#endif #include "nvmecontrol.h" @@ -50,6 +55,65 @@ __FBSDID("$FreeBSD$"); typedef void (*print_fn_t)(void *buf, uint32_t size); +struct kv_name +{ + uint32_t key; + const char *name; +}; + +static const char * +kv_lookup(const struct kv_name *kv, size_t kv_count, uint32_t key) +{ + static char bad[32]; + size_t i; + + for (i = 0; i < kv_count; i++, kv++) + if (kv->key == key) + return kv->name; + snprintf(bad, sizeof(bad), "Attribute %#x", key); + return bad; +} + +/* + * 128-bit integer augments to standard values + */ +#define UINT128_DIG 39 +typedef __uint128_t uint128_t; + +static inline uint128_t +to128(void *p) +{ + return *(uint128_t *)p; +} + +static char * +uint128_to_str(uint128_t u, char *buf, size_t buflen) +{ + char *end = buf + buflen - 1; + + *end-- = '\0'; + if (u == 0) + *end-- = '0'; + while (u && end >= buf) { + *end-- = u % 10 + '0'; + u /= 10; + } + end++; + if (u != 0) + return NULL; + + return end; +} + +/* "fMissing" from endian.h */ +static __inline uint64_t +le48dec(const void *pp) +{ + uint8_t const *p = (uint8_t const *)pp; + + return (((uint64_t)le16dec(p + 4) << 32) | le32dec(p)); +} + static void * get_log_buffer(uint32_t size) { @@ -63,7 +127,7 @@ get_log_buffer(uint32_t size) } void -read_logpage(int fd, uint8_t log_page, int nsid, void *payload, +read_logpage(int fd, uint8_t log_page, int nsid, void *payload, uint32_t payload_size) { struct nvme_pt_command pt; @@ -125,9 +189,18 @@ print_log_error(void *buf, uint32_t size } static void +print_temp(uint16_t t) +{ + printf("%u K, %2.2f C, %3.2f F\n", t, (float)t - 273.15, (float)t * 9 / 5 - 459.67); +} + + +static void print_log_health(void *buf, uint32_t size __unused) { struct nvme_health_information_page *health = buf; + char cbuf[UINT128_DIG + 1]; + int i; printf("SMART/Health Information Log\n"); printf("============================\n"); @@ -144,10 +217,8 @@ print_log_health(void *buf, uint32_t siz health->critical_warning.bits.read_only); printf(" Volatile memory backup: %d\n", health->critical_warning.bits.volatile_memory_backup); - printf("Temperature: %u K, %2.2f C, %3.2f F\n", - health->temperature, - (float)health->temperature - (float)273.15, - ((float)health->temperature * (float)9/5) - (float)459.67); + printf("Temperature: "); + print_temp(health->temperature); printf("Available spare: %u\n", health->available_spare); printf("Available spare threshold: %u\n", @@ -155,40 +226,35 @@ print_log_health(void *buf, uint32_t siz printf("Percentage used: %u\n", health->percentage_used); - /* - * TODO: These are pretty ugly in hex. Is there a library that - * will convert 128-bit unsigned values to decimal? - */ - printf("Data units (512 byte) read: 0x%016jx%016jx\n", - health->data_units_read[1], - health->data_units_read[0]); - printf("Data units (512 byte) written: 0x%016jx%016jx\n", - health->data_units_written[1], - health->data_units_written[0]); - printf("Host read commands: 0x%016jx%016jx\n", - health->host_read_commands[1], - health->host_read_commands[0]); - printf("Host write commands: 0x%016jx%016jx\n", - health->host_write_commands[1], - health->host_write_commands[0]); - printf("Controller busy time (minutes): 0x%016jx%016jx\n", - health->controller_busy_time[1], - health->controller_busy_time[0]); - printf("Power cycles: 0x%016jx%016jx\n", - health->power_cycles[1], - health->power_cycles[0]); - printf("Power on hours: 0x%016jx%016jx\n", - health->power_on_hours[1], - health->power_on_hours[0]); - printf("Unsafe shutdowns: 0x%016jx%016jx\n", - health->unsafe_shutdowns[1], - health->unsafe_shutdowns[0]); - printf("Media errors: 0x%016jx%016jx\n", - health->media_errors[1], - health->media_errors[0]); - printf("No. error info log entries: 0x%016jx%016jx\n", - health->num_error_info_log_entries[1], - health->num_error_info_log_entries[0]); + printf("Data units (512,000 byte) read: %s\n", + uint128_to_str(to128(health->data_units_read), cbuf, sizeof(cbuf))); + printf("Data units written: %s\n", + uint128_to_str(to128(health->data_units_written), cbuf, sizeof(cbuf))); + printf("Host read commands: %s\n", + uint128_to_str(to128(health->host_read_commands), cbuf, sizeof(cbuf))); + printf("Host write commands: %s\n", + uint128_to_str(to128(health->host_write_commands), cbuf, sizeof(cbuf))); + printf("Controller busy time (minutes): %s\n", + uint128_to_str(to128(health->controller_busy_time), cbuf, sizeof(cbuf))); + printf("Power cycles: %s\n", + uint128_to_str(to128(health->power_cycles), cbuf, sizeof(cbuf))); + printf("Power on hours: %s\n", + uint128_to_str(to128(health->power_on_hours), cbuf, sizeof(cbuf))); + printf("Unsafe shutdowns: %s\n", + uint128_to_str(to128(health->unsafe_shutdowns), cbuf, sizeof(cbuf))); + printf("Media errors: %s\n", + uint128_to_str(to128(health->media_errors), cbuf, sizeof(cbuf))); + printf("No. error info log entries: %s\n", + uint128_to_str(to128(health->num_error_info_log_entries), cbuf, sizeof(cbuf))); + + printf("Warning Temp Composite Time: %d\n", health->warning_temp_time); + printf("Error Temp Composite Time: %d\n", health->error_temp_time); + for (i = 0; i < 7; i++) { + if (health->temp_sensor[i] == 0) + continue; + printf("Temperature Sensor %d: ", i + 1); + print_temp(health->temp_sensor[i]); + } } static void @@ -220,14 +286,522 @@ print_log_firmware(void *buf, uint32_t s } } +/* + * Intel specific log pages from + * http://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/ssd-dc-p3700-spec.pdf + * + * Though the version as of this date has a typo for the size of log page 0xca, + * offset 147: it is only 1 byte, not 6. + */ +static void +print_intel_temp_stats(void *buf, uint32_t size __unused) +{ + struct intel_log_temp_stats *temp = buf; + + printf("Intel Temperature Log\n"); + printf("=====================\n"); + + printf("Current: "); + print_temp(temp->current); + printf("Overtemp Last Flags %#jx\n", (uintmax_t)temp->overtemp_flag_last); + printf("Overtemp Lifetime Flags %#jx\n", (uintmax_t)temp->overtemp_flag_life); + printf("Max Temperature "); + print_temp(temp->max_temp); + printf("Min Temperature "); + print_temp(temp->min_temp); + printf("Max Operating Temperature "); + print_temp(temp->max_oper_temp); + printf("Min Operating Temperature "); + print_temp(temp->min_oper_temp); + printf("Estimated Temperature Offset: %ju C/K\n", (uintmax_t)temp->est_offset); +} + +static void +print_intel_add_smart(void *buf, uint32_t size __unused) +{ + uint8_t *walker = buf; + uint8_t *end = walker + 150; + const char *name; + uint64_t raw; + uint8_t normalized; + + static struct kv_name kv[] = + { + { 0xab, "Program Fail Count" }, + { 0xac, "Erase Fail Count" }, + { 0xad, "Wear Leveling Count" }, + { 0xb8, "End to End Error Count" }, + { 0xc7, "CRC Error Count" }, + { 0xe2, "Timed: Media Wear" }, + { 0xe3, "Timed: Host Read %" }, + { 0xe4, "Timed: Elapsed Time" }, + { 0xea, "Thermal Throttle Status" }, + { 0xf0, "Retry Buffer Overflows" }, + { 0xf3, "PLL Lock Loss Count" }, + { 0xf4, "NAND Bytes Written" }, + { 0xf5, "Host Bytes Written" }, + }; + + printf("Additional SMART Data Log\n"); + printf("=========================\n"); + /* + * walker[0] = Key + * walker[1,2] = reserved + * walker[3] = Normalized Value + * walker[4] = reserved + * walker[5..10] = Little Endian Raw value + * (or other represenations) + * walker[11] = reserved + */ + while (walker < end) { + name = kv_lookup(kv, nitems(kv), *walker); + normalized = walker[3]; + raw = le48dec(walker + 5); + switch (*walker){ + case 0: + break; + case 0xad: + printf("%-32s: %3d min: %u max: %u ave: %u\n", name, normalized, + le16dec(walker + 5), le16dec(walker + 7), le16dec(walker + 9)); + break; + case 0xe2: + printf("%-32s: %3d %.3f%%\n", name, normalized, raw / 1024.0); + break; + case 0xea: + printf("%-32s: %3d %d%% %d times\n", name, normalized, walker[5], le32dec(walker+6)); + break; + default: + printf("%-32s: %3d %ju\n", name, normalized, (uintmax_t)raw); + break; + } + walker += 12; + } +} + +/* + * HGST's 0xc1 page. This is a grab bag of additional data. Please see + * https://www.hgst.com/sites/default/files/resources/US_SN150_ProdManual.pdf + * https://www.hgst.com/sites/default/files/resources/US_SN100_ProdManual.pdf + * Appendix A for details + */ + +typedef void (*subprint_fn_t)(void *buf, uint16_t subtype, uint8_t res, uint32_t size); + +struct subpage_print +{ + uint16_t key; + subprint_fn_t fn; +}; + +static void print_hgst_info_write_errors(void *buf, uint16_t subtype, uint8_t res, uint32_t size); +static void print_hgst_info_read_errors(void *buf, uint16_t subtype, uint8_t res, uint32_t size); +static void print_hgst_info_verify_errors(void *buf, uint16_t subtype, uint8_t res, uint32_t size); +static void print_hgst_info_self_test(void *buf, uint16_t subtype, uint8_t res, uint32_t size); +static void print_hgst_info_background_scan(void *buf, uint16_t subtype, uint8_t res, uint32_t size); +static void print_hgst_info_erase_errors(void *buf, uint16_t subtype, uint8_t res, uint32_t size); +static void print_hgst_info_erase_counts(void *buf, uint16_t subtype, uint8_t res, uint32_t size); +static void print_hgst_info_temp_history(void *buf, uint16_t subtype, uint8_t res, uint32_t size); +static void print_hgst_info_ssd_perf(void *buf, uint16_t subtype, uint8_t res, uint32_t size); +static void print_hgst_info_firmware_load(void *buf, uint16_t subtype, uint8_t res, uint32_t size); + +static struct subpage_print hgst_subpage[] = { + { 0x02, print_hgst_info_write_errors }, + { 0x03, print_hgst_info_read_errors }, + { 0x05, print_hgst_info_verify_errors }, + { 0x10, print_hgst_info_self_test }, + { 0x15, print_hgst_info_background_scan }, + { 0x30, print_hgst_info_erase_errors }, + { 0x31, print_hgst_info_erase_counts }, + { 0x32, print_hgst_info_temp_history }, + { 0x37, print_hgst_info_ssd_perf }, + { 0x38, print_hgst_info_firmware_load }, +}; + +/* Print a subpage that is basically just key value pairs */ +static void +print_hgst_info_subpage_gen(void *buf, uint16_t subtype __unused, uint32_t size, + const struct kv_name *kv, size_t kv_count) +{ + uint8_t *wsp, *esp; + uint16_t ptype; + uint8_t plen; + uint64_t param; + int i; + + wsp = buf; + esp = wsp + size; + while (wsp < esp) { + ptype = le16dec(wsp); + wsp += 2; + wsp++; /* Flags, just ignore */ + plen = *wsp++; + param = 0; + for (i = 0; i < plen; i++) + param |= (uint64_t)*wsp++ << (i * 8); + printf(" %-30s: %jd\n", kv_lookup(kv, kv_count, ptype), (uintmax_t)param); + } +} + +static void +print_hgst_info_write_errors(void *buf, uint16_t subtype, uint8_t res __unused, uint32_t size) +{ + static struct kv_name kv[] = + { + { 0x0000, "Corrected Without Delay" }, + { 0x0001, "Corrected Maybe Delayed" }, + { 0x0002, "Re-Writes" }, + { 0x0003, "Errors Corrected" }, + { 0x0004, "Correct Algorithm Used" }, + { 0x0005, "Bytes Processed" }, + { 0x0006, "Uncorrected Errors" }, + { 0x8000, "Flash Write Commands" }, + { 0x8001, "HGST Special" }, + }; + + printf("Write Errors Subpage:\n"); + print_hgst_info_subpage_gen(buf, subtype, size, kv, nitems(kv)); +} + +static void +print_hgst_info_read_errors(void *buf, uint16_t subtype, uint8_t res __unused, uint32_t size) +{ + static struct kv_name kv[] = + { + { 0x0000, "Corrected Without Delay" }, + { 0x0001, "Corrected Maybe Delayed" }, + { 0x0002, "Re-Reads" }, + { 0x0003, "Errors Corrected" }, + { 0x0004, "Correct Algorithm Used" }, + { 0x0005, "Bytes Processed" }, + { 0x0006, "Uncorrected Errors" }, + { 0x8000, "Flash Read Commands" }, + { 0x8001, "XOR Recovered" }, + { 0x8002, "Total Corrected Bits" }, + }; + + printf("Read Errors Subpage:\n"); + print_hgst_info_subpage_gen(buf, subtype, size, kv, nitems(kv)); +} + +static void +print_hgst_info_verify_errors(void *buf, uint16_t subtype, uint8_t res __unused, uint32_t size) +{ + static struct kv_name kv[] = + { + { 0x0000, "Corrected Without Delay" }, + { 0x0001, "Corrected Maybe Delayed" }, + { 0x0002, "Re-Reads" }, + { 0x0003, "Errors Corrected" }, + { 0x0004, "Correct Algorithm Used" }, + { 0x0005, "Bytes Processed" }, + { 0x0006, "Uncorrected Errors" }, + { 0x8000, "Commands Processed" }, + }; + + printf("Verify Errors Subpage:\n"); + print_hgst_info_subpage_gen(buf, subtype, size, kv, nitems(kv)); +} + +static void +print_hgst_info_self_test(void *buf, uint16_t subtype __unused, uint8_t res __unused, uint32_t size) +{ + size_t i; + uint8_t *walker = buf; + uint16_t code, hrs; + uint32_t lba; + + printf("Self Test Subpage:\n"); + for (i = 0; i < size / 20; i++) { /* Each entry is 20 bytes */ + code = le16dec(walker); + walker += 2; + walker++; /* Ignore fixed flags */ + if (*walker == 0) /* Last entry is zero length */ + break; + if (*walker++ != 0x10) { + printf("Bad length for self test report\n"); + return; + } + printf(" %-30s: %d\n", "Recent Test", code); + printf(" %-28s: %#x\n", "Self-Test Results", *walker & 0xf); + printf(" %-28s: %#x\n", "Self-Test Code", (*walker >> 5) & 0x7); + walker++; + printf(" %-28s: %#x\n", "Self-Test Number", *walker++); + hrs = le16dec(walker); + walker += 2; + lba = le32dec(walker); + walker += 4; + printf(" %-28s: %u\n", "Total Power On Hrs", hrs); + printf(" %-28s: %#jx (%jd)\n", "LBA", (uintmax_t)lba, (uintmax_t)lba); + printf(" %-28s: %#x\n", "Sense Key", *walker++ & 0xf); + printf(" %-28s: %#x\n", "Additional Sense Code", *walker++); + printf(" %-28s: %#x\n", "Additional Sense Qualifier", *walker++); + printf(" %-28s: %#x\n", "Vendor Specific Detail", *walker++); + } +} + +static void +print_hgst_info_background_scan(void *buf, uint16_t subtype __unused, uint8_t res __unused, uint32_t size) +{ + uint8_t *walker = buf; + uint8_t status; + uint16_t code, nscan, progress; + uint32_t pom, nand; + + printf("Background Media Scan Subpage:\n"); + /* Decode the header */ + code = le16dec(walker); + walker += 2; + walker++; /* Ignore fixed flags */ + if (*walker++ != 0x10) { + printf("Bad length for background scan header\n"); + return; + } + if (code != 0) { + printf("Expceted code 0, found code %#x\n", code); + return; + } + pom = le32dec(walker); + walker += 4; + walker++; /* Reserved */ + status = *walker++; + nscan = le16dec(walker); + walker += 2; + progress = le16dec(walker); + walker += 2; + walker += 6; /* Reserved */ + printf(" %-30s: %d\n", "Power On Minutes", pom); + printf(" %-30s: %x (%s)\n", "BMS Status", status, + status == 0 ? "idle" : (status == 1 ? "active" : (status == 8 ? "suspended" : "unknown"))); + printf(" %-30s: %d\n", "Number of BMS", nscan); + printf(" %-30s: %d\n", "Progress Current BMS", progress); + /* Report retirements */ + if (walker - (uint8_t *)buf != 20) { + printf("Coding error, offset not 20\n"); + return; + } + size -= 20; + printf(" %-30s: %d\n", "BMS retirements", size / 0x18); + while (size > 0) { + code = le16dec(walker); + walker += 2; + walker++; + if (*walker++ != 0x14) { + printf("Bad length parameter\n"); + return; + } + pom = le32dec(walker); + walker += 4; + /* + * Spec sheet says the following are hard coded, if true, just + * print the NAND retirement. + */ + if (walker[0] == 0x41 && + walker[1] == 0x0b && + walker[2] == 0x01 && + walker[3] == 0x00 && + walker[4] == 0x00 && + walker[5] == 0x00 && + walker[6] == 0x00 && + walker[7] == 0x00) { + walker += 8; + walker += 4; /* Skip reserved */ + nand = le32dec(walker); + walker += 4; + printf(" %-30s: %d\n", "Retirement number", code); + printf(" %-28s: %#x\n", "NAND (C/T)BBBPPP", nand); + } else { + printf("Parameter %#x entry corrupt\n", code); + walker += 16; + } + } +} + +static void +print_hgst_info_erase_errors(void *buf, uint16_t subtype __unused, uint8_t res __unused, uint32_t size) +{ + static struct kv_name kv[] = + { + { 0x0000, "Corrected Without Delay" }, + { 0x0001, "Corrected Maybe Delayed" }, + { 0x0002, "Re-Erase" }, + { 0x0003, "Errors Corrected" }, + { 0x0004, "Correct Algorithm Used" }, + { 0x0005, "Bytes Processed" }, + { 0x0006, "Uncorrected Errors" }, + { 0x8000, "Flash Erase Commands" }, + { 0x8001, "Mfg Defect Count" }, + { 0x8002, "Grown Defect Count" }, + { 0x8003, "Erase Count -- User" }, + { 0x8004, "Erase Count -- System" }, + }; + + printf("Erase Errors Subpage:\n"); + print_hgst_info_subpage_gen(buf, subtype, size, kv, nitems(kv)); +} + +static void +print_hgst_info_erase_counts(void *buf, uint16_t subtype, uint8_t res __unused, uint32_t size) +{ + /* My drive doesn't export this -- so not coding up */ + printf("XXX: Erase counts subpage: %p, %#x %d\n", buf, subtype, size); +} + +static void +print_hgst_info_temp_history(void *buf, uint16_t subtype __unused, uint8_t res __unused, uint32_t size __unused) +{ + uint8_t *walker = buf; + uint32_t min; + + printf("Temperature History:\n"); + printf(" %-30s: %d C\n", "Current Temperature", *walker++); + printf(" %-30s: %d C\n", "Reference Temperature", *walker++); + printf(" %-30s: %d C\n", "Maximum Temperature", *walker++); + printf(" %-30s: %d C\n", "Minimum Temperature", *walker++); + min = le32dec(walker); + walker += 4; + printf(" %-30s: %d:%02d:00\n", "Max Temperture Time", min / 60, min % 60); + min = le32dec(walker); + walker += 4; + printf(" %-30s: %d:%02d:00\n", "Over Temperture Duration", min / 60, min % 60); + min = le32dec(walker); + walker += 4; + printf(" %-30s: %d:%02d:00\n", "Min Temperture Time", min / 60, min % 60); +} + +static void +print_hgst_info_ssd_perf(void *buf, uint16_t subtype __unused, uint8_t res, uint32_t size __unused) +{ + uint8_t *walker = buf; + uint64_t val; + + printf("SSD Performance Subpage Type %d:\n", res); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "Host Read Commands", val); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "Host Read Blocks", val); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "Host Cache Read Hits Commands", val); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "Host Cache Read Hits Blocks", val); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "Host Read Commands Stalled", val); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "Host Write Commands", val); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "Host Write Blocks", val); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "Host Write Odd Start Commands", val); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "Host Write Odd End Commands", val); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "Host Write Commands Stalled", val); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "NAND Read Commands", val); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "NAND Read Blocks", val); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "NAND Write Commands", val); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "NAND Write Blocks", val); + val = le64dec(walker); + walker += 8; + printf(" %-30s: %ju\n", "NAND Read Before Writes", val); +} + +static void +print_hgst_info_firmware_load(void *buf, uint16_t subtype __unused, uint8_t res __unused, uint32_t size __unused) +{ + uint8_t *walker = buf; + + printf("Firmware Load Subpage:\n"); + printf(" %-30s: %d\n", "Firmware Downloads", le32dec(walker)); +} + +static void +kv_indirect(void *buf, uint32_t subtype, uint8_t res, uint32_t size, struct subpage_print *sp, size_t nsp) +{ + size_t i; + + for (i = 0; i < nsp; i++, sp++) { + if (sp->key == subtype) { + sp->fn(buf, subtype, res, size); + return; + } + } + printf("No handler for page type %x\n", subtype); +} + +static void +print_hgst_info_log(void *buf, uint32_t size __unused) +{ + uint8_t *walker, *end, *subpage; + int pages; + uint16_t len; + uint8_t subtype, res; + + printf("HGST Extra Info Log\n"); + printf("===================\n"); + + walker = buf; + pages = *walker++; + walker++; + len = le16dec(walker); + walker += 2; + end = walker + len; /* Length is exclusive of this header */ + + while (walker < end) { + subpage = walker + 4; + subtype = *walker++ & 0x3f; /* subtype */ + res = *walker++; /* Reserved */ + len = le16dec(walker); + walker += len + 2; /* Length, not incl header */ + if (walker > end) { + printf("Ooops! Off the end of the list\n"); + break; + } + kv_indirect(subpage, subtype, res, len, hgst_subpage, nitems(hgst_subpage)); + } +} + +/* + * Table of log page printer / sizing. + * + * This includes Intel specific pages that are widely implemented. Not + * sure how best to switch between different vendors. + */ static struct logpage_function { uint8_t log_page; - print_fn_t fn; + print_fn_t print_fn; + size_t size; } logfuncs[] = { - {NVME_LOG_ERROR, print_log_error }, - {NVME_LOG_HEALTH_INFORMATION, print_log_health }, - {NVME_LOG_FIRMWARE_SLOT, print_log_firmware }, - {0, NULL }, + {NVME_LOG_ERROR, print_log_error, + 0}, + {NVME_LOG_HEALTH_INFORMATION, print_log_health, + sizeof(struct nvme_health_information_page)}, + {NVME_LOG_FIRMWARE_SLOT, print_log_firmware, + sizeof(struct nvme_firmware_page)}, + {INTEL_LOG_TEMP_STATS, print_intel_temp_stats, + sizeof(struct intel_log_temp_stats)}, + {INTEL_LOG_ADD_SMART, print_intel_add_smart, + DEFAULT_SIZE}, + {HGST_INFO_LOG, print_hgst_info_log, + DEFAULT_SIZE}, + {0, NULL, + 0}, }; static void @@ -262,14 +836,6 @@ logpage(int argc, char *argv[]) "\"%s\" not valid log page id.\n", optarg); logpage_usage(); - /* TODO: Define valid log page id ranges in nvme.h? */ - } else if (log_page == 0 || - (log_page >= 0x04 && log_page <= 0x7F) || - (log_page >= 0x80 && log_page <= 0xBF)) { - fprintf(stderr, - "\"%s\" not valid log page id.\n", - optarg); - logpage_usage(); } pageflag = true; break; @@ -316,6 +882,7 @@ logpage(int argc, char *argv[]) } print_fn = print_hex; + size = DEFAULT_SIZE; if (!hexflag) { /* * See if there is a pretty print function for the @@ -325,30 +892,20 @@ logpage(int argc, char *argv[]) f = logfuncs; while (f->log_page > 0) { if (log_page == f->log_page) { - print_fn = f->fn; + print_fn = f->print_fn; + size = f->size; break; } f++; } } - /* Read the log page */ - switch (log_page) { - case NVME_LOG_ERROR: + if (log_page == NVME_LOG_ERROR) { size = sizeof(struct nvme_error_information_entry); size *= (cdata.elpe + 1); - break; - case NVME_LOG_HEALTH_INFORMATION: - size = sizeof(struct nvme_health_information_page); - break; - case NVME_LOG_FIRMWARE_SLOT: - size = sizeof(struct nvme_firmware_page); - break; - default: - size = DEFAULT_SIZE; - break; } + /* Read the log page */ buf = get_log_buffer(size); read_logpage(fd, log_page, nsid, buf, size); print_fn(buf, size); Modified: projects/clang390-import/sys/boot/i386/libi386/smbios.c ============================================================================== --- projects/clang390-import/sys/boot/i386/libi386/smbios.c Sat Nov 19 21:05:17 2016 (r308867) +++ projects/clang390-import/sys/boot/i386/libi386/smbios.c Sat Nov 19 21:10:46 2016 (r308868) @@ -238,7 +238,8 @@ smbios_parse_table(const caddr_t addr) smbios_setenv("smbios.system.serial", addr, 0x07); smbios_setuuid("smbios.system.uuid", addr + 0x08, smbios.ver); #endif - if (smbios.major >= 2 && smbios.minor >= 4) { + if (smbios.major > 2 || + (smbios.major == 2 && smbios.minor >= 4)) { smbios_setenv("smbios.system.sku", addr, 0x19); smbios_setenv("smbios.system.family", addr, 0x1a); } Modified: projects/clang390-import/sys/conf/files.mips ============================================================================== --- projects/clang390-import/sys/conf/files.mips Sat Nov 19 21:05:17 2016 (r308867) +++ projects/clang390-import/sys/conf/files.mips Sat Nov 19 21:10:46 2016 (r308868) @@ -97,6 +97,13 @@ dev/hwpmc/hwpmc_mips74k.c optional hwpm # ofw support dev/ofw/ofwpci.c optional fdt pci +# INTRNG support code +kern/msi_if.m optional intrng +kern/pic_if.m optional intrng +kern/subr_intr.c optional intrng +# INTRNG compatible MIPS32 interrupt controller +mips/mips/mips_pic.c optional intrng + # DTrace cddl/compat/opensolaris/kern/opensolaris_atomic.c optional zfs | dtrace compile-with "${CDDL_C}" cddl/dev/dtrace/mips/dtrace_asm.S optional dtrace compile-with "${DTRACE_S}" Modified: projects/clang390-import/sys/conf/options.mips ============================================================================== --- projects/clang390-import/sys/conf/options.mips Sat Nov 19 21:05:17 2016 (r308867) +++ projects/clang390-import/sys/conf/options.mips Sat Nov 19 21:10:46 2016 (r308868) @@ -45,6 +45,7 @@ CPU_CNMIPS opt_global.h CPU_RMI opt_global.h CPU_NLM opt_global.h CPU_BERI opt_global.h +CPU_XBURST opt_global.h CPU_MALTA opt_global.h # which MACHINE_ARCH architecture Modified: projects/clang390-import/sys/dev/nvme/nvme.h ============================================================================== --- projects/clang390-import/sys/dev/nvme/nvme.h Sat Nov 19 21:05:17 2016 (r308867) +++ projects/clang390-import/sys/dev/nvme/nvme.h Sat Nov 19 21:10:46 2016 (r308868) @@ -663,9 +663,27 @@ enum nvme_log_page { NVME_LOG_ERROR = 0x01, NVME_LOG_HEALTH_INFORMATION = 0x02, NVME_LOG_FIRMWARE_SLOT = 0x03, - /* 0x04-0x7F - reserved */ + NVME_LOG_CHANGED_NAMESPACE = 0x04, + NVME_LOG_COMMAND_EFFECT = 0x05, + /* 0x06-0x7F - reserved */ /* 0x80-0xBF - I/O command set specific */ + NVME_LOG_RES_NOTIFICATION = 0x80, /* 0xC0-0xFF - vendor specific */ + + /* + * The following are Intel Specific log pages, but they seem + * to be widely implemented. + */ + INTEL_LOG_READ_LAT_LOG = 0xc1, + INTEL_LOG_WRITE_LAT_LOG = 0xc2, + INTEL_LOG_TEMP_STATS = 0xc5, + INTEL_LOG_ADD_SMART = 0xca, + INTEL_LOG_DRIVE_MKT_NAME = 0xdd, + + /* + * HGST log page, with lots ofs sub pages. + */ + HGST_INFO_LOG = 0xc1, }; struct nvme_error_information_entry { @@ -724,8 +742,11 @@ struct nvme_health_information_page { uint64_t unsafe_shutdowns[2]; uint64_t media_errors[2]; uint64_t num_error_info_log_entries[2]; + uint32_t warning_temp_time; + uint32_t error_temp_time; + uint16_t temp_sensor[8]; - uint8_t reserved2[320]; + uint8_t reserved2[296]; } __packed __aligned(4); struct nvme_firmware_page { @@ -740,6 +761,19 @@ struct nvme_firmware_page { uint8_t reserved2[448]; } __packed __aligned(4); +struct intel_log_temp_stats +{ + uint64_t current; + uint64_t overtemp_flag_last; + uint64_t overtemp_flag_life; + uint64_t max_temp; + uint64_t min_temp; + uint64_t _rsvd[5]; + uint64_t max_oper_temp; + uint64_t min_oper_temp; + uint64_t est_offset; +} __packed __aligned(4); + #define NVME_TEST_MAX_THREADS 128 struct nvme_io_test { Modified: projects/clang390-import/sys/mips/atheros/ar531x/files.ar5315 ============================================================================== --- projects/clang390-import/sys/mips/atheros/ar531x/files.ar5315 Sat Nov 19 21:05:17 2016 (r308867) +++ projects/clang390-import/sys/mips/atheros/ar531x/files.ar5315 Sat Nov 19 21:10:46 2016 (r308868) @@ -18,14 +18,5 @@ mips/mips/tick.c standard dev/etherswitch/e6000sw/e6060sw.c optional etherswitch -# Hack to reuse ARM intrng code -kern/subr_intr.c optional intrng -kern/msi_if.m optional intrng -kern/pic_if.m optional intrng - -# Intrng compatible MIPS32 interrupt controller -mips/mips/mips_pic.c optional intrng - # Non Intrng mips/mips/intr_machdep.c optional !intrng - Modified: projects/clang390-import/sys/mips/broadcom/files.broadcom ============================================================================== --- projects/clang390-import/sys/mips/broadcom/files.broadcom Sat Nov 19 21:05:17 2016 (r308867) +++ projects/clang390-import/sys/mips/broadcom/files.broadcom Sat Nov 19 21:10:46 2016 (r308868) @@ -9,11 +9,6 @@ mips/broadcom/bcm_bmips.c optional siba mips/broadcom/bcm_mips74k.c optional bcma_nexus bcma mips/broadcom/bcm_pmu.c standard mips/mips/tick.c standard -mips/mips/mips_pic.c standard -kern/subr_intr.c standard -kern/pic_if.m standard - -kern/msi_if.m optional intrng mips/broadcom/uart_cpu_chipc.c optional uart mips/broadcom/uart_bus_chipc.c optional uart Copied: projects/clang390-import/sys/mips/conf/CANNA (from r308867, head/sys/mips/conf/CANNA) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang390-import/sys/mips/conf/CANNA Sat Nov 19 21:10:46 2016 (r308868, copy of r308867, head/sys/mips/conf/CANNA) @@ -0,0 +1,29 @@ +# CANNA -- Kernel config for Ingenic CANNA board +# *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@freebsd.org Sat Nov 19 22:02:00 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 244CAC4B60B for ; Sat, 19 Nov 2016 22:02:00 +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 mx1.freebsd.org (Postfix) with ESMTPS id E5AAD19F; Sat, 19 Nov 2016 22:01:59 +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 uAJM1wKo099062; Sat, 19 Nov 2016 22:01:58 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uAJM1wMg099061; Sat, 19 Nov 2016 22:01:58 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201611192201.uAJM1wMg099061@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sat, 19 Nov 2016 22:01:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r308870 - projects/clang390-import/sbin/nvmecontrol X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Nov 2016 22:02:00 -0000 Author: dim Date: Sat Nov 19 22:01:58 2016 New Revision: 308870 URL: https://svnweb.freebsd.org/changeset/base/308870 Log: Merge ^/head r308868 through r308869. Modified: projects/clang390-import/sbin/nvmecontrol/logpage.c Directory Properties: projects/clang390-import/ (props changed) Modified: projects/clang390-import/sbin/nvmecontrol/logpage.c ============================================================================== --- projects/clang390-import/sbin/nvmecontrol/logpage.c Sat Nov 19 21:46:13 2016 (r308869) +++ projects/clang390-import/sbin/nvmecontrol/logpage.c Sat Nov 19 22:01:58 2016 (r308870) @@ -75,10 +75,18 @@ kv_lookup(const struct kv_name *kv, size } /* - * 128-bit integer augments to standard values + * 128-bit integer augments to standard values. On i386 this + * doesn't exist, so we use 64-bit values. The 128-bit counters + * are crazy anyway, since for this purpose, you'd need a + * billion IOPs for billions of seconds to overflow them. + * So, on 32-bit i386, you'll get truncated values. */ #define UINT128_DIG 39 +#ifdef __i386__ +typedef uint64_t uint128_t; +#else typedef __uint128_t uint128_t; +#endif static inline uint128_t to128(void *p)