From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from host.76.145.23.62.rev.coltfrance.com ([62.23.145.76]:55777 "EHLO proxy.6wind.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751933AbcDZIGj (ORCPT ); Tue, 26 Apr 2016 04:06:39 -0400 From: Nicolas Dichtel To: netdev@vger.kernel.org Cc: davem@davemloft.net, sd@queasysnail.net, johannes@sipsolutions.net, kvalo@codeaurora.org, linux-wireless@vger.kernel.org, jack@suse.com, linux-kernel@vger.kernel.org, pshelar@nicira.com, dev@openvswitch.org, jhs@mojatatu.com, philipp.reisner@linbit.com, lars.ellenberg@linbit.com, drbd-dev@lists.linbit.com, Nicolas Dichtel Subject: [PATCH net-next 1/8] macsec: use nla_put_u64_64bit() Date: Tue, 26 Apr 2016 10:06:11 +0200 Message-Id: <1461657978-13360-2-git-send-email-nicolas.dichtel@6wind.com> (sfid-20160426_101049_050751_7C9C72D7) In-Reply-To: <1461657978-13360-1-git-send-email-nicolas.dichtel@6wind.com> References: <1461657978-13360-1-git-send-email-nicolas.dichtel@6wind.com> Sender: linux-wireless-owner@vger.kernel.org List-ID: Signed-off-by: Nicolas Dichtel --- drivers/net/macsec.c | 121 ++++++++++++++++++++++++++++++----------- include/uapi/linux/if_link.h | 1 + include/uapi/linux/if_macsec.h | 6 ++ 3 files changed, 95 insertions(+), 33 deletions(-) diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index 6caa72402de7..a172a1ffa151 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c @@ -1405,9 +1405,10 @@ static sci_t nla_get_sci(const struct nlattr *nla) return (__force sci_t)nla_get_u64(nla); } -static int nla_put_sci(struct sk_buff *skb, int attrtype, sci_t value) +static int nla_put_sci(struct sk_buff *skb, int attrtype, sci_t value, + int padattr) { - return nla_put_u64(skb, attrtype, (__force u64)value); + return nla_put_u64_64bit(skb, attrtype, (__force u64)value, padattr); } static struct macsec_tx_sa *get_txsa_from_nl(struct net *net, @@ -2131,16 +2132,36 @@ static int copy_rx_sc_stats(struct sk_buff *skb, sum.InPktsUnusedSA += tmp.InPktsUnusedSA; } - if (nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_OCTETS_VALIDATED, sum.InOctetsValidated) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_OCTETS_DECRYPTED, sum.InOctetsDecrypted) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNCHECKED, sum.InPktsUnchecked) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_DELAYED, sum.InPktsDelayed) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_OK, sum.InPktsOK) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_INVALID, sum.InPktsInvalid) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_LATE, sum.InPktsLate) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_VALID, sum.InPktsNotValid) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_USING_SA, sum.InPktsNotUsingSA) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNUSED_SA, sum.InPktsUnusedSA)) + if (nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_OCTETS_VALIDATED, + sum.InOctetsValidated, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_OCTETS_DECRYPTED, + sum.InOctetsDecrypted, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNCHECKED, + sum.InPktsUnchecked, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_DELAYED, + sum.InPktsDelayed, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_OK, + sum.InPktsOK, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_INVALID, + sum.InPktsInvalid, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_LATE, + sum.InPktsLate, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_VALID, + sum.InPktsNotValid, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_USING_SA, + sum.InPktsNotUsingSA, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNUSED_SA, + sum.InPktsUnusedSA, + MACSEC_RXSC_STATS_ATTR_PAD)) return -EMSGSIZE; return 0; @@ -2169,10 +2190,18 @@ static int copy_tx_sc_stats(struct sk_buff *skb, sum.OutOctetsEncrypted += tmp.OutOctetsEncrypted; } - if (nla_put_u64(skb, MACSEC_TXSC_STATS_ATTR_OUT_PKTS_PROTECTED, sum.OutPktsProtected) || - nla_put_u64(skb, MACSEC_TXSC_STATS_ATTR_OUT_PKTS_ENCRYPTED, sum.OutPktsEncrypted) || - nla_put_u64(skb, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_PROTECTED, sum.OutOctetsProtected) || - nla_put_u64(skb, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_ENCRYPTED, sum.OutOctetsEncrypted)) + if (nla_put_u64_64bit(skb, MACSEC_TXSC_STATS_ATTR_OUT_PKTS_PROTECTED, + sum.OutPktsProtected, + MACSEC_TXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_TXSC_STATS_ATTR_OUT_PKTS_ENCRYPTED, + sum.OutPktsEncrypted, + MACSEC_TXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_PROTECTED, + sum.OutOctetsProtected, + MACSEC_TXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_ENCRYPTED, + sum.OutOctetsEncrypted, + MACSEC_TXSC_STATS_ATTR_PAD)) return -EMSGSIZE; return 0; @@ -2205,14 +2234,30 @@ static int copy_secy_stats(struct sk_buff *skb, sum.InPktsOverrun += tmp.InPktsOverrun; } - if (nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_OUT_PKTS_UNTAGGED, sum.OutPktsUntagged) || - nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_UNTAGGED, sum.InPktsUntagged) || - nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_OUT_PKTS_TOO_LONG, sum.OutPktsTooLong) || - nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_TAG, sum.InPktsNoTag) || - nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_BAD_TAG, sum.InPktsBadTag) || - nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_UNKNOWN_SCI, sum.InPktsUnknownSCI) || - nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_SCI, sum.InPktsNoSCI) || - nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_OVERRUN, sum.InPktsOverrun)) + if (nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_OUT_PKTS_UNTAGGED, + sum.OutPktsUntagged, + MACSEC_SECY_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_UNTAGGED, + sum.InPktsUntagged, + MACSEC_SECY_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_OUT_PKTS_TOO_LONG, + sum.OutPktsTooLong, + MACSEC_SECY_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_TAG, + sum.InPktsNoTag, + MACSEC_SECY_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_BAD_TAG, + sum.InPktsBadTag, + MACSEC_SECY_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_UNKNOWN_SCI, + sum.InPktsUnknownSCI, + MACSEC_SECY_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_SCI, + sum.InPktsNoSCI, + MACSEC_SECY_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_OVERRUN, + sum.InPktsOverrun, + MACSEC_SECY_STATS_ATTR_PAD)) return -EMSGSIZE; return 0; @@ -2226,8 +2271,11 @@ static int nla_put_secy(struct macsec_secy *secy, struct sk_buff *skb) if (!secy_nest) return 1; - if (nla_put_sci(skb, MACSEC_SECY_ATTR_SCI, secy->sci) || - nla_put_u64(skb, MACSEC_SECY_ATTR_CIPHER_SUITE, DEFAULT_CIPHER_ID) || + if (nla_put_sci(skb, MACSEC_SECY_ATTR_SCI, secy->sci, + MACSEC_SECY_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_ATTR_CIPHER_SUITE, + DEFAULT_CIPHER_ID, + MACSEC_SECY_ATTR_PAD) || nla_put_u8(skb, MACSEC_SECY_ATTR_ICV_LEN, secy->icv_len) || nla_put_u8(skb, MACSEC_SECY_ATTR_OPER, secy->operational) || nla_put_u8(skb, MACSEC_SECY_ATTR_PROTECT, secy->protect_frames) || @@ -2312,7 +2360,9 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, if (nla_put_u8(skb, MACSEC_SA_ATTR_AN, i) || nla_put_u32(skb, MACSEC_SA_ATTR_PN, tx_sa->next_pn) || - nla_put_u64(skb, MACSEC_SA_ATTR_KEYID, tx_sa->key.id) || + nla_put_u64_64bit(skb, MACSEC_SA_ATTR_KEYID, + tx_sa->key.id, + MACSEC_SA_ATTR_PAD) || nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, tx_sa->active)) { nla_nest_cancel(skb, txsa_nest); nla_nest_cancel(skb, txsa_list); @@ -2353,7 +2403,8 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, } if (nla_put_u8(skb, MACSEC_RXSC_ATTR_ACTIVE, rx_sc->active) || - nla_put_sci(skb, MACSEC_RXSC_ATTR_SCI, rx_sc->sci)) { + nla_put_sci(skb, MACSEC_RXSC_ATTR_SCI, rx_sc->sci, + MACSEC_RXSC_ATTR_PAD)) { nla_nest_cancel(skb, rxsc_nest); nla_nest_cancel(skb, rxsc_list); goto nla_put_failure; @@ -2413,7 +2464,9 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, if (nla_put_u8(skb, MACSEC_SA_ATTR_AN, i) || nla_put_u32(skb, MACSEC_SA_ATTR_PN, rx_sa->next_pn) || - nla_put_u64(skb, MACSEC_SA_ATTR_KEYID, rx_sa->key.id) || + nla_put_u64_64bit(skb, MACSEC_SA_ATTR_KEYID, + rx_sa->key.id, + MACSEC_SA_ATTR_PAD) || nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, rx_sa->active)) { nla_nest_cancel(skb, rxsa_nest); nla_nest_cancel(skb, rxsc_nest); @@ -3145,9 +3198,9 @@ static struct net *macsec_get_link_net(const struct net_device *dev) static size_t macsec_get_size(const struct net_device *dev) { return 0 + - nla_total_size(8) + /* SCI */ + nla_total_size_64bit(8) + /* SCI */ nla_total_size(1) + /* ICV_LEN */ - nla_total_size(8) + /* CIPHER_SUITE */ + nla_total_size_64bit(8) + /* CIPHER_SUITE */ nla_total_size(4) + /* WINDOW */ nla_total_size(1) + /* ENCODING_SA */ nla_total_size(1) + /* ENCRYPT */ @@ -3166,9 +3219,11 @@ static int macsec_fill_info(struct sk_buff *skb, struct macsec_secy *secy = &macsec_priv(dev)->secy; struct macsec_tx_sc *tx_sc = &secy->tx_sc; - if (nla_put_sci(skb, IFLA_MACSEC_SCI, secy->sci) || + if (nla_put_sci(skb, IFLA_MACSEC_SCI, secy->sci, + IFLA_MACSEC_PAD) || nla_put_u8(skb, IFLA_MACSEC_ICV_LEN, secy->icv_len) || - nla_put_u64(skb, IFLA_MACSEC_CIPHER_SUITE, DEFAULT_CIPHER_ID) || + nla_put_u64_64bit(skb, IFLA_MACSEC_CIPHER_SUITE, + DEFAULT_CIPHER_ID, IFLA_MACSEC_PAD) || nla_put_u8(skb, IFLA_MACSEC_ENCODING_SA, tx_sc->encoding_sa) || nla_put_u8(skb, IFLA_MACSEC_ENCRYPT, tx_sc->encrypt) || nla_put_u8(skb, IFLA_MACSEC_PROTECT, secy->protect_frames) || diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h index 9300c08346c8..d82de331bb6b 100644 --- a/include/uapi/linux/if_link.h +++ b/include/uapi/linux/if_link.h @@ -434,6 +434,7 @@ enum { IFLA_MACSEC_SCB, IFLA_MACSEC_REPLAY_PROTECT, IFLA_MACSEC_VALIDATION, + IFLA_MACSEC_PAD, __IFLA_MACSEC_MAX, }; diff --git a/include/uapi/linux/if_macsec.h b/include/uapi/linux/if_macsec.h index 26b0d1e3e3e7..4c623d617b84 100644 --- a/include/uapi/linux/if_macsec.h +++ b/include/uapi/linux/if_macsec.h @@ -55,6 +55,7 @@ enum macsec_secy_attrs { MACSEC_SECY_ATTR_INC_SCI, MACSEC_SECY_ATTR_ES, MACSEC_SECY_ATTR_SCB, + MACSEC_SECY_ATTR_PAD, __MACSEC_SECY_ATTR_END, NUM_MACSEC_SECY_ATTR = __MACSEC_SECY_ATTR_END, MACSEC_SECY_ATTR_MAX = __MACSEC_SECY_ATTR_END - 1, @@ -66,6 +67,7 @@ enum macsec_rxsc_attrs { MACSEC_RXSC_ATTR_ACTIVE, /* config/dump, u8 0..1 */ MACSEC_RXSC_ATTR_SA_LIST, /* dump, nested */ MACSEC_RXSC_ATTR_STATS, /* dump, nested, macsec_rxsc_stats_attr */ + MACSEC_RXSC_ATTR_PAD, __MACSEC_RXSC_ATTR_END, NUM_MACSEC_RXSC_ATTR = __MACSEC_RXSC_ATTR_END, MACSEC_RXSC_ATTR_MAX = __MACSEC_RXSC_ATTR_END - 1, @@ -79,6 +81,7 @@ enum macsec_sa_attrs { MACSEC_SA_ATTR_KEY, /* config, data */ MACSEC_SA_ATTR_KEYID, /* config/dump, u64 */ MACSEC_SA_ATTR_STATS, /* dump, nested, macsec_sa_stats_attr */ + MACSEC_SA_ATTR_PAD, __MACSEC_SA_ATTR_END, NUM_MACSEC_SA_ATTR = __MACSEC_SA_ATTR_END, MACSEC_SA_ATTR_MAX = __MACSEC_SA_ATTR_END - 1, @@ -110,6 +113,7 @@ enum macsec_rxsc_stats_attr { MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_VALID, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_USING_SA, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNUSED_SA, + MACSEC_RXSC_STATS_ATTR_PAD, __MACSEC_RXSC_STATS_ATTR_END, NUM_MACSEC_RXSC_STATS_ATTR = __MACSEC_RXSC_STATS_ATTR_END, MACSEC_RXSC_STATS_ATTR_MAX = __MACSEC_RXSC_STATS_ATTR_END - 1, @@ -137,6 +141,7 @@ enum macsec_txsc_stats_attr { MACSEC_TXSC_STATS_ATTR_OUT_PKTS_ENCRYPTED, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_PROTECTED, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_ENCRYPTED, + MACSEC_TXSC_STATS_ATTR_PAD, __MACSEC_TXSC_STATS_ATTR_END, NUM_MACSEC_TXSC_STATS_ATTR = __MACSEC_TXSC_STATS_ATTR_END, MACSEC_TXSC_STATS_ATTR_MAX = __MACSEC_TXSC_STATS_ATTR_END - 1, @@ -153,6 +158,7 @@ enum macsec_secy_stats_attr { MACSEC_SECY_STATS_ATTR_IN_PKTS_UNKNOWN_SCI, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_SCI, MACSEC_SECY_STATS_ATTR_IN_PKTS_OVERRUN, + MACSEC_SECY_STATS_ATTR_PAD, __MACSEC_SECY_STATS_ATTR_END, NUM_MACSEC_SECY_STATS_ATTR = __MACSEC_SECY_STATS_ATTR_END, MACSEC_SECY_STATS_ATTR_MAX = __MACSEC_SECY_STATS_ATTR_END - 1, -- 2.8.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from zimbra13.linbit.com (zimbra.linbit.com [212.69.161.123]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by mail09.linbit.com (LINBIT Mail Daemon) with ESMTPS id 23C4E1056312 for ; Tue, 26 Apr 2016 14:36:03 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by zimbra13.linbit.com (Postfix) with ESMTP id 1EAD93EFFFB for ; Tue, 26 Apr 2016 14:36:03 +0200 (CEST) Received: from zimbra13.linbit.com ([127.0.0.1]) by localhost (zimbra13.linbit.com [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id jBqMEc6U2nD5 for ; Tue, 26 Apr 2016 14:36:03 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by zimbra13.linbit.com (Postfix) with ESMTP id E9B5E3F79B2 for ; Tue, 26 Apr 2016 14:36:02 +0200 (CEST) Received: from zimbra13.linbit.com ([127.0.0.1]) by localhost (zimbra13.linbit.com [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id yuypu3G55iEp for ; Tue, 26 Apr 2016 14:36:02 +0200 (CEST) Received: from soda.linbit (tuerlsteher.linbit.com [86.59.100.100]) by zimbra13.linbit.com (Postfix) with ESMTPS id B16803EFFFB for ; Tue, 26 Apr 2016 14:36:02 +0200 (CEST) Resent-Message-ID: <20160426123602.GE20950@soda.linbit> Received: from proxy.6wind.com (host.76.145.23.62.rev.coltfrance.com [62.23.145.76]) by mail09.linbit.com (LINBIT Mail Daemon) with ESMTP id 794A51056445 for ; Tue, 26 Apr 2016 10:12:12 +0200 (CEST) From: Nicolas Dichtel To: netdev@vger.kernel.org Date: Tue, 26 Apr 2016 10:06:11 +0200 Message-Id: <1461657978-13360-2-git-send-email-nicolas.dichtel@6wind.com> In-Reply-To: <1461657978-13360-1-git-send-email-nicolas.dichtel@6wind.com> References: <1461657978-13360-1-git-send-email-nicolas.dichtel@6wind.com> Cc: dev@openvswitch.org, Nicolas Dichtel , sd@queasysnail.net, linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, jhs@mojatatu.com, pshelar@nicira.com, lars.ellenberg@linbit.com, jack@suse.com, johannes@sipsolutions.net, philipp.reisner@linbit.com, davem@davemloft.net, kvalo@codeaurora.org, drbd-dev@lists.linbit.com Subject: [Drbd-dev] [PATCH net-next 1/8] macsec: use nla_put_u64_64bit() List-Id: "*Coordination* of development, patches, contributions -- *Questions* \(even to developers\) go to drbd-user, please." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Signed-off-by: Nicolas Dichtel --- drivers/net/macsec.c | 121 ++++++++++++++++++++++++++++++----------- include/uapi/linux/if_link.h | 1 + include/uapi/linux/if_macsec.h | 6 ++ 3 files changed, 95 insertions(+), 33 deletions(-) diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index 6caa72402de7..a172a1ffa151 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c @@ -1405,9 +1405,10 @@ static sci_t nla_get_sci(const struct nlattr *nla) return (__force sci_t)nla_get_u64(nla); } -static int nla_put_sci(struct sk_buff *skb, int attrtype, sci_t value) +static int nla_put_sci(struct sk_buff *skb, int attrtype, sci_t value, + int padattr) { - return nla_put_u64(skb, attrtype, (__force u64)value); + return nla_put_u64_64bit(skb, attrtype, (__force u64)value, padattr); } static struct macsec_tx_sa *get_txsa_from_nl(struct net *net, @@ -2131,16 +2132,36 @@ static int copy_rx_sc_stats(struct sk_buff *skb, sum.InPktsUnusedSA += tmp.InPktsUnusedSA; } - if (nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_OCTETS_VALIDATED, sum.InOctetsValidated) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_OCTETS_DECRYPTED, sum.InOctetsDecrypted) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNCHECKED, sum.InPktsUnchecked) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_DELAYED, sum.InPktsDelayed) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_OK, sum.InPktsOK) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_INVALID, sum.InPktsInvalid) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_LATE, sum.InPktsLate) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_VALID, sum.InPktsNotValid) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_USING_SA, sum.InPktsNotUsingSA) || - nla_put_u64(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNUSED_SA, sum.InPktsUnusedSA)) + if (nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_OCTETS_VALIDATED, + sum.InOctetsValidated, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_OCTETS_DECRYPTED, + sum.InOctetsDecrypted, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNCHECKED, + sum.InPktsUnchecked, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_DELAYED, + sum.InPktsDelayed, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_OK, + sum.InPktsOK, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_INVALID, + sum.InPktsInvalid, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_LATE, + sum.InPktsLate, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_VALID, + sum.InPktsNotValid, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_USING_SA, + sum.InPktsNotUsingSA, + MACSEC_RXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNUSED_SA, + sum.InPktsUnusedSA, + MACSEC_RXSC_STATS_ATTR_PAD)) return -EMSGSIZE; return 0; @@ -2169,10 +2190,18 @@ static int copy_tx_sc_stats(struct sk_buff *skb, sum.OutOctetsEncrypted += tmp.OutOctetsEncrypted; } - if (nla_put_u64(skb, MACSEC_TXSC_STATS_ATTR_OUT_PKTS_PROTECTED, sum.OutPktsProtected) || - nla_put_u64(skb, MACSEC_TXSC_STATS_ATTR_OUT_PKTS_ENCRYPTED, sum.OutPktsEncrypted) || - nla_put_u64(skb, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_PROTECTED, sum.OutOctetsProtected) || - nla_put_u64(skb, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_ENCRYPTED, sum.OutOctetsEncrypted)) + if (nla_put_u64_64bit(skb, MACSEC_TXSC_STATS_ATTR_OUT_PKTS_PROTECTED, + sum.OutPktsProtected, + MACSEC_TXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_TXSC_STATS_ATTR_OUT_PKTS_ENCRYPTED, + sum.OutPktsEncrypted, + MACSEC_TXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_PROTECTED, + sum.OutOctetsProtected, + MACSEC_TXSC_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_ENCRYPTED, + sum.OutOctetsEncrypted, + MACSEC_TXSC_STATS_ATTR_PAD)) return -EMSGSIZE; return 0; @@ -2205,14 +2234,30 @@ static int copy_secy_stats(struct sk_buff *skb, sum.InPktsOverrun += tmp.InPktsOverrun; } - if (nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_OUT_PKTS_UNTAGGED, sum.OutPktsUntagged) || - nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_UNTAGGED, sum.InPktsUntagged) || - nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_OUT_PKTS_TOO_LONG, sum.OutPktsTooLong) || - nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_TAG, sum.InPktsNoTag) || - nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_BAD_TAG, sum.InPktsBadTag) || - nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_UNKNOWN_SCI, sum.InPktsUnknownSCI) || - nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_SCI, sum.InPktsNoSCI) || - nla_put_u64(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_OVERRUN, sum.InPktsOverrun)) + if (nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_OUT_PKTS_UNTAGGED, + sum.OutPktsUntagged, + MACSEC_SECY_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_UNTAGGED, + sum.InPktsUntagged, + MACSEC_SECY_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_OUT_PKTS_TOO_LONG, + sum.OutPktsTooLong, + MACSEC_SECY_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_TAG, + sum.InPktsNoTag, + MACSEC_SECY_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_BAD_TAG, + sum.InPktsBadTag, + MACSEC_SECY_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_UNKNOWN_SCI, + sum.InPktsUnknownSCI, + MACSEC_SECY_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_SCI, + sum.InPktsNoSCI, + MACSEC_SECY_STATS_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_STATS_ATTR_IN_PKTS_OVERRUN, + sum.InPktsOverrun, + MACSEC_SECY_STATS_ATTR_PAD)) return -EMSGSIZE; return 0; @@ -2226,8 +2271,11 @@ static int nla_put_secy(struct macsec_secy *secy, struct sk_buff *skb) if (!secy_nest) return 1; - if (nla_put_sci(skb, MACSEC_SECY_ATTR_SCI, secy->sci) || - nla_put_u64(skb, MACSEC_SECY_ATTR_CIPHER_SUITE, DEFAULT_CIPHER_ID) || + if (nla_put_sci(skb, MACSEC_SECY_ATTR_SCI, secy->sci, + MACSEC_SECY_ATTR_PAD) || + nla_put_u64_64bit(skb, MACSEC_SECY_ATTR_CIPHER_SUITE, + DEFAULT_CIPHER_ID, + MACSEC_SECY_ATTR_PAD) || nla_put_u8(skb, MACSEC_SECY_ATTR_ICV_LEN, secy->icv_len) || nla_put_u8(skb, MACSEC_SECY_ATTR_OPER, secy->operational) || nla_put_u8(skb, MACSEC_SECY_ATTR_PROTECT, secy->protect_frames) || @@ -2312,7 +2360,9 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, if (nla_put_u8(skb, MACSEC_SA_ATTR_AN, i) || nla_put_u32(skb, MACSEC_SA_ATTR_PN, tx_sa->next_pn) || - nla_put_u64(skb, MACSEC_SA_ATTR_KEYID, tx_sa->key.id) || + nla_put_u64_64bit(skb, MACSEC_SA_ATTR_KEYID, + tx_sa->key.id, + MACSEC_SA_ATTR_PAD) || nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, tx_sa->active)) { nla_nest_cancel(skb, txsa_nest); nla_nest_cancel(skb, txsa_list); @@ -2353,7 +2403,8 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, } if (nla_put_u8(skb, MACSEC_RXSC_ATTR_ACTIVE, rx_sc->active) || - nla_put_sci(skb, MACSEC_RXSC_ATTR_SCI, rx_sc->sci)) { + nla_put_sci(skb, MACSEC_RXSC_ATTR_SCI, rx_sc->sci, + MACSEC_RXSC_ATTR_PAD)) { nla_nest_cancel(skb, rxsc_nest); nla_nest_cancel(skb, rxsc_list); goto nla_put_failure; @@ -2413,7 +2464,9 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, if (nla_put_u8(skb, MACSEC_SA_ATTR_AN, i) || nla_put_u32(skb, MACSEC_SA_ATTR_PN, rx_sa->next_pn) || - nla_put_u64(skb, MACSEC_SA_ATTR_KEYID, rx_sa->key.id) || + nla_put_u64_64bit(skb, MACSEC_SA_ATTR_KEYID, + rx_sa->key.id, + MACSEC_SA_ATTR_PAD) || nla_put_u8(skb, MACSEC_SA_ATTR_ACTIVE, rx_sa->active)) { nla_nest_cancel(skb, rxsa_nest); nla_nest_cancel(skb, rxsc_nest); @@ -3145,9 +3198,9 @@ static struct net *macsec_get_link_net(const struct net_device *dev) static size_t macsec_get_size(const struct net_device *dev) { return 0 + - nla_total_size(8) + /* SCI */ + nla_total_size_64bit(8) + /* SCI */ nla_total_size(1) + /* ICV_LEN */ - nla_total_size(8) + /* CIPHER_SUITE */ + nla_total_size_64bit(8) + /* CIPHER_SUITE */ nla_total_size(4) + /* WINDOW */ nla_total_size(1) + /* ENCODING_SA */ nla_total_size(1) + /* ENCRYPT */ @@ -3166,9 +3219,11 @@ static int macsec_fill_info(struct sk_buff *skb, struct macsec_secy *secy = &macsec_priv(dev)->secy; struct macsec_tx_sc *tx_sc = &secy->tx_sc; - if (nla_put_sci(skb, IFLA_MACSEC_SCI, secy->sci) || + if (nla_put_sci(skb, IFLA_MACSEC_SCI, secy->sci, + IFLA_MACSEC_PAD) || nla_put_u8(skb, IFLA_MACSEC_ICV_LEN, secy->icv_len) || - nla_put_u64(skb, IFLA_MACSEC_CIPHER_SUITE, DEFAULT_CIPHER_ID) || + nla_put_u64_64bit(skb, IFLA_MACSEC_CIPHER_SUITE, + DEFAULT_CIPHER_ID, IFLA_MACSEC_PAD) || nla_put_u8(skb, IFLA_MACSEC_ENCODING_SA, tx_sc->encoding_sa) || nla_put_u8(skb, IFLA_MACSEC_ENCRYPT, tx_sc->encrypt) || nla_put_u8(skb, IFLA_MACSEC_PROTECT, secy->protect_frames) || diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h index 9300c08346c8..d82de331bb6b 100644 --- a/include/uapi/linux/if_link.h +++ b/include/uapi/linux/if_link.h @@ -434,6 +434,7 @@ enum { IFLA_MACSEC_SCB, IFLA_MACSEC_REPLAY_PROTECT, IFLA_MACSEC_VALIDATION, + IFLA_MACSEC_PAD, __IFLA_MACSEC_MAX, }; diff --git a/include/uapi/linux/if_macsec.h b/include/uapi/linux/if_macsec.h index 26b0d1e3e3e7..4c623d617b84 100644 --- a/include/uapi/linux/if_macsec.h +++ b/include/uapi/linux/if_macsec.h @@ -55,6 +55,7 @@ enum macsec_secy_attrs { MACSEC_SECY_ATTR_INC_SCI, MACSEC_SECY_ATTR_ES, MACSEC_SECY_ATTR_SCB, + MACSEC_SECY_ATTR_PAD, __MACSEC_SECY_ATTR_END, NUM_MACSEC_SECY_ATTR = __MACSEC_SECY_ATTR_END, MACSEC_SECY_ATTR_MAX = __MACSEC_SECY_ATTR_END - 1, @@ -66,6 +67,7 @@ enum macsec_rxsc_attrs { MACSEC_RXSC_ATTR_ACTIVE, /* config/dump, u8 0..1 */ MACSEC_RXSC_ATTR_SA_LIST, /* dump, nested */ MACSEC_RXSC_ATTR_STATS, /* dump, nested, macsec_rxsc_stats_attr */ + MACSEC_RXSC_ATTR_PAD, __MACSEC_RXSC_ATTR_END, NUM_MACSEC_RXSC_ATTR = __MACSEC_RXSC_ATTR_END, MACSEC_RXSC_ATTR_MAX = __MACSEC_RXSC_ATTR_END - 1, @@ -79,6 +81,7 @@ enum macsec_sa_attrs { MACSEC_SA_ATTR_KEY, /* config, data */ MACSEC_SA_ATTR_KEYID, /* config/dump, u64 */ MACSEC_SA_ATTR_STATS, /* dump, nested, macsec_sa_stats_attr */ + MACSEC_SA_ATTR_PAD, __MACSEC_SA_ATTR_END, NUM_MACSEC_SA_ATTR = __MACSEC_SA_ATTR_END, MACSEC_SA_ATTR_MAX = __MACSEC_SA_ATTR_END - 1, @@ -110,6 +113,7 @@ enum macsec_rxsc_stats_attr { MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_VALID, MACSEC_RXSC_STATS_ATTR_IN_PKTS_NOT_USING_SA, MACSEC_RXSC_STATS_ATTR_IN_PKTS_UNUSED_SA, + MACSEC_RXSC_STATS_ATTR_PAD, __MACSEC_RXSC_STATS_ATTR_END, NUM_MACSEC_RXSC_STATS_ATTR = __MACSEC_RXSC_STATS_ATTR_END, MACSEC_RXSC_STATS_ATTR_MAX = __MACSEC_RXSC_STATS_ATTR_END - 1, @@ -137,6 +141,7 @@ enum macsec_txsc_stats_attr { MACSEC_TXSC_STATS_ATTR_OUT_PKTS_ENCRYPTED, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_PROTECTED, MACSEC_TXSC_STATS_ATTR_OUT_OCTETS_ENCRYPTED, + MACSEC_TXSC_STATS_ATTR_PAD, __MACSEC_TXSC_STATS_ATTR_END, NUM_MACSEC_TXSC_STATS_ATTR = __MACSEC_TXSC_STATS_ATTR_END, MACSEC_TXSC_STATS_ATTR_MAX = __MACSEC_TXSC_STATS_ATTR_END - 1, @@ -153,6 +158,7 @@ enum macsec_secy_stats_attr { MACSEC_SECY_STATS_ATTR_IN_PKTS_UNKNOWN_SCI, MACSEC_SECY_STATS_ATTR_IN_PKTS_NO_SCI, MACSEC_SECY_STATS_ATTR_IN_PKTS_OVERRUN, + MACSEC_SECY_STATS_ATTR_PAD, __MACSEC_SECY_STATS_ATTR_END, NUM_MACSEC_SECY_STATS_ATTR = __MACSEC_SECY_STATS_ATTR_END, MACSEC_SECY_STATS_ATTR_MAX = __MACSEC_SECY_STATS_ATTR_END - 1, -- 2.8.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Dichtel Subject: [PATCH net-next 1/8] macsec: use nla_put_u64_64bit() Date: Tue, 26 Apr 2016 10:06:11 +0200 Message-ID: <1461657978-13360-2-git-send-email-nicolas.dichtel@6wind.com> References: <1461657978-13360-1-git-send-email-nicolas.dichtel@6wind.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: dev-yBygre7rU0TnMu66kgdUjQ@public.gmane.org, Nicolas Dichtel , sd-y1jBWg8GRStKuXlAQpz2QA@public.gmane.org, linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, jhs-jkUAjuhPggJWk0Htik3J/w@public.gmane.org, lars.ellenberg-63ez5xqkn6DQT0dZR+AlfA@public.gmane.org, jack-IBi9RG/b67k@public.gmane.org, johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org, philipp.reisner-63ez5xqkn6DQT0dZR+AlfA@public.gmane.org, davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org, kvalo-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, drbd-dev-cunTk1MwBs8qoQakbn7OcQ@public.gmane.org To: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Return-path: In-Reply-To: <1461657978-13360-1-git-send-email-nicolas.dichtel-pdR9zngts4EAvxtiuMwx3w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces-yBygre7rU0TnMu66kgdUjQ@public.gmane.org Sender: "dev" List-Id: netdev.vger.kernel.org U2lnbmVkLW9mZi1ieTogTmljb2xhcyBEaWNodGVsIDxuaWNvbGFzLmRpY2h0ZWxANndpbmQuY29t PgotLS0KIGRyaXZlcnMvbmV0L21hY3NlYy5jICAgICAgICAgICB8IDEyMSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogaW5jbHVkZS91YXBpL2xpbnV4L2lmX2xpbmsu aCAgIHwgICAxICsKIGluY2x1ZGUvdWFwaS9saW51eC9pZl9tYWNzZWMuaCB8ICAgNiArKwogMyBm aWxlcyBjaGFuZ2VkLCA5NSBpbnNlcnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL25ldC9tYWNzZWMuYyBiL2RyaXZlcnMvbmV0L21hY3NlYy5jCmluZGV4IDZj YWE3MjQwMmRlNy4uYTE3MmExZmZhMTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNzZWMu YworKysgYi9kcml2ZXJzL25ldC9tYWNzZWMuYwpAQCAtMTQwNSw5ICsxNDA1LDEwIEBAIHN0YXRp YyBzY2lfdCBubGFfZ2V0X3NjaShjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEpCiAJcmV0dXJuIChf X2ZvcmNlIHNjaV90KW5sYV9nZXRfdTY0KG5sYSk7CiB9CiAKLXN0YXRpYyBpbnQgbmxhX3B1dF9z Y2koc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBzY2lfdCB2YWx1ZSkKK3N0YXRp YyBpbnQgbmxhX3B1dF9zY2koc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBzY2lf dCB2YWx1ZSwKKwkJICAgICAgIGludCBwYWRhdHRyKQogewotCXJldHVybiBubGFfcHV0X3U2NChz a2IsIGF0dHJ0eXBlLCAoX19mb3JjZSB1NjQpdmFsdWUpOworCXJldHVybiBubGFfcHV0X3U2NF82 NGJpdChza2IsIGF0dHJ0eXBlLCAoX19mb3JjZSB1NjQpdmFsdWUsIHBhZGF0dHIpOwogfQogCiBz dGF0aWMgc3RydWN0IG1hY3NlY190eF9zYSAqZ2V0X3R4c2FfZnJvbV9ubChzdHJ1Y3QgbmV0ICpu ZXQsCkBAIC0yMTMxLDE2ICsyMTMyLDM2IEBAIHN0YXRpYyBpbnQgY29weV9yeF9zY19zdGF0cyhz dHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlzdW0uSW5Qa3RzVW51c2VkU0EgICAgKz0gdG1wLkluUGt0 c1VudXNlZFNBOwogCX0KIAotCWlmIChubGFfcHV0X3U2NChza2IsIE1BQ1NFQ19SWFNDX1NUQVRT X0FUVFJfSU5fT0NURVRTX1ZBTElEQVRFRCwgc3VtLkluT2N0ZXRzVmFsaWRhdGVkKSB8fAotCSAg ICBubGFfcHV0X3U2NChza2IsIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfSU5fT0NURVRTX0RFQ1JZ UFRFRCwgc3VtLkluT2N0ZXRzRGVjcnlwdGVkKSB8fAotCSAgICBubGFfcHV0X3U2NChza2IsIE1B Q1NFQ19SWFNDX1NUQVRTX0FUVFJfSU5fUEtUU19VTkNIRUNLRUQsIHN1bS5JblBrdHNVbmNoZWNr ZWQpIHx8Ci0JICAgIG5sYV9wdXRfdTY0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9Q S1RTX0RFTEFZRUQsIHN1bS5JblBrdHNEZWxheWVkKSB8fAotCSAgICBubGFfcHV0X3U2NChza2Is IE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfSU5fUEtUU19PSywgc3VtLkluUGt0c09LKSB8fAotCSAg ICBubGFfcHV0X3U2NChza2IsIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfSU5fUEtUU19JTlZBTElE LCBzdW0uSW5Qa3RzSW52YWxpZCkgfHwKLQkgICAgbmxhX3B1dF91NjQoc2tiLCBNQUNTRUNfUlhT Q19TVEFUU19BVFRSX0lOX1BLVFNfTEFURSwgc3VtLkluUGt0c0xhdGUpIHx8Ci0JICAgIG5sYV9w dXRfdTY0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX05PVF9WQUxJRCwgc3Vt LkluUGt0c05vdFZhbGlkKSB8fAotCSAgICBubGFfcHV0X3U2NChza2IsIE1BQ1NFQ19SWFNDX1NU QVRTX0FUVFJfSU5fUEtUU19OT1RfVVNJTkdfU0EsIHN1bS5JblBrdHNOb3RVc2luZ1NBKSB8fAot CSAgICBubGFfcHV0X3U2NChza2IsIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfSU5fUEtUU19VTlVT RURfU0EsIHN1bS5JblBrdHNVbnVzZWRTQSkpCisJaWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwg TUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9PQ1RFVFNfVkFMSURBVEVELAorCQkJICAgICAgc3Vt LkluT2N0ZXRzVmFsaWRhdGVkLAorCQkJICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQp IHx8CisJICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9J Tl9PQ1RFVFNfREVDUllQVEVELAorCQkJICAgICAgc3VtLkluT2N0ZXRzRGVjcnlwdGVkLAorCQkJ ICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8CisJICAgIG5sYV9wdXRfdTY0XzY0 Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX1VOQ0hFQ0tFRCwKKwkJCSAg ICAgIHN1bS5JblBrdHNVbmNoZWNrZWQsCisJCQkgICAgICBNQUNTRUNfUlhTQ19TVEFUU19BVFRS X1BBRCkgfHwKKwkgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfUlhTQ19TVEFUU19B VFRSX0lOX1BLVFNfREVMQVlFRCwKKwkJCSAgICAgIHN1bS5JblBrdHNEZWxheWVkLAorCQkJICAg ICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8CisJICAgIG5sYV9wdXRfdTY0XzY0Yml0 KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX09LLAorCQkJICAgICAgc3VtLklu UGt0c09LLAorCQkJICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8CisJICAgIG5s YV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX0lOVkFM SUQsCisJCQkgICAgICBzdW0uSW5Qa3RzSW52YWxpZCwKKwkJCSAgICAgIE1BQ1NFQ19SWFNDX1NU QVRTX0FUVFJfUEFEKSB8fAorCSAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19SWFND X1NUQVRTX0FUVFJfSU5fUEtUU19MQVRFLAorCQkJICAgICAgc3VtLkluUGt0c0xhdGUsCisJCQkg ICAgICBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX1BBRCkgfHwKKwkgICAgbmxhX3B1dF91NjRfNjRi aXQoc2tiLCBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX0lOX1BLVFNfTk9UX1ZBTElELAorCQkJICAg ICAgc3VtLkluUGt0c05vdFZhbGlkLAorCQkJICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9Q QUQpIHx8CisJICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRU Ul9JTl9QS1RTX05PVF9VU0lOR19TQSwKKwkJCSAgICAgIHN1bS5JblBrdHNOb3RVc2luZ1NBLAor CQkJICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8CisJICAgIG5sYV9wdXRfdTY0 XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX1VOVVNFRF9TQSwKKwkJ CSAgICAgIHN1bS5JblBrdHNVbnVzZWRTQSwKKwkJCSAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FU VFJfUEFEKSkKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAogCXJldHVybiAwOwpAQCAtMjE2OSwxMCAr MjE5MCwxOCBAQCBzdGF0aWMgaW50IGNvcHlfdHhfc2Nfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNr YiwKIAkJc3VtLk91dE9jdGV0c0VuY3J5cHRlZCArPSB0bXAuT3V0T2N0ZXRzRW5jcnlwdGVkOwog CX0KIAotCWlmIChubGFfcHV0X3U2NChza2IsIE1BQ1NFQ19UWFNDX1NUQVRTX0FUVFJfT1VUX1BL VFNfUFJPVEVDVEVELCBzdW0uT3V0UGt0c1Byb3RlY3RlZCkgfHwKLQkgICAgbmxhX3B1dF91NjQo c2tiLCBNQUNTRUNfVFhTQ19TVEFUU19BVFRSX09VVF9QS1RTX0VOQ1JZUFRFRCwgc3VtLk91dFBr dHNFbmNyeXB0ZWQpIHx8Ci0JICAgIG5sYV9wdXRfdTY0KHNrYiwgTUFDU0VDX1RYU0NfU1RBVFNf QVRUUl9PVVRfT0NURVRTX1BST1RFQ1RFRCwgc3VtLk91dE9jdGV0c1Byb3RlY3RlZCkgfHwKLQkg ICAgbmxhX3B1dF91NjQoc2tiLCBNQUNTRUNfVFhTQ19TVEFUU19BVFRSX09VVF9PQ1RFVFNfRU5D UllQVEVELCBzdW0uT3V0T2N0ZXRzRW5jcnlwdGVkKSkKKwlpZiAobmxhX3B1dF91NjRfNjRiaXQo c2tiLCBNQUNTRUNfVFhTQ19TVEFUU19BVFRSX09VVF9QS1RTX1BST1RFQ1RFRCwKKwkJCSAgICAg IHN1bS5PdXRQa3RzUHJvdGVjdGVkLAorCQkJICAgICAgTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9Q QUQpIHx8CisJICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1RYU0NfU1RBVFNfQVRU Ul9PVVRfUEtUU19FTkNSWVBURUQsCisJCQkgICAgICBzdW0uT3V0UGt0c0VuY3J5cHRlZCwKKwkJ CSAgICAgIE1BQ1NFQ19UWFNDX1NUQVRTX0FUVFJfUEFEKSB8fAorCSAgICBubGFfcHV0X3U2NF82 NGJpdChza2IsIE1BQ1NFQ19UWFNDX1NUQVRTX0FUVFJfT1VUX09DVEVUU19QUk9URUNURUQsCisJ CQkgICAgICBzdW0uT3V0T2N0ZXRzUHJvdGVjdGVkLAorCQkJICAgICAgTUFDU0VDX1RYU0NfU1RB VFNfQVRUUl9QQUQpIHx8CisJICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1RYU0Nf U1RBVFNfQVRUUl9PVVRfT0NURVRTX0VOQ1JZUFRFRCwKKwkJCSAgICAgIHN1bS5PdXRPY3RldHNF bmNyeXB0ZWQsCisJCQkgICAgICBNQUNTRUNfVFhTQ19TVEFUU19BVFRSX1BBRCkpCiAJCXJldHVy biAtRU1TR1NJWkU7CiAKIAlyZXR1cm4gMDsKQEAgLTIyMDUsMTQgKzIyMzQsMzAgQEAgc3RhdGlj IGludCBjb3B5X3NlY3lfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJc3VtLkluUGt0c092 ZXJydW4gICAgKz0gdG1wLkluUGt0c092ZXJydW47CiAJfQogCi0JaWYgKG5sYV9wdXRfdTY0KHNr YiwgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9PVVRfUEtUU19VTlRBR0dFRCwgc3VtLk91dFBrdHNV bnRhZ2dlZCkgfHwKLQkgICAgbmxhX3B1dF91NjQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRS X0lOX1BLVFNfVU5UQUdHRUQsIHN1bS5JblBrdHNVbnRhZ2dlZCkgfHwKLQkgICAgbmxhX3B1dF91 NjQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX09VVF9QS1RTX1RPT19MT05HLCBzdW0uT3V0 UGt0c1Rvb0xvbmcpIHx8Ci0JICAgIG5sYV9wdXRfdTY0KHNrYiwgTUFDU0VDX1NFQ1lfU1RBVFNf QVRUUl9JTl9QS1RTX05PX1RBRywgc3VtLkluUGt0c05vVGFnKSB8fAotCSAgICBubGFfcHV0X3U2 NChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtUU19CQURfVEFHLCBzdW0uSW5Qa3Rz QmFkVGFnKSB8fAotCSAgICBubGFfcHV0X3U2NChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJf SU5fUEtUU19VTktOT1dOX1NDSSwgc3VtLkluUGt0c1Vua25vd25TQ0kpIHx8Ci0JICAgIG5sYV9w dXRfdTY0KHNrYiwgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9JTl9QS1RTX05PX1NDSSwgc3VtLklu UGt0c05vU0NJKSB8fAotCSAgICBubGFfcHV0X3U2NChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FU VFJfSU5fUEtUU19PVkVSUlVOLCBzdW0uSW5Qa3RzT3ZlcnJ1bikpCisJaWYgKG5sYV9wdXRfdTY0 XzY0Yml0KHNrYiwgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9PVVRfUEtUU19VTlRBR0dFRCwKKwkJ CSAgICAgIHN1bS5PdXRQa3RzVW50YWdnZWQsCisJCQkgICAgICBNQUNTRUNfU0VDWV9TVEFUU19B VFRSX1BBRCkgfHwKKwkgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFU U19BVFRSX0lOX1BLVFNfVU5UQUdHRUQsCisJCQkgICAgICBzdW0uSW5Qa3RzVW50YWdnZWQsCisJ CQkgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHwKKwkgICAgbmxhX3B1dF91NjRf NjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX09VVF9QS1RTX1RPT19MT05HLAorCQkJ ICAgICAgc3VtLk91dFBrdHNUb29Mb25nLAorCQkJICAgICAgTUFDU0VDX1NFQ1lfU1RBVFNfQVRU Ul9QQUQpIHx8CisJICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1NFQ1lfU1RBVFNf QVRUUl9JTl9QS1RTX05PX1RBRywKKwkJCSAgICAgIHN1bS5JblBrdHNOb1RhZywKKwkJCSAgICAg IE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfUEFEKSB8fAorCSAgICBubGFfcHV0X3U2NF82NGJpdChz a2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtUU19CQURfVEFHLAorCQkJICAgICAgc3Vt LkluUGt0c0JhZFRhZywKKwkJCSAgICAgIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfUEFEKSB8fAor CSAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtU U19VTktOT1dOX1NDSSwKKwkJCSAgICAgIHN1bS5JblBrdHNVbmtub3duU0NJLAorCQkJICAgICAg TUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9QQUQpIHx8CisJICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNr YiwgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9JTl9QS1RTX05PX1NDSSwKKwkJCSAgICAgIHN1bS5J blBrdHNOb1NDSSwKKwkJCSAgICAgIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfUEFEKSB8fAorCSAg ICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtUU19P VkVSUlVOLAorCQkJICAgICAgc3VtLkluUGt0c092ZXJydW4sCisJCQkgICAgICBNQUNTRUNfU0VD WV9TVEFUU19BVFRSX1BBRCkpCiAJCXJldHVybiAtRU1TR1NJWkU7CiAKIAlyZXR1cm4gMDsKQEAg LTIyMjYsOCArMjI3MSwxMSBAQCBzdGF0aWMgaW50IG5sYV9wdXRfc2VjeShzdHJ1Y3QgbWFjc2Vj X3NlY3kgKnNlY3ksIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKCFzZWN5X25lc3QpCiAJCXJl dHVybiAxOwogCi0JaWYgKG5sYV9wdXRfc2NpKHNrYiwgTUFDU0VDX1NFQ1lfQVRUUl9TQ0ksIHNl Y3ktPnNjaSkgfHwKLQkgICAgbmxhX3B1dF91NjQoc2tiLCBNQUNTRUNfU0VDWV9BVFRSX0NJUEhF Ul9TVUlURSwgREVGQVVMVF9DSVBIRVJfSUQpIHx8CisJaWYgKG5sYV9wdXRfc2NpKHNrYiwgTUFD U0VDX1NFQ1lfQVRUUl9TQ0ksIHNlY3ktPnNjaSwKKwkJCU1BQ1NFQ19TRUNZX0FUVFJfUEFEKSB8 fAorCSAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX0FUVFJfQ0lQSEVSX1NV SVRFLAorCQkJICAgICAgREVGQVVMVF9DSVBIRVJfSUQsCisJCQkgICAgICBNQUNTRUNfU0VDWV9B VFRSX1BBRCkgfHwKIAkgICAgbmxhX3B1dF91OChza2IsIE1BQ1NFQ19TRUNZX0FUVFJfSUNWX0xF Tiwgc2VjeS0+aWN2X2xlbikgfHwKIAkgICAgbmxhX3B1dF91OChza2IsIE1BQ1NFQ19TRUNZX0FU VFJfT1BFUiwgc2VjeS0+b3BlcmF0aW9uYWwpIHx8CiAJICAgIG5sYV9wdXRfdTgoc2tiLCBNQUNT RUNfU0VDWV9BVFRSX1BST1RFQ1QsIHNlY3ktPnByb3RlY3RfZnJhbWVzKSB8fApAQCAtMjMxMiw3 ICsyMzYwLDkgQEAgc3RhdGljIGludCBkdW1wX3NlY3koc3RydWN0IG1hY3NlY19zZWN5ICpzZWN5 LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCiAJCWlmIChubGFfcHV0X3U4KHNrYiwgTUFDU0VD X1NBX0FUVFJfQU4sIGkpIHx8CiAJCSAgICBubGFfcHV0X3UzMihza2IsIE1BQ1NFQ19TQV9BVFRS X1BOLCB0eF9zYS0+bmV4dF9wbikgfHwKLQkJICAgIG5sYV9wdXRfdTY0KHNrYiwgTUFDU0VDX1NB X0FUVFJfS0VZSUQsIHR4X3NhLT5rZXkuaWQpIHx8CisJCSAgICBubGFfcHV0X3U2NF82NGJpdChz a2IsIE1BQ1NFQ19TQV9BVFRSX0tFWUlELAorCQkJCSAgICAgIHR4X3NhLT5rZXkuaWQsCisJCQkJ ICAgICAgTUFDU0VDX1NBX0FUVFJfUEFEKSB8fAogCQkgICAgbmxhX3B1dF91OChza2IsIE1BQ1NF Q19TQV9BVFRSX0FDVElWRSwgdHhfc2EtPmFjdGl2ZSkpIHsKIAkJCW5sYV9uZXN0X2NhbmNlbChz a2IsIHR4c2FfbmVzdCk7CiAJCQlubGFfbmVzdF9jYW5jZWwoc2tiLCB0eHNhX2xpc3QpOwpAQCAt MjM1Myw3ICsyNDAzLDggQEAgc3RhdGljIGludCBkdW1wX3NlY3koc3RydWN0IG1hY3NlY19zZWN5 ICpzZWN5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQl9CiAKIAkJaWYgKG5sYV9wdXRfdTgo c2tiLCBNQUNTRUNfUlhTQ19BVFRSX0FDVElWRSwgcnhfc2MtPmFjdGl2ZSkgfHwKLQkJICAgIG5s YV9wdXRfc2NpKHNrYiwgTUFDU0VDX1JYU0NfQVRUUl9TQ0ksIHJ4X3NjLT5zY2kpKSB7CisJCSAg ICBubGFfcHV0X3NjaShza2IsIE1BQ1NFQ19SWFNDX0FUVFJfU0NJLCByeF9zYy0+c2NpLAorCQkJ CU1BQ1NFQ19SWFNDX0FUVFJfUEFEKSkgewogCQkJbmxhX25lc3RfY2FuY2VsKHNrYiwgcnhzY19u ZXN0KTsKIAkJCW5sYV9uZXN0X2NhbmNlbChza2IsIHJ4c2NfbGlzdCk7CiAJCQlnb3RvIG5sYV9w dXRfZmFpbHVyZTsKQEAgLTI0MTMsNyArMjQ2NCw5IEBAIHN0YXRpYyBpbnQgZHVtcF9zZWN5KHN0 cnVjdCBtYWNzZWNfc2VjeSAqc2VjeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAogCQkJaWYg KG5sYV9wdXRfdTgoc2tiLCBNQUNTRUNfU0FfQVRUUl9BTiwgaSkgfHwKIAkJCSAgICBubGFfcHV0 X3UzMihza2IsIE1BQ1NFQ19TQV9BVFRSX1BOLCByeF9zYS0+bmV4dF9wbikgfHwKLQkJCSAgICBu bGFfcHV0X3U2NChza2IsIE1BQ1NFQ19TQV9BVFRSX0tFWUlELCByeF9zYS0+a2V5LmlkKSB8fAor CQkJICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1NBX0FUVFJfS0VZSUQsCisJCQkJ CSAgICAgIHJ4X3NhLT5rZXkuaWQsCisJCQkJCSAgICAgIE1BQ1NFQ19TQV9BVFRSX1BBRCkgfHwK IAkJCSAgICBubGFfcHV0X3U4KHNrYiwgTUFDU0VDX1NBX0FUVFJfQUNUSVZFLCByeF9zYS0+YWN0 aXZlKSkgewogCQkJCW5sYV9uZXN0X2NhbmNlbChza2IsIHJ4c2FfbmVzdCk7CiAJCQkJbmxhX25l c3RfY2FuY2VsKHNrYiwgcnhzY19uZXN0KTsKQEAgLTMxNDUsOSArMzE5OCw5IEBAIHN0YXRpYyBz dHJ1Y3QgbmV0ICptYWNzZWNfZ2V0X2xpbmtfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYpCiBzdGF0aWMgc2l6ZV90IG1hY3NlY19nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2KQogewogCXJldHVybiAwICsKLQkJbmxhX3RvdGFsX3NpemUoOCkgKyAvKiBTQ0kgKi8K KwkJbmxhX3RvdGFsX3NpemVfNjRiaXQoOCkgKyAvKiBTQ0kgKi8KIAkJbmxhX3RvdGFsX3NpemUo MSkgKyAvKiBJQ1ZfTEVOICovCi0JCW5sYV90b3RhbF9zaXplKDgpICsgLyogQ0lQSEVSX1NVSVRF ICovCisJCW5sYV90b3RhbF9zaXplXzY0Yml0KDgpICsgLyogQ0lQSEVSX1NVSVRFICovCiAJCW5s YV90b3RhbF9zaXplKDQpICsgLyogV0lORE9XICovCiAJCW5sYV90b3RhbF9zaXplKDEpICsgLyog RU5DT0RJTkdfU0EgKi8KIAkJbmxhX3RvdGFsX3NpemUoMSkgKyAvKiBFTkNSWVBUICovCkBAIC0z MTY2LDkgKzMyMTksMTEgQEAgc3RhdGljIGludCBtYWNzZWNfZmlsbF9pbmZvKHN0cnVjdCBza19i dWZmICpza2IsCiAJc3RydWN0IG1hY3NlY19zZWN5ICpzZWN5ID0gJm1hY3NlY19wcml2KGRldikt PnNlY3k7CiAJc3RydWN0IG1hY3NlY190eF9zYyAqdHhfc2MgPSAmc2VjeS0+dHhfc2M7CiAKLQlp ZiAobmxhX3B1dF9zY2koc2tiLCBJRkxBX01BQ1NFQ19TQ0ksIHNlY3ktPnNjaSkgfHwKKwlpZiAo bmxhX3B1dF9zY2koc2tiLCBJRkxBX01BQ1NFQ19TQ0ksIHNlY3ktPnNjaSwKKwkJCUlGTEFfTUFD U0VDX1BBRCkgfHwKIAkgICAgbmxhX3B1dF91OChza2IsIElGTEFfTUFDU0VDX0lDVl9MRU4sIHNl Y3ktPmljdl9sZW4pIHx8Ci0JICAgIG5sYV9wdXRfdTY0KHNrYiwgSUZMQV9NQUNTRUNfQ0lQSEVS X1NVSVRFLCBERUZBVUxUX0NJUEhFUl9JRCkgfHwKKwkgICAgbmxhX3B1dF91NjRfNjRiaXQoc2ti LCBJRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEUsCisJCQkgICAgICBERUZBVUxUX0NJUEhFUl9JRCwg SUZMQV9NQUNTRUNfUEFEKSB8fAogCSAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9NQUNTRUNfRU5D T0RJTkdfU0EsIHR4X3NjLT5lbmNvZGluZ19zYSkgfHwKIAkgICAgbmxhX3B1dF91OChza2IsIElG TEFfTUFDU0VDX0VOQ1JZUFQsIHR4X3NjLT5lbmNyeXB0KSB8fAogCSAgICBubGFfcHV0X3U4KHNr YiwgSUZMQV9NQUNTRUNfUFJPVEVDVCwgc2VjeS0+cHJvdGVjdF9mcmFtZXMpIHx8CmRpZmYgLS1n aXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfbGluay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lm X2xpbmsuaAppbmRleCA5MzAwYzA4MzQ2YzguLmQ4MmRlMzMxYmI2YiAxMDA2NDQKLS0tIGEvaW5j bHVkZS91YXBpL2xpbnV4L2lmX2xpbmsuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfbGlu ay5oCkBAIC00MzQsNiArNDM0LDcgQEAgZW51bSB7CiAJSUZMQV9NQUNTRUNfU0NCLAogCUlGTEFf TUFDU0VDX1JFUExBWV9QUk9URUNULAogCUlGTEFfTUFDU0VDX1ZBTElEQVRJT04sCisJSUZMQV9N QUNTRUNfUEFELAogCV9fSUZMQV9NQUNTRUNfTUFYLAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVk ZS91YXBpL2xpbnV4L2lmX21hY3NlYy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX21hY3NlYy5o CmluZGV4IDI2YjBkMWUzZTNlNy4uNGM2MjNkNjE3Yjg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Vh cGkvbGludXgvaWZfbWFjc2VjLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX21hY3NlYy5o CkBAIC01NSw2ICs1NSw3IEBAIGVudW0gbWFjc2VjX3NlY3lfYXR0cnMgewogCU1BQ1NFQ19TRUNZ X0FUVFJfSU5DX1NDSSwKIAlNQUNTRUNfU0VDWV9BVFRSX0VTLAogCU1BQ1NFQ19TRUNZX0FUVFJf U0NCLAorCU1BQ1NFQ19TRUNZX0FUVFJfUEFELAogCV9fTUFDU0VDX1NFQ1lfQVRUUl9FTkQsCiAJ TlVNX01BQ1NFQ19TRUNZX0FUVFIgPSBfX01BQ1NFQ19TRUNZX0FUVFJfRU5ELAogCU1BQ1NFQ19T RUNZX0FUVFJfTUFYID0gX19NQUNTRUNfU0VDWV9BVFRSX0VORCAtIDEsCkBAIC02Niw2ICs2Nyw3 IEBAIGVudW0gbWFjc2VjX3J4c2NfYXR0cnMgewogCU1BQ1NFQ19SWFNDX0FUVFJfQUNUSVZFLCAg LyogY29uZmlnL2R1bXAsIHU4IDAuLjEgKi8KIAlNQUNTRUNfUlhTQ19BVFRSX1NBX0xJU1QsIC8q IGR1bXAsIG5lc3RlZCAqLwogCU1BQ1NFQ19SWFNDX0FUVFJfU1RBVFMsICAgLyogZHVtcCwgbmVz dGVkLCBtYWNzZWNfcnhzY19zdGF0c19hdHRyICovCisJTUFDU0VDX1JYU0NfQVRUUl9QQUQsCiAJ X19NQUNTRUNfUlhTQ19BVFRSX0VORCwKIAlOVU1fTUFDU0VDX1JYU0NfQVRUUiA9IF9fTUFDU0VD X1JYU0NfQVRUUl9FTkQsCiAJTUFDU0VDX1JYU0NfQVRUUl9NQVggPSBfX01BQ1NFQ19SWFNDX0FU VFJfRU5EIC0gMSwKQEAgLTc5LDYgKzgxLDcgQEAgZW51bSBtYWNzZWNfc2FfYXR0cnMgewogCU1B Q1NFQ19TQV9BVFRSX0tFWSwgICAgLyogY29uZmlnLCBkYXRhICovCiAJTUFDU0VDX1NBX0FUVFJf S0VZSUQsICAvKiBjb25maWcvZHVtcCwgdTY0ICovCiAJTUFDU0VDX1NBX0FUVFJfU1RBVFMsICAv KiBkdW1wLCBuZXN0ZWQsIG1hY3NlY19zYV9zdGF0c19hdHRyICovCisJTUFDU0VDX1NBX0FUVFJf UEFELAogCV9fTUFDU0VDX1NBX0FUVFJfRU5ELAogCU5VTV9NQUNTRUNfU0FfQVRUUiA9IF9fTUFD U0VDX1NBX0FUVFJfRU5ELAogCU1BQ1NFQ19TQV9BVFRSX01BWCA9IF9fTUFDU0VDX1NBX0FUVFJf RU5EIC0gMSwKQEAgLTExMCw2ICsxMTMsNyBAQCBlbnVtIG1hY3NlY19yeHNjX3N0YXRzX2F0dHIg ewogCU1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfSU5fUEtUU19OT1RfVkFMSUQsCiAJTUFDU0VDX1JY U0NfU1RBVFNfQVRUUl9JTl9QS1RTX05PVF9VU0lOR19TQSwKIAlNQUNTRUNfUlhTQ19TVEFUU19B VFRSX0lOX1BLVFNfVU5VU0VEX1NBLAorCU1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFELAogCV9f TUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9FTkQsCiAJTlVNX01BQ1NFQ19SWFNDX1NUQVRTX0FUVFIg PSBfX01BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfRU5ELAogCU1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJf TUFYID0gX19NQUNTRUNfUlhTQ19TVEFUU19BVFRSX0VORCAtIDEsCkBAIC0xMzcsNiArMTQxLDcg QEAgZW51bSBtYWNzZWNfdHhzY19zdGF0c19hdHRyIHsKIAlNQUNTRUNfVFhTQ19TVEFUU19BVFRS X09VVF9QS1RTX0VOQ1JZUFRFRCwKIAlNQUNTRUNfVFhTQ19TVEFUU19BVFRSX09VVF9PQ1RFVFNf UFJPVEVDVEVELAogCU1BQ1NFQ19UWFNDX1NUQVRTX0FUVFJfT1VUX09DVEVUU19FTkNSWVBURUQs CisJTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9QQUQsCiAJX19NQUNTRUNfVFhTQ19TVEFUU19BVFRS X0VORCwKIAlOVU1fTUFDU0VDX1RYU0NfU1RBVFNfQVRUUiA9IF9fTUFDU0VDX1RYU0NfU1RBVFNf QVRUUl9FTkQsCiAJTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9NQVggPSBfX01BQ1NFQ19UWFNDX1NU QVRTX0FUVFJfRU5EIC0gMSwKQEAgLTE1Myw2ICsxNTgsNyBAQCBlbnVtIG1hY3NlY19zZWN5X3N0 YXRzX2F0dHIgewogCU1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtUU19VTktOT1dOX1NDSSwK IAlNQUNTRUNfU0VDWV9TVEFUU19BVFRSX0lOX1BLVFNfTk9fU0NJLAogCU1BQ1NFQ19TRUNZX1NU QVRTX0FUVFJfSU5fUEtUU19PVkVSUlVOLAorCU1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfUEFELAog CV9fTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9FTkQsCiAJTlVNX01BQ1NFQ19TRUNZX1NUQVRTX0FU VFIgPSBfX01BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfRU5ELAogCU1BQ1NFQ19TRUNZX1NUQVRTX0FU VFJfTUFYID0gX19NQUNTRUNfU0VDWV9TVEFUU19BVFRSX0VORCAtIDEsCi0tIAoyLjguMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZGV2IG1haWxpbmcg bGlzdApkZXZAb3BlbnZzd2l0Y2gub3JnCmh0dHA6Ly9vcGVudnN3aXRjaC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kZXYK