From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2AD91C47087 for ; Fri, 28 May 2021 22:53:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0DDA7611F0 for ; Fri, 28 May 2021 22:53:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229528AbhE1Wyc (ORCPT ); Fri, 28 May 2021 18:54:32 -0400 Received: from mail.netfilter.org ([217.70.188.207]:60892 "EHLO mail.netfilter.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229620AbhE1Wya (ORCPT ); Fri, 28 May 2021 18:54:30 -0400 Received: from netfilter.org (unknown [90.77.255.23]) by mail.netfilter.org (Postfix) with ESMTPSA id 866276439D; Sat, 29 May 2021 00:51:50 +0200 (CEST) Date: Sat, 29 May 2021 00:52:51 +0200 From: Pablo Neira Ayuso To: Florian Westphal Cc: kernel test robot , kbuild-all@lists.01.org, netfilter-devel@vger.kernel.org, coreteam@netfilter.org Subject: Re: [nf-next:master 4/14] net/netfilter/nft_set_pipapo.c:412:6: error: static declaration of 'nft_pipapo_lookup' follows non-static declaration Message-ID: <20210528225251.GA28391@salvia> References: <202105290441.yixDLttm-lkp@intel.com> <20210528213001.GA10732@breakpoint.cc> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="jI8keyz6grp/JLjh" Content-Disposition: inline In-Reply-To: <20210528213001.GA10732@breakpoint.cc> User-Agent: Mutt/1.10.1 (2018-07-13) Precedence: bulk List-ID: X-Mailing-List: netfilter-devel@vger.kernel.org --jI8keyz6grp/JLjh Content-Type: text/plain; charset=utf-8 Content-Disposition: inline On Fri, May 28, 2021 at 11:30:01PM +0200, Florian Westphal wrote: > kernel test robot wrote: > > All errors (new ones prefixed by >>): > > > > >> net/netfilter/nft_set_pipapo.c:412:6: error: static declaration of 'nft_pipapo_lookup' follows non-static declaration > > 412 | bool nft_pipapo_lookup(const struct net *net, const struct nft_set *set, > > | ^~~~~~~~~~~~~~~~~ > > In file included from net/netfilter/nft_set_pipapo.c:343: > > net/netfilter/nft_set_pipapo.h:181:6: note: previous declaration of 'nft_pipapo_lookup' was here > > 181 | bool nft_pipapo_lookup(const struct net *net, const struct nft_set *set, > > | ^~~~~~~~~~~~~~~~~ > > > > > > vim +/nft_pipapo_lookup +412 net/netfilter/nft_set_pipapo.c > > > > 3c4287f62044a9 Stefano Brivio 2020-01-22 399 > > 3c4287f62044a9 Stefano Brivio 2020-01-22 400 /** > > 3c4287f62044a9 Stefano Brivio 2020-01-22 401 * nft_pipapo_lookup() - Lookup function > > 3c4287f62044a9 Stefano Brivio 2020-01-22 402 * @net: Network namespace > > 3c4287f62044a9 Stefano Brivio 2020-01-22 403 * @set: nftables API set representation > > 3db86c397f608b Andrew Lunn 2020-07-13 404 * @key: nftables API element representation containing key data > > 3c4287f62044a9 Stefano Brivio 2020-01-22 405 * @ext: nftables API extension pointer, filled with matching reference > > 3c4287f62044a9 Stefano Brivio 2020-01-22 406 * > > 3c4287f62044a9 Stefano Brivio 2020-01-22 407 * For more details, see DOC: Theory of Operation. > > 3c4287f62044a9 Stefano Brivio 2020-01-22 408 * > > 3c4287f62044a9 Stefano Brivio 2020-01-22 409 * Return: true on match, false otherwise. > > 3c4287f62044a9 Stefano Brivio 2020-01-22 410 */ > > a890630241c76a Florian Westphal 2021-05-13 411 INDIRECT_CALLABLE_SCOPE > > This line needs to be dropped after the nf merge. And bool nft_pipapo_lookup(...) needs to be moved away from #ifdef CONFIG_RETPOLINE in nf_tables_core.h I'm attaching the patch I have here after this changes. However, this is exacty what Stephen Rothwell suggested to fix but Stefano mentioned this is not the right fix... --jI8keyz6grp/JLjh Content-Type: text/x-diff; charset=utf-8 Content-Disposition: attachment; filename="0001-netfilter-nf_tables-prefer-direct-calls-for-set-look.patch" >From 4fdcdd409dda1b2cd96d763cf614ef44772167e3 Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Thu, 13 May 2021 22:29:56 +0200 Subject: [PATCH] netfilter: nf_tables: prefer direct calls for set lookups Extend nft_set_do_lookup() to use direct calls when retpoline feature is enabled. Signed-off-by: Florian Westphal Signed-off-by: Pablo Neira Ayuso --- include/net/netfilter/nf_tables_core.h | 24 ++++++++++++++++++++ net/netfilter/nft_lookup.c | 31 ++++++++++++++++++++++++++ net/netfilter/nft_set_bitmap.c | 5 +++-- net/netfilter/nft_set_hash.c | 17 ++++++++------ net/netfilter/nft_set_pipapo.h | 2 -- net/netfilter/nft_set_pipapo_avx2.h | 2 -- net/netfilter/nft_set_rbtree.c | 5 +++-- 7 files changed, 71 insertions(+), 15 deletions(-) diff --git a/include/net/netfilter/nf_tables_core.h b/include/net/netfilter/nf_tables_core.h index 5eb699454490..c75bc6e83d9c 100644 --- a/include/net/netfilter/nf_tables_core.h +++ b/include/net/netfilter/nf_tables_core.h @@ -3,6 +3,7 @@ #define _NET_NF_TABLES_CORE_H #include +#include extern struct nft_expr_type nft_imm_type; extern struct nft_expr_type nft_cmp_type; @@ -88,12 +89,35 @@ extern const struct nft_set_type nft_set_bitmap_type; extern const struct nft_set_type nft_set_pipapo_type; extern const struct nft_set_type nft_set_pipapo_avx2_type; +bool nft_pipapo_lookup(const struct net *net, const struct nft_set *set, + const u32 *key, const struct nft_set_ext **ext); + +#ifdef CONFIG_RETPOLINE +bool nft_rhash_lookup(const struct net *net, const struct nft_set *set, + const u32 *key, const struct nft_set_ext **ext); +bool nft_rbtree_lookup(const struct net *net, const struct nft_set *set, + const u32 *key, const struct nft_set_ext **ext); +bool nft_bitmap_lookup(const struct net *net, const struct nft_set *set, + const u32 *key, const struct nft_set_ext **ext); +bool nft_hash_lookup_fast(const struct net *net, + const struct nft_set *set, + const u32 *key, const struct nft_set_ext **ext); +bool nft_hash_lookup(const struct net *net, const struct nft_set *set, + const u32 *key, const struct nft_set_ext **ext); +bool nft_set_do_lookup(const struct net *net, const struct nft_set *set, + const u32 *key, const struct nft_set_ext **ext); +#else static inline bool nft_set_do_lookup(const struct net *net, const struct nft_set *set, const u32 *key, const struct nft_set_ext **ext) { return set->ops->lookup(net, set, key, ext); } +#endif + +/* called from nft_pipapo.c */ +bool nft_pipapo_avx2_lookup(const struct net *net, const struct nft_set *set, + const u32 *key, const struct nft_set_ext **ext); struct nft_expr; struct nft_regs; diff --git a/net/netfilter/nft_lookup.c b/net/netfilter/nft_lookup.c index 1a8581879af5..90becbf5bff3 100644 --- a/net/netfilter/nft_lookup.c +++ b/net/netfilter/nft_lookup.c @@ -23,6 +23,37 @@ struct nft_lookup { struct nft_set_binding binding; }; +#ifdef CONFIG_RETPOLINE +bool nft_set_do_lookup(const struct net *net, const struct nft_set *set, + const u32 *key, const struct nft_set_ext **ext) +{ + if (set->ops == &nft_set_hash_fast_type.ops) + return nft_hash_lookup_fast(net, set, key, ext); + if (set->ops == &nft_set_hash_type.ops) + return nft_hash_lookup(net, set, key, ext); + + if (set->ops == &nft_set_rhash_type.ops) + return nft_rhash_lookup(net, set, key, ext); + + if (set->ops == &nft_set_bitmap_type.ops) + return nft_bitmap_lookup(net, set, key, ext); + + if (set->ops == &nft_set_pipapo_type.ops) + return nft_pipapo_lookup(net, set, key, ext); +#if defined(CONFIG_X86_64) && !defined(CONFIG_UML) + if (set->ops == &nft_set_pipapo_avx2_type.ops) + return nft_pipapo_avx2_lookup(net, set, key, ext); +#endif + + if (set->ops == &nft_set_rbtree_type.ops) + return nft_rbtree_lookup(net, set, key, ext); + + WARN_ON_ONCE(1); + return set->ops->lookup(net, set, key, ext); +} +EXPORT_SYMBOL_GPL(nft_set_do_lookup); +#endif + void nft_lookup_eval(const struct nft_expr *expr, struct nft_regs *regs, const struct nft_pktinfo *pkt) diff --git a/net/netfilter/nft_set_bitmap.c b/net/netfilter/nft_set_bitmap.c index 2a81ea421819..e7ae5914971e 100644 --- a/net/netfilter/nft_set_bitmap.c +++ b/net/netfilter/nft_set_bitmap.c @@ -73,8 +73,9 @@ nft_bitmap_active(const u8 *bitmap, u32 idx, u32 off, u8 genmask) return (bitmap[idx] & (0x3 << off)) & (genmask << off); } -static bool nft_bitmap_lookup(const struct net *net, const struct nft_set *set, - const u32 *key, const struct nft_set_ext **ext) +INDIRECT_CALLABLE_SCOPE +bool nft_bitmap_lookup(const struct net *net, const struct nft_set *set, + const u32 *key, const struct nft_set_ext **ext) { const struct nft_bitmap *priv = nft_set_priv(set); u8 genmask = nft_genmask_cur(net); diff --git a/net/netfilter/nft_set_hash.c b/net/netfilter/nft_set_hash.c index 7b3d0a78c569..df40314de21f 100644 --- a/net/netfilter/nft_set_hash.c +++ b/net/netfilter/nft_set_hash.c @@ -74,8 +74,9 @@ static const struct rhashtable_params nft_rhash_params = { .automatic_shrinking = true, }; -static bool nft_rhash_lookup(const struct net *net, const struct nft_set *set, - const u32 *key, const struct nft_set_ext **ext) +INDIRECT_CALLABLE_SCOPE +bool nft_rhash_lookup(const struct net *net, const struct nft_set *set, + const u32 *key, const struct nft_set_ext **ext) { struct nft_rhash *priv = nft_set_priv(set); const struct nft_rhash_elem *he; @@ -446,8 +447,9 @@ struct nft_hash_elem { struct nft_set_ext ext; }; -static bool nft_hash_lookup(const struct net *net, const struct nft_set *set, - const u32 *key, const struct nft_set_ext **ext) +INDIRECT_CALLABLE_SCOPE +bool nft_hash_lookup(const struct net *net, const struct nft_set *set, + const u32 *key, const struct nft_set_ext **ext) { struct nft_hash *priv = nft_set_priv(set); u8 genmask = nft_genmask_cur(net); @@ -484,9 +486,10 @@ static void *nft_hash_get(const struct net *net, const struct nft_set *set, return ERR_PTR(-ENOENT); } -static bool nft_hash_lookup_fast(const struct net *net, - const struct nft_set *set, - const u32 *key, const struct nft_set_ext **ext) +INDIRECT_CALLABLE_SCOPE +bool nft_hash_lookup_fast(const struct net *net, + const struct nft_set *set, + const u32 *key, const struct nft_set_ext **ext) { struct nft_hash *priv = nft_set_priv(set); u8 genmask = nft_genmask_cur(net); diff --git a/net/netfilter/nft_set_pipapo.h b/net/netfilter/nft_set_pipapo.h index d84afb8fa79a..25a75591583e 100644 --- a/net/netfilter/nft_set_pipapo.h +++ b/net/netfilter/nft_set_pipapo.h @@ -178,8 +178,6 @@ struct nft_pipapo_elem { int pipapo_refill(unsigned long *map, int len, int rules, unsigned long *dst, union nft_pipapo_map_bucket *mt, bool match_only); -bool nft_pipapo_lookup(const struct net *net, const struct nft_set *set, - const u32 *key, const struct nft_set_ext **ext); /** * pipapo_and_field_buckets_4bit() - Intersect 4-bit buckets diff --git a/net/netfilter/nft_set_pipapo_avx2.h b/net/netfilter/nft_set_pipapo_avx2.h index 394bcb704db7..dbb6aaca8a7a 100644 --- a/net/netfilter/nft_set_pipapo_avx2.h +++ b/net/netfilter/nft_set_pipapo_avx2.h @@ -5,8 +5,6 @@ #include #define NFT_PIPAPO_ALIGN (XSAVE_YMM_SIZE / BITS_PER_BYTE) -bool nft_pipapo_avx2_lookup(const struct net *net, const struct nft_set *set, - const u32 *key, const struct nft_set_ext **ext); bool nft_pipapo_avx2_estimate(const struct nft_set_desc *desc, u32 features, struct nft_set_estimate *est); #endif /* defined(CONFIG_X86_64) && !defined(CONFIG_UML) */ diff --git a/net/netfilter/nft_set_rbtree.c b/net/netfilter/nft_set_rbtree.c index 9e36eb4a7429..d600a566da32 100644 --- a/net/netfilter/nft_set_rbtree.c +++ b/net/netfilter/nft_set_rbtree.c @@ -107,8 +107,9 @@ static bool __nft_rbtree_lookup(const struct net *net, const struct nft_set *set return false; } -static bool nft_rbtree_lookup(const struct net *net, const struct nft_set *set, - const u32 *key, const struct nft_set_ext **ext) +INDIRECT_CALLABLE_SCOPE +bool nft_rbtree_lookup(const struct net *net, const struct nft_set *set, + const u32 *key, const struct nft_set_ext **ext) { struct nft_rbtree *priv = nft_set_priv(set); unsigned int seq = read_seqcount_begin(&priv->count); -- 2.30.2 --jI8keyz6grp/JLjh-- From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============0176105847689156837==" MIME-Version: 1.0 From: Pablo Neira Ayuso To: kbuild-all@lists.01.org Subject: Re: [nf-next:master 4/14] net/netfilter/nft_set_pipapo.c:412:6: error: static declaration of 'nft_pipapo_lookup' follows non-static declaration Date: Sat, 29 May 2021 00:52:51 +0200 Message-ID: <20210528225251.GA28391@salvia> In-Reply-To: <20210528213001.GA10732@breakpoint.cc> List-Id: --===============0176105847689156837== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable On Fri, May 28, 2021 at 11:30:01PM +0200, Florian Westphal wrote: > kernel test robot wrote: > > All errors (new ones prefixed by >>): > > = > > >> net/netfilter/nft_set_pipapo.c:412:6: error: static declaration of '= nft_pipapo_lookup' follows non-static declaration > > 412 | bool nft_pipapo_lookup(const struct net *net, const struct n= ft_set *set, > > | ^~~~~~~~~~~~~~~~~ > > In file included from net/netfilter/nft_set_pipapo.c:343: > > net/netfilter/nft_set_pipapo.h:181:6: note: previous declaration of = 'nft_pipapo_lookup' was here > > 181 | bool nft_pipapo_lookup(const struct net *net, const struct n= ft_set *set, > > | ^~~~~~~~~~~~~~~~~ > > = > > = > > vim +/nft_pipapo_lookup +412 net/netfilter/nft_set_pipapo.c > > = > > 3c4287f62044a9 Stefano Brivio 2020-01-22 399 = > > 3c4287f62044a9 Stefano Brivio 2020-01-22 400 /** > > 3c4287f62044a9 Stefano Brivio 2020-01-22 401 * nft_pipapo_lookup()= - Lookup function > > 3c4287f62044a9 Stefano Brivio 2020-01-22 402 * @net: Network names= pace > > 3c4287f62044a9 Stefano Brivio 2020-01-22 403 * @set: nftables API = set representation > > 3db86c397f608b Andrew Lunn 2020-07-13 404 * @key: nftables API = element representation containing key data > > 3c4287f62044a9 Stefano Brivio 2020-01-22 405 * @ext: nftables API = extension pointer, filled with matching reference > > 3c4287f62044a9 Stefano Brivio 2020-01-22 406 * > > 3c4287f62044a9 Stefano Brivio 2020-01-22 407 * For more details, s= ee DOC: Theory of Operation. > > 3c4287f62044a9 Stefano Brivio 2020-01-22 408 * > > 3c4287f62044a9 Stefano Brivio 2020-01-22 409 * Return: true on mat= ch, false otherwise. > > 3c4287f62044a9 Stefano Brivio 2020-01-22 410 */ > > a890630241c76a Florian Westphal 2021-05-13 411 INDIRECT_CALLABLE_SCOPE > = > This line needs to be dropped after the nf merge. And bool nft_pipapo_lookup(...) needs to be moved away from #ifdef CONFIG_RETPOLINE in nf_tables_core.h I'm attaching the patch I have here after this changes. However, this is exacty what Stephen Rothwell suggested to fix but Stefano mentioned this is not the right fix... --===============0176105847689156837== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-netfilter-nf_tables-prefer-direct-calls-for-set-look.patch" RnJvbSA0ZmRjZGQ0MDlkZGExYjJjZDk2ZDc2M2NmNjE0ZWY0NDc3MjE2N2UzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGbG9yaWFuIFdlc3RwaGFsIDxmd0BzdHJsZW4uZGU+CkRhdGU6 IFRodSwgMTMgTWF5IDIwMjEgMjI6Mjk6NTYgKzAyMDAKU3ViamVjdDogW1BBVENIXSBuZXRmaWx0 ZXI6IG5mX3RhYmxlczogcHJlZmVyIGRpcmVjdCBjYWxscyBmb3Igc2V0IGxvb2t1cHMKCkV4dGVu ZCBuZnRfc2V0X2RvX2xvb2t1cCgpIHRvIHVzZSBkaXJlY3QgY2FsbHMgd2hlbiByZXRwb2xpbmUg ZmVhdHVyZQppcyBlbmFibGVkLgoKU2lnbmVkLW9mZi1ieTogRmxvcmlhbiBXZXN0cGhhbCA8ZndA c3RybGVuLmRlPgpTaWduZWQtb2ZmLWJ5OiBQYWJsbyBOZWlyYSBBeXVzbyA8cGFibG9AbmV0Zmls dGVyLm9yZz4KLS0tCiBpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuaCB8IDI0 ICsrKysrKysrKysrKysrKysrKysrCiBuZXQvbmV0ZmlsdGVyL25mdF9sb29rdXAuYyAgICAgICAg ICAgICB8IDMxICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBuZXQvbmV0ZmlsdGVyL25mdF9z ZXRfYml0bWFwLmMgICAgICAgICB8ICA1ICsrKy0tCiBuZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFz aC5jICAgICAgICAgICB8IDE3ICsrKysrKysrLS0tLS0tCiBuZXQvbmV0ZmlsdGVyL25mdF9zZXRf cGlwYXBvLmggICAgICAgICB8ICAyIC0tCiBuZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2 eDIuaCAgICB8ICAyIC0tCiBuZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMgICAgICAgICB8 ICA1ICsrKy0tCiA3IGZpbGVzIGNoYW5nZWQsIDcxIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5o IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmgKaW5kZXggNWViNjk5NDU0 NDkwLi5jNzViYzZlODNkOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90 YWJsZXNfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5o CkBAIC0zLDYgKzMsNyBAQAogI2RlZmluZSBfTkVUX05GX1RBQkxFU19DT1JFX0gKIAogI2luY2x1 ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5kaXJlY3Rf Y2FsbF93cmFwcGVyLmg+CiAKIGV4dGVybiBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfaW1tX3R5 cGU7CiBleHRlcm4gc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2NtcF90eXBlOwpAQCAtODgsMTIg Kzg5LDM1IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmZ0X3NldF90eXBlIG5mdF9zZXRfYml0bWFw X3R5cGU7CiBleHRlcm4gY29uc3Qgc3RydWN0IG5mdF9zZXRfdHlwZSBuZnRfc2V0X3BpcGFwb190 eXBlOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZnRfc2V0X3R5cGUgbmZ0X3NldF9waXBhcG9fYXZ4 Ml90eXBlOwogCitib29sIG5mdF9waXBhcG9fbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwg Y29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKKwkJICAgICAgIGNvbnN0IHUzMiAqa2V5LCBjb25z dCBzdHJ1Y3QgbmZ0X3NldF9leHQgKipleHQpOworCisjaWZkZWYgQ09ORklHX1JFVFBPTElORQor Ym9vbCBuZnRfcmhhc2hfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0 IG5mdF9zZXQgKnNldCwKKwkJICAgICAgY29uc3QgdTMyICprZXksIGNvbnN0IHN0cnVjdCBuZnRf c2V0X2V4dCAqKmV4dCk7Citib29sIG5mdF9yYnRyZWVfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQg Km5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKKwkJICAgICAgIGNvbnN0IHUzMiAqa2V5 LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKipleHQpOworYm9vbCBuZnRfYml0bWFwX2xvb2t1 cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsCisJCSAg ICAgICBjb25zdCB1MzIgKmtleSwgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICoqZXh0KTsKK2Jv b2wgbmZ0X2hhc2hfbG9va3VwX2Zhc3QoY29uc3Qgc3RydWN0IG5ldCAqbmV0LAorCQkJICBjb25z dCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAorCQkJICBjb25zdCB1MzIgKmtleSwgY29uc3Qgc3RydWN0 IG5mdF9zZXRfZXh0ICoqZXh0KTsKK2Jvb2wgbmZ0X2hhc2hfbG9va3VwKGNvbnN0IHN0cnVjdCBu ZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKKwkJICAgICBjb25zdCB1MzIgKmtl eSwgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICoqZXh0KTsKK2Jvb2wgbmZ0X3NldF9kb19sb29r dXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAorCQkg ICAgICAgY29uc3QgdTMyICprZXksIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqKmV4dCk7Cisj ZWxzZQogc3RhdGljIGlubGluZSBib29sCiBuZnRfc2V0X2RvX2xvb2t1cChjb25zdCBzdHJ1Y3Qg bmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsCiAJCSAgY29uc3QgdTMyICprZXks IGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqKmV4dCkKIHsKIAlyZXR1cm4gc2V0LT5vcHMtPmxv b2t1cChuZXQsIHNldCwga2V5LCBleHQpOwogfQorI2VuZGlmCisKKy8qIGNhbGxlZCBmcm9tIG5m dF9waXBhcG8uYyAqLworYm9vbCBuZnRfcGlwYXBvX2F2eDJfbG9va3VwKGNvbnN0IHN0cnVjdCBu ZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKKwkJCSAgICBjb25zdCB1MzIgKmtl eSwgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICoqZXh0KTsKIAogc3RydWN0IG5mdF9leHByOwog c3RydWN0IG5mdF9yZWdzOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfbG9va3VwLmMg Yi9uZXQvbmV0ZmlsdGVyL25mdF9sb29rdXAuYwppbmRleCAxYTg1ODE4NzlhZjUuLjkwYmVjYmY1 YmZmMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfbG9va3VwLmMKKysrIGIvbmV0L25l dGZpbHRlci9uZnRfbG9va3VwLmMKQEAgLTIzLDYgKzIzLDM3IEBAIHN0cnVjdCBuZnRfbG9va3Vw IHsKIAlzdHJ1Y3QgbmZ0X3NldF9iaW5kaW5nCQliaW5kaW5nOwogfTsKIAorI2lmZGVmIENPTkZJ R19SRVRQT0xJTkUKK2Jvb2wgbmZ0X3NldF9kb19sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0 LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAorCQkgICAgICAgY29uc3QgdTMyICprZXksIGNv bnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqKmV4dCkKK3sKKwlpZiAoc2V0LT5vcHMgPT0gJm5mdF9z ZXRfaGFzaF9mYXN0X3R5cGUub3BzKQorCQlyZXR1cm4gbmZ0X2hhc2hfbG9va3VwX2Zhc3QobmV0 LCBzZXQsIGtleSwgZXh0KTsKKwlpZiAoc2V0LT5vcHMgPT0gJm5mdF9zZXRfaGFzaF90eXBlLm9w cykKKwkJcmV0dXJuIG5mdF9oYXNoX2xvb2t1cChuZXQsIHNldCwga2V5LCBleHQpOworCisJaWYg KHNldC0+b3BzID09ICZuZnRfc2V0X3JoYXNoX3R5cGUub3BzKQorCQlyZXR1cm4gbmZ0X3JoYXNo X2xvb2t1cChuZXQsIHNldCwga2V5LCBleHQpOworCisJaWYgKHNldC0+b3BzID09ICZuZnRfc2V0 X2JpdG1hcF90eXBlLm9wcykKKwkJcmV0dXJuIG5mdF9iaXRtYXBfbG9va3VwKG5ldCwgc2V0LCBr ZXksIGV4dCk7CisKKwlpZiAoc2V0LT5vcHMgPT0gJm5mdF9zZXRfcGlwYXBvX3R5cGUub3BzKQor CQlyZXR1cm4gbmZ0X3BpcGFwb19sb29rdXAobmV0LCBzZXQsIGtleSwgZXh0KTsKKyNpZiBkZWZp bmVkKENPTkZJR19YODZfNjQpICYmICFkZWZpbmVkKENPTkZJR19VTUwpCisJaWYgKHNldC0+b3Bz ID09ICZuZnRfc2V0X3BpcGFwb19hdngyX3R5cGUub3BzKQorCQlyZXR1cm4gbmZ0X3BpcGFwb19h dngyX2xvb2t1cChuZXQsIHNldCwga2V5LCBleHQpOworI2VuZGlmCisKKwlpZiAoc2V0LT5vcHMg PT0gJm5mdF9zZXRfcmJ0cmVlX3R5cGUub3BzKQorCQlyZXR1cm4gbmZ0X3JidHJlZV9sb29rdXAo bmV0LCBzZXQsIGtleSwgZXh0KTsKKworCVdBUk5fT05fT05DRSgxKTsKKwlyZXR1cm4gc2V0LT5v cHMtPmxvb2t1cChuZXQsIHNldCwga2V5LCBleHQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZ0 X3NldF9kb19sb29rdXApOworI2VuZGlmCisKIHZvaWQgbmZ0X2xvb2t1cF9ldmFsKGNvbnN0IHN0 cnVjdCBuZnRfZXhwciAqZXhwciwKIAkJICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsCiAJCSAg ICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpCmRpZmYgLS1naXQgYS9uZXQvbmV0Zmls dGVyL25mdF9zZXRfYml0bWFwLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfYml0bWFwLmMKaW5k ZXggMmE4MWVhNDIxODE5Li5lN2FlNTkxNDk3MWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIv bmZ0X3NldF9iaXRtYXAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfYml0bWFwLmMKQEAg LTczLDggKzczLDkgQEAgbmZ0X2JpdG1hcF9hY3RpdmUoY29uc3QgdTggKmJpdG1hcCwgdTMyIGlk eCwgdTMyIG9mZiwgdTggZ2VubWFzaykKIAlyZXR1cm4gKGJpdG1hcFtpZHhdICYgKDB4MyA8PCBv ZmYpKSAmIChnZW5tYXNrIDw8IG9mZik7CiB9CiAKLXN0YXRpYyBib29sIG5mdF9iaXRtYXBfbG9v a3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKLQkJ CSAgICAgIGNvbnN0IHUzMiAqa2V5LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKipleHQpCitJ TkRJUkVDVF9DQUxMQUJMRV9TQ09QRQorYm9vbCBuZnRfYml0bWFwX2xvb2t1cChjb25zdCBzdHJ1 Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsCisJCSAgICAgICBjb25zdCB1 MzIgKmtleSwgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICoqZXh0KQogewogCWNvbnN0IHN0cnVj dCBuZnRfYml0bWFwICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7CiAJdTggZ2VubWFzayA9IG5m dF9nZW5tYXNrX2N1cihuZXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X2hh c2guYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMKaW5kZXggN2IzZDBhNzhjNTY5Li5k ZjQwMzE0ZGUyMWYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMKKysr IGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYwpAQCAtNzQsOCArNzQsOSBAQCBzdGF0aWMg Y29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIG5mdF9yaGFzaF9wYXJhbXMgPSB7CiAJLmF1 dG9tYXRpY19zaHJpbmtpbmcJPSB0cnVlLAogfTsKIAotc3RhdGljIGJvb2wgbmZ0X3JoYXNoX2xv b2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsCi0J CQkgICAgIGNvbnN0IHUzMiAqa2V5LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKipleHQpCitJ TkRJUkVDVF9DQUxMQUJMRV9TQ09QRQorYm9vbCBuZnRfcmhhc2hfbG9va3VwKGNvbnN0IHN0cnVj dCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKKwkJICAgICAgY29uc3QgdTMy ICprZXksIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqKmV4dCkKIHsKIAlzdHJ1Y3QgbmZ0X3Jo YXNoICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7CiAJY29uc3Qgc3RydWN0IG5mdF9yaGFzaF9l bGVtICpoZTsKQEAgLTQ0Niw4ICs0NDcsOSBAQCBzdHJ1Y3QgbmZ0X2hhc2hfZWxlbSB7CiAJc3Ry dWN0IG5mdF9zZXRfZXh0CQlleHQ7CiB9OwogCi1zdGF0aWMgYm9vbCBuZnRfaGFzaF9sb29rdXAo Y29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAotCQkJICAg IGNvbnN0IHUzMiAqa2V5LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKipleHQpCitJTkRJUkVD VF9DQUxMQUJMRV9TQ09QRQorYm9vbCBuZnRfaGFzaF9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAq bmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAorCQkgICAgIGNvbnN0IHUzMiAqa2V5LCBj b25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKipleHQpCiB7CiAJc3RydWN0IG5mdF9oYXNoICpwcml2 ID0gbmZ0X3NldF9wcml2KHNldCk7CiAJdTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX2N1cihuZXQp OwpAQCAtNDg0LDkgKzQ4NiwxMCBAQCBzdGF0aWMgdm9pZCAqbmZ0X2hhc2hfZ2V0KGNvbnN0IHN0 cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKIAlyZXR1cm4gRVJSX1BU UigtRU5PRU5UKTsKIH0KIAotc3RhdGljIGJvb2wgbmZ0X2hhc2hfbG9va3VwX2Zhc3QoY29uc3Qg c3RydWN0IG5ldCAqbmV0LAotCQkJCSBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAotCQkJCSBj b25zdCB1MzIgKmtleSwgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICoqZXh0KQorSU5ESVJFQ1Rf Q0FMTEFCTEVfU0NPUEUKK2Jvb2wgbmZ0X2hhc2hfbG9va3VwX2Zhc3QoY29uc3Qgc3RydWN0IG5l dCAqbmV0LAorCQkJICBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAorCQkJICBjb25zdCB1MzIg KmtleSwgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICoqZXh0KQogewogCXN0cnVjdCBuZnRfaGFz aCAqcHJpdiA9IG5mdF9zZXRfcHJpdihzZXQpOwogCXU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19j dXIobmV0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaCBiL25l dC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaAppbmRleCBkODRhZmI4ZmE3OWEuLjI1YTc1NTkx NTgzZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oCisrKyBiL25l dC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaApAQCAtMTc4LDggKzE3OCw2IEBAIHN0cnVjdCBu ZnRfcGlwYXBvX2VsZW0gewogCiBpbnQgcGlwYXBvX3JlZmlsbCh1bnNpZ25lZCBsb25nICptYXAs IGludCBsZW4sIGludCBydWxlcywgdW5zaWduZWQgbG9uZyAqZHN0LAogCQkgIHVuaW9uIG5mdF9w aXBhcG9fbWFwX2J1Y2tldCAqbXQsIGJvb2wgbWF0Y2hfb25seSk7Ci1ib29sIG5mdF9waXBhcG9f bG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwK LQkJICAgICAgIGNvbnN0IHUzMiAqa2V5LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKipleHQp OwogCiAvKioKICAqIHBpcGFwb19hbmRfZmllbGRfYnVja2V0c180Yml0KCkgLSBJbnRlcnNlY3Qg NC1iaXQgYnVja2V0cwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19h dngyLmggYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuaAppbmRleCAzOTRiY2I3 MDRkYjcuLmRiYjZhYWNhOGE3YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3Bp cGFwb19hdngyLmgKKysrIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmgKQEAg LTUsOCArNSw2IEBACiAjaW5jbHVkZSA8YXNtL2ZwdS94c3RhdGUuaD4KICNkZWZpbmUgTkZUX1BJ UEFQT19BTElHTgkoWFNBVkVfWU1NX1NJWkUgLyBCSVRTX1BFUl9CWVRFKQogCi1ib29sIG5mdF9w aXBhcG9fYXZ4Ml9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0 X3NldCAqc2V0LAotCQkJICAgIGNvbnN0IHUzMiAqa2V5LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9l eHQgKipleHQpOwogYm9vbCBuZnRfcGlwYXBvX2F2eDJfZXN0aW1hdGUoY29uc3Qgc3RydWN0IG5m dF9zZXRfZGVzYyAqZGVzYywgdTMyIGZlYXR1cmVzLAogCQkJICAgICAgc3RydWN0IG5mdF9zZXRf ZXN0aW1hdGUgKmVzdCk7CiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfWDg2XzY0KSAmJiAhZGVm aW5lZChDT05GSUdfVU1MKSAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3Ji dHJlZS5jIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jCmluZGV4IDllMzZlYjRhNzQy OS4uZDYwMGE1NjZkYTMyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVl LmMKKysrIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jCkBAIC0xMDcsOCArMTA3LDkg QEAgc3RhdGljIGJvb2wgX19uZnRfcmJ0cmVlX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQs IGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBi b29sIG5mdF9yYnRyZWVfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0 IG5mdF9zZXQgKnNldCwKLQkJCSAgICAgIGNvbnN0IHUzMiAqa2V5LCBjb25zdCBzdHJ1Y3QgbmZ0 X3NldF9leHQgKipleHQpCitJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRQorYm9vbCBuZnRfcmJ0cmVl X2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQs CisJCSAgICAgICBjb25zdCB1MzIgKmtleSwgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICoqZXh0 KQogewogCXN0cnVjdCBuZnRfcmJ0cmVlICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7CiAJdW5z aWduZWQgaW50IHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oJnByaXYtPmNvdW50KTsKLS0gCjIu MzAuMgoK --===============0176105847689156837==--