All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH nf 1/2] netfilter: nf_tables: skip netlink portID validation if zero
@ 2021-06-22 10:13 Pablo Neira Ayuso
  2021-06-22 10:13 ` [PATCH nf 2/2] netfilter: nf_tables: do not allow to delete table with owner by handle Pablo Neira Ayuso
  0 siblings, 1 reply; 6+ messages in thread
From: Pablo Neira Ayuso @ 2021-06-22 10:13 UTC (permalink / raw)
  To: netfilter-devel

nft_table_lookup() allows us to obtain the table object by the name and
the family. The netlink portID validation needs to be skipped for the
dump path, since the ownership only applies to commands to update the
given table. Skip validation if the specified netlink PortID is zero
when calling nft_table_lookup().

Fixes: 6001a930ce03 ("netfilter: nftables: introduce table ownership")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
---
 net/netfilter/nf_tables_api.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
index ca9ec8721e6c..1d62b1a83299 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -571,7 +571,7 @@ static struct nft_table *nft_table_lookup(const struct net *net,
 		    table->family == family &&
 		    nft_active_genmask(table, genmask)) {
 			if (nft_table_has_owner(table) &&
-			    table->nlpid != nlpid)
+			    nlpid && table->nlpid != nlpid)
 				return ERR_PTR(-EPERM);
 
 			return table;
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH nf 2/2] netfilter: nf_tables: do not allow to delete table with owner by handle
  2021-06-22 10:13 [PATCH nf 1/2] netfilter: nf_tables: skip netlink portID validation if zero Pablo Neira Ayuso
@ 2021-06-22 10:13 ` Pablo Neira Ayuso
  2021-06-22 13:37     ` kernel test robot
  2021-06-22 14:35     ` kernel test robot
  0 siblings, 2 replies; 6+ messages in thread
From: Pablo Neira Ayuso @ 2021-06-22 10:13 UTC (permalink / raw)
  To: netfilter-devel

nft_table_lookup_byhandle() also needs to validate the netlink PortID
owner when deleting a table by handle.

Fixes: 6001a930ce03 ("netfilter: nftables: introduce table ownership")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
---
 net/netfilter/nf_tables_api.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
index 1d62b1a83299..b482b16e0000 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -583,7 +583,7 @@ static struct nft_table *nft_table_lookup(const struct net *net,
 
 static struct nft_table *nft_table_lookup_byhandle(const struct net *net,
 						   const struct nlattr *nla,
-						   u8 genmask)
+						   u8 genmask, u32 nlpid)
 {
 	struct nftables_pernet *nft_net;
 	struct nft_table *table;
@@ -591,7 +591,11 @@ static struct nft_table *nft_table_lookup_byhandle(const struct net *net,
 	nft_net = nft_pernet(net);
 	list_for_each_entry(table, &nft_net->tables, list) {
 		if (be64_to_cpu(nla_get_be64(nla)) == table->handle &&
-		    nft_active_genmask(table, genmask))
+		    nft_active_genmask(table, genmask)) {
+			if (nft_table_has_owner(table) &&
+			    nlpid && table->nlpid != nlpid)
+				return ERR_PTR(-EPERM);
+
 			return table;
 	}
 
@@ -1279,7 +1283,8 @@ static int nf_tables_deltable(struct sk_buff *skb, const struct nfnl_info *info,
 
 	if (nla[NFTA_TABLE_HANDLE]) {
 		attr = nla[NFTA_TABLE_HANDLE];
-		table = nft_table_lookup_byhandle(net, attr, genmask);
+		table = nft_table_lookup_byhandle(net, attr, genmask,
+						  NETLINK_CB(skb).portid);
 	} else {
 		attr = nla[NFTA_TABLE_NAME];
 		table = nft_table_lookup(net, attr, family, genmask,
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH nf 2/2] netfilter: nf_tables: do not allow to delete table with owner by handle
  2021-06-22 10:13 ` [PATCH nf 2/2] netfilter: nf_tables: do not allow to delete table with owner by handle Pablo Neira Ayuso
@ 2021-06-22 13:37     ` kernel test robot
  2021-06-22 14:35     ` kernel test robot
  1 sibling, 0 replies; 6+ messages in thread
From: kernel test robot @ 2021-06-22 13:37 UTC (permalink / raw)
  To: Pablo Neira Ayuso, netfilter-devel; +Cc: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 31008 bytes --]

Hi Pablo,

I love your patch! Yet something to improve:

[auto build test ERROR on nf/master]

url:    https://github.com/0day-ci/linux/commits/Pablo-Neira-Ayuso/netfilter-nf_tables-skip-netlink-portID-validation-if-zero/20210622-181539
base:   https://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf.git master
config: i386-randconfig-a011-20210622 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
        # https://github.com/0day-ci/linux/commit/cdd859ce5abc8381eeb7ea8088fb4c273cb7c2cb
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Pablo-Neira-Ayuso/netfilter-nf_tables-skip-netlink-portID-validation-if-zero/20210622-181539
        git checkout cdd859ce5abc8381eeb7ea8088fb4c273cb7c2cb
        # save the attached .config to linux build tree
        make W=1 ARCH=i386 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All error/warnings (new ones prefixed by >>):

   net/netfilter/nf_tables_api.c: In function 'nft_table_lookup_byhandle':
>> net/netfilter/nf_tables_api.c:605:19: error: invalid storage class for function 'nf_tables_alloc_handle'
     605 | static inline u64 nf_tables_alloc_handle(struct nft_table *table)
         |                   ^~~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:605:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     605 | static inline u64 nf_tables_alloc_handle(struct nft_table *table)
         | ^~~~~~
>> net/netfilter/nf_tables_api.c:613:1: error: invalid storage class for function '__nft_chain_type_get'
     613 | __nft_chain_type_get(u8 family, enum nft_chain_types type)
         | ^~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:623:1: error: invalid storage class for function '__nf_tables_chain_type_lookup'
     623 | __nf_tables_chain_type_lookup(const struct nlattr *nla, u8 family)
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> net/netfilter/nf_tables_api.c:681:19: error: non-static declaration of 'nft_request_module' follows static declaration
     681 | EXPORT_SYMBOL_GPL(nft_request_module);
         |                   ^~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:681:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
     681 | EXPORT_SYMBOL_GPL(nft_request_module);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:645:20: note: previous definition of 'nft_request_module' was here
     645 | __printf(2, 3) int nft_request_module(struct net *net, const char *fmt,
         |                    ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/export.h:43,
                    from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/compiler.h:225:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     225 |  static void * __section(".discard.addressable") __used \
         |  ^~~~~~
   include/linux/export.h:51:2: note: in expansion of macro '__ADDRESSABLE'
      51 |  __ADDRESSABLE(sym)      \
         |  ^~~~~~~~~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:681:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
     681 | EXPORT_SYMBOL_GPL(nft_request_module);
         | ^~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:684:13: error: invalid storage class for function 'lockdep_nfnl_nft_mutex_not_held'
     684 | static void lockdep_nfnl_nft_mutex_not_held(void)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:684:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     684 | static void lockdep_nfnl_nft_mutex_not_held(void)
         | ^~~~~~
>> net/netfilter/nf_tables_api.c:693:1: error: invalid storage class for function 'nf_tables_chain_type_lookup'
     693 | nf_tables_chain_type_lookup(struct net *net, const struct nlattr *nla,
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:714:15: error: invalid storage class for function 'nft_base_seq'
     714 | static __be16 nft_base_seq(const struct net *net)
         |               ^~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:730:12: error: invalid storage class for function 'nf_tables_fill_table_info'
     730 | static int nf_tables_fill_table_info(struct sk_buff *skb, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:771:13: error: invalid storage class for function 'nft_notify_enqueue'
     771 | static void nft_notify_enqueue(struct sk_buff *skb, bool report,
         |             ^~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:778:13: error: invalid storage class for function 'nf_tables_table_notify'
     778 | static void nf_tables_table_notify(const struct nft_ctx *ctx, int event)
         |             ^~~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:806:12: error: invalid storage class for function 'nf_tables_dump_tables'
     806 | static int nf_tables_dump_tables(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:848:12: error: invalid storage class for function 'nft_netlink_dump_start_rcu'
     848 | static int nft_netlink_dump_start_rcu(struct sock *nlsk, struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:866:12: error: invalid storage class for function 'nf_tables_gettable'
     866 | static int nf_tables_gettable(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:910:13: error: invalid storage class for function 'nft_table_disable'
     910 | static void nft_table_disable(struct net *net, struct nft_table *table, u32 cnt)
         |             ^~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:928:12: error: invalid storage class for function 'nf_tables_table_enable'
     928 | static int nf_tables_table_enable(struct net *net, struct nft_table *table)
         |            ^~~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:953:13: error: invalid storage class for function 'nf_tables_table_disable'
     953 | static void nf_tables_table_disable(struct net *net, struct nft_table *table)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:966:12: error: invalid storage class for function 'nf_tables_updtable'
     966 | static int nf_tables_updtable(struct nft_ctx *ctx)
         |            ^~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:1020:12: error: invalid storage class for function 'nft_chain_hash'
    1020 | static u32 nft_chain_hash(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1027:12: error: invalid storage class for function 'nft_chain_hash_obj'
    1027 | static u32 nft_chain_hash_obj(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1034:12: error: invalid storage class for function 'nft_chain_hash_cmp'
    1034 | static int nft_chain_hash_cmp(struct rhashtable_compare_arg *arg,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1043:12: error: invalid storage class for function 'nft_objname_hash'
    1043 | static u32 nft_objname_hash(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1052:12: error: invalid storage class for function 'nft_objname_hash_obj'
    1052 | static u32 nft_objname_hash_obj(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1059:12: error: invalid storage class for function 'nft_objname_hash_cmp'
    1059 | static int nft_objname_hash_cmp(struct rhashtable_compare_arg *arg,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1071:12: error: invalid storage class for function 'nf_tables_newtable'
    1071 | static int nf_tables_newtable(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1162:12: error: invalid storage class for function 'nft_flush_table'
    1162 | static int nft_flush_table(struct nft_ctx *ctx)
         |            ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1234:12: error: invalid storage class for function 'nft_flush'
    1234 | static int nft_flush(struct nft_ctx *ctx, int family)
         |            ^~~~~~~~~
   net/netfilter/nf_tables_api.c:1267:12: error: invalid storage class for function 'nf_tables_deltable'
    1267 | static int nf_tables_deltable(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1309:13: error: invalid storage class for function 'nf_tables_table_destroy'
    1309 | static void nf_tables_table_destroy(struct nft_ctx *ctx)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:1330:19: error: non-static declaration of 'nft_register_chain_type' follows static declaration
    1330 | EXPORT_SYMBOL_GPL(nft_register_chain_type);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1330:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    1330 | EXPORT_SYMBOL_GPL(nft_register_chain_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1320:6: note: previous definition of 'nft_register_chain_type' was here
    1320 | void nft_register_chain_type(const struct nft_chain_type *ctype)
         |      ^~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/export.h:43,
                    from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   include/linux/compiler.h:225:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     225 |  static void * __section(".discard.addressable") __used \
         |  ^~~~~~
   include/linux/export.h:51:2: note: in expansion of macro '__ADDRESSABLE'
      51 |  __ADDRESSABLE(sym)      \
         |  ^~~~~~~~~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1330:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    1330 | EXPORT_SYMBOL_GPL(nft_register_chain_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1332:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
    1332 | void nft_unregister_chain_type(const struct nft_chain_type *ctype)
         | ^~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:1338:19: error: non-static declaration of 'nft_unregister_chain_type' follows static declaration
    1338 | EXPORT_SYMBOL_GPL(nft_unregister_chain_type);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'


vim +/nf_tables_alloc_handle +605 net/netfilter/nf_tables_api.c

3ecbfd65f50e5f Harsha Sharma         2017-12-27  604  
96518518cc417b Patrick McHardy       2013-10-14 @605  static inline u64 nf_tables_alloc_handle(struct nft_table *table)
96518518cc417b Patrick McHardy       2013-10-14  606  {
96518518cc417b Patrick McHardy       2013-10-14  607  	return ++table->hgenerator;
96518518cc417b Patrick McHardy       2013-10-14  608  }
96518518cc417b Patrick McHardy       2013-10-14  609  
32537e91847a56 Pablo Neira Ayuso     2018-03-27  610  static const struct nft_chain_type *chain_type[NFPROTO_NUMPROTO][NFT_CHAIN_T_MAX];
9370761c56b66a Pablo Neira Ayuso     2013-10-10  611  
826035498ec14b Pablo Neira Ayuso     2020-01-21  612  static const struct nft_chain_type *
826035498ec14b Pablo Neira Ayuso     2020-01-21 @613  __nft_chain_type_get(u8 family, enum nft_chain_types type)
826035498ec14b Pablo Neira Ayuso     2020-01-21  614  {
826035498ec14b Pablo Neira Ayuso     2020-01-21  615  	if (family >= NFPROTO_NUMPROTO ||
826035498ec14b Pablo Neira Ayuso     2020-01-21  616  	    type >= NFT_CHAIN_T_MAX)
826035498ec14b Pablo Neira Ayuso     2020-01-21  617  		return NULL;
826035498ec14b Pablo Neira Ayuso     2020-01-21  618  
826035498ec14b Pablo Neira Ayuso     2020-01-21  619  	return chain_type[family][type];
826035498ec14b Pablo Neira Ayuso     2020-01-21  620  }
826035498ec14b Pablo Neira Ayuso     2020-01-21  621  
32537e91847a56 Pablo Neira Ayuso     2018-03-27  622  static const struct nft_chain_type *
1ea26cca52e46c Pablo Neira Ayuso     2017-12-19 @623  __nf_tables_chain_type_lookup(const struct nlattr *nla, u8 family)
9370761c56b66a Pablo Neira Ayuso     2013-10-10  624  {
826035498ec14b Pablo Neira Ayuso     2020-01-21  625  	const struct nft_chain_type *type;
9370761c56b66a Pablo Neira Ayuso     2013-10-10  626  	int i;
9370761c56b66a Pablo Neira Ayuso     2013-10-10  627  
9370761c56b66a Pablo Neira Ayuso     2013-10-10  628  	for (i = 0; i < NFT_CHAIN_T_MAX; i++) {
826035498ec14b Pablo Neira Ayuso     2020-01-21  629  		type = __nft_chain_type_get(family, i);
826035498ec14b Pablo Neira Ayuso     2020-01-21  630  		if (!type)
826035498ec14b Pablo Neira Ayuso     2020-01-21  631  			continue;
826035498ec14b Pablo Neira Ayuso     2020-01-21  632  		if (!nla_strcmp(nla, type->name))
826035498ec14b Pablo Neira Ayuso     2020-01-21  633  			return type;
9370761c56b66a Pablo Neira Ayuso     2013-10-10  634  	}
baae3e62f31618 Patrick McHardy       2014-01-09  635  	return NULL;
9370761c56b66a Pablo Neira Ayuso     2013-10-10  636  }
9370761c56b66a Pablo Neira Ayuso     2013-10-10  637  
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  638  struct nft_module_request {
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  639  	struct list_head	list;
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  640  	char			module[MODULE_NAME_LEN];
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  641  	bool			done;
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  642  };
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  643  
452238e8d5ffd8 Florian Westphal      2018-07-11  644  #ifdef CONFIG_MODULES
cefa31a9d46112 Florian Westphal      2021-03-25  645  __printf(2, 3) int nft_request_module(struct net *net, const char *fmt,
35b7ee34abdb72 Andrew Lunn           2020-10-31  646  				      ...)
452238e8d5ffd8 Florian Westphal      2018-07-11  647  {
452238e8d5ffd8 Florian Westphal      2018-07-11  648  	char module_name[MODULE_NAME_LEN];
0854db2aaef3fc Florian Westphal      2021-04-01  649  	struct nftables_pernet *nft_net;
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  650  	struct nft_module_request *req;
452238e8d5ffd8 Florian Westphal      2018-07-11  651  	va_list args;
452238e8d5ffd8 Florian Westphal      2018-07-11  652  	int ret;
452238e8d5ffd8 Florian Westphal      2018-07-11  653  
452238e8d5ffd8 Florian Westphal      2018-07-11  654  	va_start(args, fmt);
452238e8d5ffd8 Florian Westphal      2018-07-11  655  	ret = vsnprintf(module_name, MODULE_NAME_LEN, fmt, args);
452238e8d5ffd8 Florian Westphal      2018-07-11  656  	va_end(args);
9332d27d791818 Florian Westphal      2020-01-16  657  	if (ret >= MODULE_NAME_LEN)
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  658  		return 0;
452238e8d5ffd8 Florian Westphal      2018-07-11  659  
d59d2f82f984df Pablo Neira Ayuso     2021-04-23  660  	nft_net = nft_pernet(net);
0854db2aaef3fc Florian Westphal      2021-04-01  661  	list_for_each_entry(req, &nft_net->module_list, list) {
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  662  		if (!strcmp(req->module, module_name)) {
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  663  			if (req->done)
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  664  				return 0;
ec7470b834fe7b Pablo Neira Ayuso     2020-01-13  665  
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  666  			/* A request to load this module already exists. */
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  667  			return -EAGAIN;
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  668  		}
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  669  	}
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  670  
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  671  	req = kmalloc(sizeof(*req), GFP_KERNEL);
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  672  	if (!req)
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  673  		return -ENOMEM;
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  674  
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  675  	req->done = false;
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  676  	strlcpy(req->module, module_name, MODULE_NAME_LEN);
0854db2aaef3fc Florian Westphal      2021-04-01  677  	list_add_tail(&req->list, &nft_net->module_list);
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  678  
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  679  	return -EAGAIN;
452238e8d5ffd8 Florian Westphal      2018-07-11  680  }
cefa31a9d46112 Florian Westphal      2021-03-25 @681  EXPORT_SYMBOL_GPL(nft_request_module);
452238e8d5ffd8 Florian Westphal      2018-07-11  682  #endif
452238e8d5ffd8 Florian Westphal      2018-07-11  683  
f102d66b335a41 Florian Westphal      2018-07-11 @684  static void lockdep_nfnl_nft_mutex_not_held(void)
f102d66b335a41 Florian Westphal      2018-07-11  685  {
f102d66b335a41 Florian Westphal      2018-07-11  686  #ifdef CONFIG_PROVE_LOCKING
c0700dfa2cae44 Florian Westphal      2020-11-19  687  	if (debug_locks)
f102d66b335a41 Florian Westphal      2018-07-11  688  		WARN_ON_ONCE(lockdep_nfnl_is_held(NFNL_SUBSYS_NFTABLES));
f102d66b335a41 Florian Westphal      2018-07-11  689  #endif
f102d66b335a41 Florian Westphal      2018-07-11  690  }
f102d66b335a41 Florian Westphal      2018-07-11  691  
32537e91847a56 Pablo Neira Ayuso     2018-03-27  692  static const struct nft_chain_type *
452238e8d5ffd8 Florian Westphal      2018-07-11 @693  nf_tables_chain_type_lookup(struct net *net, const struct nlattr *nla,
452238e8d5ffd8 Florian Westphal      2018-07-11  694  			    u8 family, bool autoload)
9370761c56b66a Pablo Neira Ayuso     2013-10-10  695  {
32537e91847a56 Pablo Neira Ayuso     2018-03-27  696  	const struct nft_chain_type *type;
9370761c56b66a Pablo Neira Ayuso     2013-10-10  697  
1ea26cca52e46c Pablo Neira Ayuso     2017-12-19  698  	type = __nf_tables_chain_type_lookup(nla, family);
93b0806f006b8b Patrick McHardy       2014-01-09  699  	if (type != NULL)
93b0806f006b8b Patrick McHardy       2014-01-09  700  		return type;
f102d66b335a41 Florian Westphal      2018-07-11  701  
f102d66b335a41 Florian Westphal      2018-07-11  702  	lockdep_nfnl_nft_mutex_not_held();
9370761c56b66a Pablo Neira Ayuso     2013-10-10  703  #ifdef CONFIG_MODULES
93b0806f006b8b Patrick McHardy       2014-01-09  704  	if (autoload) {
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  705  		if (nft_request_module(net, "nft-chain-%u-%.*s", family,
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  706  				       nla_len(nla),
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  707  				       (const char *)nla_data(nla)) == -EAGAIN)
93b0806f006b8b Patrick McHardy       2014-01-09  708  			return ERR_PTR(-EAGAIN);
9370761c56b66a Pablo Neira Ayuso     2013-10-10  709  	}
9370761c56b66a Pablo Neira Ayuso     2013-10-10  710  #endif
93b0806f006b8b Patrick McHardy       2014-01-09  711  	return ERR_PTR(-ENOENT);
9370761c56b66a Pablo Neira Ayuso     2013-10-10  712  }
9370761c56b66a Pablo Neira Ayuso     2013-10-10  713  
802b805162a1b7 Pablo Neira Ayuso     2021-03-31 @714  static __be16 nft_base_seq(const struct net *net)
802b805162a1b7 Pablo Neira Ayuso     2021-03-31  715  {
d59d2f82f984df Pablo Neira Ayuso     2021-04-23  716  	struct nftables_pernet *nft_net = nft_pernet(net);
0854db2aaef3fc Florian Westphal      2021-04-01  717  
0854db2aaef3fc Florian Westphal      2021-04-01  718  	return htons(nft_net->base_seq & 0xffff);
802b805162a1b7 Pablo Neira Ayuso     2021-03-31  719  }
802b805162a1b7 Pablo Neira Ayuso     2021-03-31  720  
96518518cc417b Patrick McHardy       2013-10-14  721  static const struct nla_policy nft_table_policy[NFTA_TABLE_MAX + 1] = {
1cae565e8b746f Pablo Neira Ayuso     2015-03-05  722  	[NFTA_TABLE_NAME]	= { .type = NLA_STRING,
1cae565e8b746f Pablo Neira Ayuso     2015-03-05  723  				    .len = NFT_TABLE_MAXNAMELEN - 1 },
9ddf63235749a9 Pablo Neira Ayuso     2013-10-10  724  	[NFTA_TABLE_FLAGS]	= { .type = NLA_U32 },
3ecbfd65f50e5f Harsha Sharma         2017-12-27  725  	[NFTA_TABLE_HANDLE]	= { .type = NLA_U64 },
7a81575b806e5d Jose M. Guisado Gomez 2020-08-20  726  	[NFTA_TABLE_USERDATA]	= { .type = NLA_BINARY,
7a81575b806e5d Jose M. Guisado Gomez 2020-08-20  727  				    .len = NFT_USERDATA_MAXLEN }
96518518cc417b Patrick McHardy       2013-10-14  728  };
96518518cc417b Patrick McHardy       2013-10-14  729  
84d7fce6938848 Pablo Neira Ayuso     2014-09-04 @730  static int nf_tables_fill_table_info(struct sk_buff *skb, struct net *net,
84d7fce6938848 Pablo Neira Ayuso     2014-09-04  731  				     u32 portid, u32 seq, int event, u32 flags,
84d7fce6938848 Pablo Neira Ayuso     2014-09-04  732  				     int family, const struct nft_table *table)
96518518cc417b Patrick McHardy       2013-10-14  733  {
96518518cc417b Patrick McHardy       2013-10-14  734  	struct nlmsghdr *nlh;
96518518cc417b Patrick McHardy       2013-10-14  735  
dedb67c4b4e5fa Pablo Neira Ayuso     2017-03-28  736  	event = nfnl_msg_type(NFNL_SUBSYS_NFTABLES, event);
19c28b1374fb10 Pablo Neira Ayuso     2021-03-30  737  	nlh = nfnl_msg_put(skb, portid, seq, event, flags, family,
19c28b1374fb10 Pablo Neira Ayuso     2021-03-30  738  			   NFNETLINK_V0, nft_base_seq(net));
19c28b1374fb10 Pablo Neira Ayuso     2021-03-30  739  	if (!nlh)
96518518cc417b Patrick McHardy       2013-10-14  740  		goto nla_put_failure;
96518518cc417b Patrick McHardy       2013-10-14  741  
9ddf63235749a9 Pablo Neira Ayuso     2013-10-10  742  	if (nla_put_string(skb, NFTA_TABLE_NAME, table->name) ||
179d9ba5559a75 Pablo Neira Ayuso     2021-05-24  743  	    nla_put_be32(skb, NFTA_TABLE_FLAGS,
179d9ba5559a75 Pablo Neira Ayuso     2021-05-24  744  			 htonl(table->flags & NFT_TABLE_F_MASK)) ||
3ecbfd65f50e5f Harsha Sharma         2017-12-27  745  	    nla_put_be32(skb, NFTA_TABLE_USE, htonl(table->use)) ||
3ecbfd65f50e5f Harsha Sharma         2017-12-27  746  	    nla_put_be64(skb, NFTA_TABLE_HANDLE, cpu_to_be64(table->handle),
3ecbfd65f50e5f Harsha Sharma         2017-12-27  747  			 NFTA_TABLE_PAD))
96518518cc417b Patrick McHardy       2013-10-14  748  		goto nla_put_failure;
6001a930ce0378 Pablo Neira Ayuso     2021-02-15  749  	if (nft_table_has_owner(table) &&
6001a930ce0378 Pablo Neira Ayuso     2021-02-15  750  	    nla_put_be32(skb, NFTA_TABLE_OWNER, htonl(table->nlpid)))
6001a930ce0378 Pablo Neira Ayuso     2021-02-15  751  		goto nla_put_failure;
96518518cc417b Patrick McHardy       2013-10-14  752  
7a81575b806e5d Jose M. Guisado Gomez 2020-08-20  753  	if (table->udata) {
7a81575b806e5d Jose M. Guisado Gomez 2020-08-20  754  		if (nla_put(skb, NFTA_TABLE_USERDATA, table->udlen, table->udata))
7a81575b806e5d Jose M. Guisado Gomez 2020-08-20  755  			goto nla_put_failure;
7a81575b806e5d Jose M. Guisado Gomez 2020-08-20  756  	}
7a81575b806e5d Jose M. Guisado Gomez 2020-08-20  757  
053c095a82cf77 Johannes Berg         2015-01-16  758  	nlmsg_end(skb, nlh);
053c095a82cf77 Johannes Berg         2015-01-16  759  	return 0;
96518518cc417b Patrick McHardy       2013-10-14  760  
96518518cc417b Patrick McHardy       2013-10-14  761  nla_put_failure:
96518518cc417b Patrick McHardy       2013-10-14  762  	nlmsg_trim(skb, nlh);
96518518cc417b Patrick McHardy       2013-10-14  763  	return -1;
96518518cc417b Patrick McHardy       2013-10-14  764  }
96518518cc417b Patrick McHardy       2013-10-14  765  
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  766  struct nftnl_skb_parms {
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  767  	bool report;
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  768  };
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  769  #define NFT_CB(skb)	(*(struct nftnl_skb_parms*)&((skb)->cb))
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  770  
67cc570edaa020 Pablo Neira Ayuso     2020-08-27 @771  static void nft_notify_enqueue(struct sk_buff *skb, bool report,
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  772  			       struct list_head *notify_list)
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  773  {
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  774  	NFT_CB(skb).report = report;
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  775  	list_add_tail(&skb->list, notify_list);
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  776  }
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  777  
25e94a997b324b Pablo Neira Ayuso     2017-03-01 @778  static void nf_tables_table_notify(const struct nft_ctx *ctx, int event)
96518518cc417b Patrick McHardy       2013-10-14  779  {
0854db2aaef3fc Florian Westphal      2021-04-01  780  	struct nftables_pernet *nft_net;
96518518cc417b Patrick McHardy       2013-10-14  781  	struct sk_buff *skb;
96518518cc417b Patrick McHardy       2013-10-14  782  	int err;
96518518cc417b Patrick McHardy       2013-10-14  783  
128ad3322ba5de Pablo Neira Ayuso     2014-05-09  784  	if (!ctx->report &&
128ad3322ba5de Pablo Neira Ayuso     2014-05-09  785  	    !nfnetlink_has_listeners(ctx->net, NFNLGRP_NFTABLES))
25e94a997b324b Pablo Neira Ayuso     2017-03-01  786  		return;
96518518cc417b Patrick McHardy       2013-10-14  787  
96518518cc417b Patrick McHardy       2013-10-14  788  	skb = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
96518518cc417b Patrick McHardy       2013-10-14  789  	if (skb == NULL)
96518518cc417b Patrick McHardy       2013-10-14  790  		goto err;
96518518cc417b Patrick McHardy       2013-10-14  791  
84d7fce6938848 Pablo Neira Ayuso     2014-09-04  792  	err = nf_tables_fill_table_info(skb, ctx->net, ctx->portid, ctx->seq,
36596dadf54a92 Pablo Neira Ayuso     2018-01-09  793  					event, 0, ctx->family, ctx->table);
96518518cc417b Patrick McHardy       2013-10-14  794  	if (err < 0) {
96518518cc417b Patrick McHardy       2013-10-14  795  		kfree_skb(skb);
96518518cc417b Patrick McHardy       2013-10-14  796  		goto err;
96518518cc417b Patrick McHardy       2013-10-14  797  	}
96518518cc417b Patrick McHardy       2013-10-14  798  
d59d2f82f984df Pablo Neira Ayuso     2021-04-23  799  	nft_net = nft_pernet(ctx->net);
0854db2aaef3fc Florian Westphal      2021-04-01  800  	nft_notify_enqueue(skb, ctx->report, &nft_net->notify_list);
25e94a997b324b Pablo Neira Ayuso     2017-03-01  801  	return;
96518518cc417b Patrick McHardy       2013-10-14  802  err:
25e94a997b324b Pablo Neira Ayuso     2017-03-01  803  	nfnetlink_set_err(ctx->net, ctx->portid, NFNLGRP_NFTABLES, -ENOBUFS);
96518518cc417b Patrick McHardy       2013-10-14  804  }
96518518cc417b Patrick McHardy       2013-10-14  805  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 47812 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH nf 2/2] netfilter: nf_tables: do not allow to delete table with owner by handle
@ 2021-06-22 13:37     ` kernel test robot
  0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2021-06-22 13:37 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 31449 bytes --]

Hi Pablo,

I love your patch! Yet something to improve:

[auto build test ERROR on nf/master]

url:    https://github.com/0day-ci/linux/commits/Pablo-Neira-Ayuso/netfilter-nf_tables-skip-netlink-portID-validation-if-zero/20210622-181539
base:   https://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf.git master
config: i386-randconfig-a011-20210622 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
        # https://github.com/0day-ci/linux/commit/cdd859ce5abc8381eeb7ea8088fb4c273cb7c2cb
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Pablo-Neira-Ayuso/netfilter-nf_tables-skip-netlink-portID-validation-if-zero/20210622-181539
        git checkout cdd859ce5abc8381eeb7ea8088fb4c273cb7c2cb
        # save the attached .config to linux build tree
        make W=1 ARCH=i386 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All error/warnings (new ones prefixed by >>):

   net/netfilter/nf_tables_api.c: In function 'nft_table_lookup_byhandle':
>> net/netfilter/nf_tables_api.c:605:19: error: invalid storage class for function 'nf_tables_alloc_handle'
     605 | static inline u64 nf_tables_alloc_handle(struct nft_table *table)
         |                   ^~~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:605:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     605 | static inline u64 nf_tables_alloc_handle(struct nft_table *table)
         | ^~~~~~
>> net/netfilter/nf_tables_api.c:613:1: error: invalid storage class for function '__nft_chain_type_get'
     613 | __nft_chain_type_get(u8 family, enum nft_chain_types type)
         | ^~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:623:1: error: invalid storage class for function '__nf_tables_chain_type_lookup'
     623 | __nf_tables_chain_type_lookup(const struct nlattr *nla, u8 family)
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> net/netfilter/nf_tables_api.c:681:19: error: non-static declaration of 'nft_request_module' follows static declaration
     681 | EXPORT_SYMBOL_GPL(nft_request_module);
         |                   ^~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:681:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
     681 | EXPORT_SYMBOL_GPL(nft_request_module);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:645:20: note: previous definition of 'nft_request_module' was here
     645 | __printf(2, 3) int nft_request_module(struct net *net, const char *fmt,
         |                    ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/export.h:43,
                    from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/compiler.h:225:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     225 |  static void * __section(".discard.addressable") __used \
         |  ^~~~~~
   include/linux/export.h:51:2: note: in expansion of macro '__ADDRESSABLE'
      51 |  __ADDRESSABLE(sym)      \
         |  ^~~~~~~~~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:681:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
     681 | EXPORT_SYMBOL_GPL(nft_request_module);
         | ^~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:684:13: error: invalid storage class for function 'lockdep_nfnl_nft_mutex_not_held'
     684 | static void lockdep_nfnl_nft_mutex_not_held(void)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:684:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     684 | static void lockdep_nfnl_nft_mutex_not_held(void)
         | ^~~~~~
>> net/netfilter/nf_tables_api.c:693:1: error: invalid storage class for function 'nf_tables_chain_type_lookup'
     693 | nf_tables_chain_type_lookup(struct net *net, const struct nlattr *nla,
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:714:15: error: invalid storage class for function 'nft_base_seq'
     714 | static __be16 nft_base_seq(const struct net *net)
         |               ^~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:730:12: error: invalid storage class for function 'nf_tables_fill_table_info'
     730 | static int nf_tables_fill_table_info(struct sk_buff *skb, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:771:13: error: invalid storage class for function 'nft_notify_enqueue'
     771 | static void nft_notify_enqueue(struct sk_buff *skb, bool report,
         |             ^~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:778:13: error: invalid storage class for function 'nf_tables_table_notify'
     778 | static void nf_tables_table_notify(const struct nft_ctx *ctx, int event)
         |             ^~~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:806:12: error: invalid storage class for function 'nf_tables_dump_tables'
     806 | static int nf_tables_dump_tables(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:848:12: error: invalid storage class for function 'nft_netlink_dump_start_rcu'
     848 | static int nft_netlink_dump_start_rcu(struct sock *nlsk, struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:866:12: error: invalid storage class for function 'nf_tables_gettable'
     866 | static int nf_tables_gettable(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:910:13: error: invalid storage class for function 'nft_table_disable'
     910 | static void nft_table_disable(struct net *net, struct nft_table *table, u32 cnt)
         |             ^~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:928:12: error: invalid storage class for function 'nf_tables_table_enable'
     928 | static int nf_tables_table_enable(struct net *net, struct nft_table *table)
         |            ^~~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:953:13: error: invalid storage class for function 'nf_tables_table_disable'
     953 | static void nf_tables_table_disable(struct net *net, struct nft_table *table)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:966:12: error: invalid storage class for function 'nf_tables_updtable'
     966 | static int nf_tables_updtable(struct nft_ctx *ctx)
         |            ^~~~~~~~~~~~~~~~~~
>> net/netfilter/nf_tables_api.c:1020:12: error: invalid storage class for function 'nft_chain_hash'
    1020 | static u32 nft_chain_hash(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1027:12: error: invalid storage class for function 'nft_chain_hash_obj'
    1027 | static u32 nft_chain_hash_obj(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1034:12: error: invalid storage class for function 'nft_chain_hash_cmp'
    1034 | static int nft_chain_hash_cmp(struct rhashtable_compare_arg *arg,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1043:12: error: invalid storage class for function 'nft_objname_hash'
    1043 | static u32 nft_objname_hash(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1052:12: error: invalid storage class for function 'nft_objname_hash_obj'
    1052 | static u32 nft_objname_hash_obj(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1059:12: error: invalid storage class for function 'nft_objname_hash_cmp'
    1059 | static int nft_objname_hash_cmp(struct rhashtable_compare_arg *arg,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1071:12: error: invalid storage class for function 'nf_tables_newtable'
    1071 | static int nf_tables_newtable(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1162:12: error: invalid storage class for function 'nft_flush_table'
    1162 | static int nft_flush_table(struct nft_ctx *ctx)
         |            ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1234:12: error: invalid storage class for function 'nft_flush'
    1234 | static int nft_flush(struct nft_ctx *ctx, int family)
         |            ^~~~~~~~~
   net/netfilter/nf_tables_api.c:1267:12: error: invalid storage class for function 'nf_tables_deltable'
    1267 | static int nf_tables_deltable(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1309:13: error: invalid storage class for function 'nf_tables_table_destroy'
    1309 | static void nf_tables_table_destroy(struct nft_ctx *ctx)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:1330:19: error: non-static declaration of 'nft_register_chain_type' follows static declaration
    1330 | EXPORT_SYMBOL_GPL(nft_register_chain_type);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1330:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    1330 | EXPORT_SYMBOL_GPL(nft_register_chain_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1320:6: note: previous definition of 'nft_register_chain_type' was here
    1320 | void nft_register_chain_type(const struct nft_chain_type *ctype)
         |      ^~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/export.h:43,
                    from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   include/linux/compiler.h:225:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     225 |  static void * __section(".discard.addressable") __used \
         |  ^~~~~~
   include/linux/export.h:51:2: note: in expansion of macro '__ADDRESSABLE'
      51 |  __ADDRESSABLE(sym)      \
         |  ^~~~~~~~~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1330:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    1330 | EXPORT_SYMBOL_GPL(nft_register_chain_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1332:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
    1332 | void nft_unregister_chain_type(const struct nft_chain_type *ctype)
         | ^~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:1338:19: error: non-static declaration of 'nft_unregister_chain_type' follows static declaration
    1338 | EXPORT_SYMBOL_GPL(nft_unregister_chain_type);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'


vim +/nf_tables_alloc_handle +605 net/netfilter/nf_tables_api.c

3ecbfd65f50e5f Harsha Sharma         2017-12-27  604  
96518518cc417b Patrick McHardy       2013-10-14 @605  static inline u64 nf_tables_alloc_handle(struct nft_table *table)
96518518cc417b Patrick McHardy       2013-10-14  606  {
96518518cc417b Patrick McHardy       2013-10-14  607  	return ++table->hgenerator;
96518518cc417b Patrick McHardy       2013-10-14  608  }
96518518cc417b Patrick McHardy       2013-10-14  609  
32537e91847a56 Pablo Neira Ayuso     2018-03-27  610  static const struct nft_chain_type *chain_type[NFPROTO_NUMPROTO][NFT_CHAIN_T_MAX];
9370761c56b66a Pablo Neira Ayuso     2013-10-10  611  
826035498ec14b Pablo Neira Ayuso     2020-01-21  612  static const struct nft_chain_type *
826035498ec14b Pablo Neira Ayuso     2020-01-21 @613  __nft_chain_type_get(u8 family, enum nft_chain_types type)
826035498ec14b Pablo Neira Ayuso     2020-01-21  614  {
826035498ec14b Pablo Neira Ayuso     2020-01-21  615  	if (family >= NFPROTO_NUMPROTO ||
826035498ec14b Pablo Neira Ayuso     2020-01-21  616  	    type >= NFT_CHAIN_T_MAX)
826035498ec14b Pablo Neira Ayuso     2020-01-21  617  		return NULL;
826035498ec14b Pablo Neira Ayuso     2020-01-21  618  
826035498ec14b Pablo Neira Ayuso     2020-01-21  619  	return chain_type[family][type];
826035498ec14b Pablo Neira Ayuso     2020-01-21  620  }
826035498ec14b Pablo Neira Ayuso     2020-01-21  621  
32537e91847a56 Pablo Neira Ayuso     2018-03-27  622  static const struct nft_chain_type *
1ea26cca52e46c Pablo Neira Ayuso     2017-12-19 @623  __nf_tables_chain_type_lookup(const struct nlattr *nla, u8 family)
9370761c56b66a Pablo Neira Ayuso     2013-10-10  624  {
826035498ec14b Pablo Neira Ayuso     2020-01-21  625  	const struct nft_chain_type *type;
9370761c56b66a Pablo Neira Ayuso     2013-10-10  626  	int i;
9370761c56b66a Pablo Neira Ayuso     2013-10-10  627  
9370761c56b66a Pablo Neira Ayuso     2013-10-10  628  	for (i = 0; i < NFT_CHAIN_T_MAX; i++) {
826035498ec14b Pablo Neira Ayuso     2020-01-21  629  		type = __nft_chain_type_get(family, i);
826035498ec14b Pablo Neira Ayuso     2020-01-21  630  		if (!type)
826035498ec14b Pablo Neira Ayuso     2020-01-21  631  			continue;
826035498ec14b Pablo Neira Ayuso     2020-01-21  632  		if (!nla_strcmp(nla, type->name))
826035498ec14b Pablo Neira Ayuso     2020-01-21  633  			return type;
9370761c56b66a Pablo Neira Ayuso     2013-10-10  634  	}
baae3e62f31618 Patrick McHardy       2014-01-09  635  	return NULL;
9370761c56b66a Pablo Neira Ayuso     2013-10-10  636  }
9370761c56b66a Pablo Neira Ayuso     2013-10-10  637  
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  638  struct nft_module_request {
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  639  	struct list_head	list;
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  640  	char			module[MODULE_NAME_LEN];
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  641  	bool			done;
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  642  };
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  643  
452238e8d5ffd8 Florian Westphal      2018-07-11  644  #ifdef CONFIG_MODULES
cefa31a9d46112 Florian Westphal      2021-03-25  645  __printf(2, 3) int nft_request_module(struct net *net, const char *fmt,
35b7ee34abdb72 Andrew Lunn           2020-10-31  646  				      ...)
452238e8d5ffd8 Florian Westphal      2018-07-11  647  {
452238e8d5ffd8 Florian Westphal      2018-07-11  648  	char module_name[MODULE_NAME_LEN];
0854db2aaef3fc Florian Westphal      2021-04-01  649  	struct nftables_pernet *nft_net;
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  650  	struct nft_module_request *req;
452238e8d5ffd8 Florian Westphal      2018-07-11  651  	va_list args;
452238e8d5ffd8 Florian Westphal      2018-07-11  652  	int ret;
452238e8d5ffd8 Florian Westphal      2018-07-11  653  
452238e8d5ffd8 Florian Westphal      2018-07-11  654  	va_start(args, fmt);
452238e8d5ffd8 Florian Westphal      2018-07-11  655  	ret = vsnprintf(module_name, MODULE_NAME_LEN, fmt, args);
452238e8d5ffd8 Florian Westphal      2018-07-11  656  	va_end(args);
9332d27d791818 Florian Westphal      2020-01-16  657  	if (ret >= MODULE_NAME_LEN)
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  658  		return 0;
452238e8d5ffd8 Florian Westphal      2018-07-11  659  
d59d2f82f984df Pablo Neira Ayuso     2021-04-23  660  	nft_net = nft_pernet(net);
0854db2aaef3fc Florian Westphal      2021-04-01  661  	list_for_each_entry(req, &nft_net->module_list, list) {
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  662  		if (!strcmp(req->module, module_name)) {
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  663  			if (req->done)
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  664  				return 0;
ec7470b834fe7b Pablo Neira Ayuso     2020-01-13  665  
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  666  			/* A request to load this module already exists. */
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  667  			return -EAGAIN;
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  668  		}
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  669  	}
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  670  
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  671  	req = kmalloc(sizeof(*req), GFP_KERNEL);
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  672  	if (!req)
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  673  		return -ENOMEM;
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  674  
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  675  	req->done = false;
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  676  	strlcpy(req->module, module_name, MODULE_NAME_LEN);
0854db2aaef3fc Florian Westphal      2021-04-01  677  	list_add_tail(&req->list, &nft_net->module_list);
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  678  
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  679  	return -EAGAIN;
452238e8d5ffd8 Florian Westphal      2018-07-11  680  }
cefa31a9d46112 Florian Westphal      2021-03-25 @681  EXPORT_SYMBOL_GPL(nft_request_module);
452238e8d5ffd8 Florian Westphal      2018-07-11  682  #endif
452238e8d5ffd8 Florian Westphal      2018-07-11  683  
f102d66b335a41 Florian Westphal      2018-07-11 @684  static void lockdep_nfnl_nft_mutex_not_held(void)
f102d66b335a41 Florian Westphal      2018-07-11  685  {
f102d66b335a41 Florian Westphal      2018-07-11  686  #ifdef CONFIG_PROVE_LOCKING
c0700dfa2cae44 Florian Westphal      2020-11-19  687  	if (debug_locks)
f102d66b335a41 Florian Westphal      2018-07-11  688  		WARN_ON_ONCE(lockdep_nfnl_is_held(NFNL_SUBSYS_NFTABLES));
f102d66b335a41 Florian Westphal      2018-07-11  689  #endif
f102d66b335a41 Florian Westphal      2018-07-11  690  }
f102d66b335a41 Florian Westphal      2018-07-11  691  
32537e91847a56 Pablo Neira Ayuso     2018-03-27  692  static const struct nft_chain_type *
452238e8d5ffd8 Florian Westphal      2018-07-11 @693  nf_tables_chain_type_lookup(struct net *net, const struct nlattr *nla,
452238e8d5ffd8 Florian Westphal      2018-07-11  694  			    u8 family, bool autoload)
9370761c56b66a Pablo Neira Ayuso     2013-10-10  695  {
32537e91847a56 Pablo Neira Ayuso     2018-03-27  696  	const struct nft_chain_type *type;
9370761c56b66a Pablo Neira Ayuso     2013-10-10  697  
1ea26cca52e46c Pablo Neira Ayuso     2017-12-19  698  	type = __nf_tables_chain_type_lookup(nla, family);
93b0806f006b8b Patrick McHardy       2014-01-09  699  	if (type != NULL)
93b0806f006b8b Patrick McHardy       2014-01-09  700  		return type;
f102d66b335a41 Florian Westphal      2018-07-11  701  
f102d66b335a41 Florian Westphal      2018-07-11  702  	lockdep_nfnl_nft_mutex_not_held();
9370761c56b66a Pablo Neira Ayuso     2013-10-10  703  #ifdef CONFIG_MODULES
93b0806f006b8b Patrick McHardy       2014-01-09  704  	if (autoload) {
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  705  		if (nft_request_module(net, "nft-chain-%u-%.*s", family,
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  706  				       nla_len(nla),
eb014de4fd418d Pablo Neira Ayuso     2020-01-21  707  				       (const char *)nla_data(nla)) == -EAGAIN)
93b0806f006b8b Patrick McHardy       2014-01-09  708  			return ERR_PTR(-EAGAIN);
9370761c56b66a Pablo Neira Ayuso     2013-10-10  709  	}
9370761c56b66a Pablo Neira Ayuso     2013-10-10  710  #endif
93b0806f006b8b Patrick McHardy       2014-01-09  711  	return ERR_PTR(-ENOENT);
9370761c56b66a Pablo Neira Ayuso     2013-10-10  712  }
9370761c56b66a Pablo Neira Ayuso     2013-10-10  713  
802b805162a1b7 Pablo Neira Ayuso     2021-03-31 @714  static __be16 nft_base_seq(const struct net *net)
802b805162a1b7 Pablo Neira Ayuso     2021-03-31  715  {
d59d2f82f984df Pablo Neira Ayuso     2021-04-23  716  	struct nftables_pernet *nft_net = nft_pernet(net);
0854db2aaef3fc Florian Westphal      2021-04-01  717  
0854db2aaef3fc Florian Westphal      2021-04-01  718  	return htons(nft_net->base_seq & 0xffff);
802b805162a1b7 Pablo Neira Ayuso     2021-03-31  719  }
802b805162a1b7 Pablo Neira Ayuso     2021-03-31  720  
96518518cc417b Patrick McHardy       2013-10-14  721  static const struct nla_policy nft_table_policy[NFTA_TABLE_MAX + 1] = {
1cae565e8b746f Pablo Neira Ayuso     2015-03-05  722  	[NFTA_TABLE_NAME]	= { .type = NLA_STRING,
1cae565e8b746f Pablo Neira Ayuso     2015-03-05  723  				    .len = NFT_TABLE_MAXNAMELEN - 1 },
9ddf63235749a9 Pablo Neira Ayuso     2013-10-10  724  	[NFTA_TABLE_FLAGS]	= { .type = NLA_U32 },
3ecbfd65f50e5f Harsha Sharma         2017-12-27  725  	[NFTA_TABLE_HANDLE]	= { .type = NLA_U64 },
7a81575b806e5d Jose M. Guisado Gomez 2020-08-20  726  	[NFTA_TABLE_USERDATA]	= { .type = NLA_BINARY,
7a81575b806e5d Jose M. Guisado Gomez 2020-08-20  727  				    .len = NFT_USERDATA_MAXLEN }
96518518cc417b Patrick McHardy       2013-10-14  728  };
96518518cc417b Patrick McHardy       2013-10-14  729  
84d7fce6938848 Pablo Neira Ayuso     2014-09-04 @730  static int nf_tables_fill_table_info(struct sk_buff *skb, struct net *net,
84d7fce6938848 Pablo Neira Ayuso     2014-09-04  731  				     u32 portid, u32 seq, int event, u32 flags,
84d7fce6938848 Pablo Neira Ayuso     2014-09-04  732  				     int family, const struct nft_table *table)
96518518cc417b Patrick McHardy       2013-10-14  733  {
96518518cc417b Patrick McHardy       2013-10-14  734  	struct nlmsghdr *nlh;
96518518cc417b Patrick McHardy       2013-10-14  735  
dedb67c4b4e5fa Pablo Neira Ayuso     2017-03-28  736  	event = nfnl_msg_type(NFNL_SUBSYS_NFTABLES, event);
19c28b1374fb10 Pablo Neira Ayuso     2021-03-30  737  	nlh = nfnl_msg_put(skb, portid, seq, event, flags, family,
19c28b1374fb10 Pablo Neira Ayuso     2021-03-30  738  			   NFNETLINK_V0, nft_base_seq(net));
19c28b1374fb10 Pablo Neira Ayuso     2021-03-30  739  	if (!nlh)
96518518cc417b Patrick McHardy       2013-10-14  740  		goto nla_put_failure;
96518518cc417b Patrick McHardy       2013-10-14  741  
9ddf63235749a9 Pablo Neira Ayuso     2013-10-10  742  	if (nla_put_string(skb, NFTA_TABLE_NAME, table->name) ||
179d9ba5559a75 Pablo Neira Ayuso     2021-05-24  743  	    nla_put_be32(skb, NFTA_TABLE_FLAGS,
179d9ba5559a75 Pablo Neira Ayuso     2021-05-24  744  			 htonl(table->flags & NFT_TABLE_F_MASK)) ||
3ecbfd65f50e5f Harsha Sharma         2017-12-27  745  	    nla_put_be32(skb, NFTA_TABLE_USE, htonl(table->use)) ||
3ecbfd65f50e5f Harsha Sharma         2017-12-27  746  	    nla_put_be64(skb, NFTA_TABLE_HANDLE, cpu_to_be64(table->handle),
3ecbfd65f50e5f Harsha Sharma         2017-12-27  747  			 NFTA_TABLE_PAD))
96518518cc417b Patrick McHardy       2013-10-14  748  		goto nla_put_failure;
6001a930ce0378 Pablo Neira Ayuso     2021-02-15  749  	if (nft_table_has_owner(table) &&
6001a930ce0378 Pablo Neira Ayuso     2021-02-15  750  	    nla_put_be32(skb, NFTA_TABLE_OWNER, htonl(table->nlpid)))
6001a930ce0378 Pablo Neira Ayuso     2021-02-15  751  		goto nla_put_failure;
96518518cc417b Patrick McHardy       2013-10-14  752  
7a81575b806e5d Jose M. Guisado Gomez 2020-08-20  753  	if (table->udata) {
7a81575b806e5d Jose M. Guisado Gomez 2020-08-20  754  		if (nla_put(skb, NFTA_TABLE_USERDATA, table->udlen, table->udata))
7a81575b806e5d Jose M. Guisado Gomez 2020-08-20  755  			goto nla_put_failure;
7a81575b806e5d Jose M. Guisado Gomez 2020-08-20  756  	}
7a81575b806e5d Jose M. Guisado Gomez 2020-08-20  757  
053c095a82cf77 Johannes Berg         2015-01-16  758  	nlmsg_end(skb, nlh);
053c095a82cf77 Johannes Berg         2015-01-16  759  	return 0;
96518518cc417b Patrick McHardy       2013-10-14  760  
96518518cc417b Patrick McHardy       2013-10-14  761  nla_put_failure:
96518518cc417b Patrick McHardy       2013-10-14  762  	nlmsg_trim(skb, nlh);
96518518cc417b Patrick McHardy       2013-10-14  763  	return -1;
96518518cc417b Patrick McHardy       2013-10-14  764  }
96518518cc417b Patrick McHardy       2013-10-14  765  
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  766  struct nftnl_skb_parms {
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  767  	bool report;
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  768  };
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  769  #define NFT_CB(skb)	(*(struct nftnl_skb_parms*)&((skb)->cb))
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  770  
67cc570edaa020 Pablo Neira Ayuso     2020-08-27 @771  static void nft_notify_enqueue(struct sk_buff *skb, bool report,
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  772  			       struct list_head *notify_list)
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  773  {
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  774  	NFT_CB(skb).report = report;
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  775  	list_add_tail(&skb->list, notify_list);
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  776  }
67cc570edaa020 Pablo Neira Ayuso     2020-08-27  777  
25e94a997b324b Pablo Neira Ayuso     2017-03-01 @778  static void nf_tables_table_notify(const struct nft_ctx *ctx, int event)
96518518cc417b Patrick McHardy       2013-10-14  779  {
0854db2aaef3fc Florian Westphal      2021-04-01  780  	struct nftables_pernet *nft_net;
96518518cc417b Patrick McHardy       2013-10-14  781  	struct sk_buff *skb;
96518518cc417b Patrick McHardy       2013-10-14  782  	int err;
96518518cc417b Patrick McHardy       2013-10-14  783  
128ad3322ba5de Pablo Neira Ayuso     2014-05-09  784  	if (!ctx->report &&
128ad3322ba5de Pablo Neira Ayuso     2014-05-09  785  	    !nfnetlink_has_listeners(ctx->net, NFNLGRP_NFTABLES))
25e94a997b324b Pablo Neira Ayuso     2017-03-01  786  		return;
96518518cc417b Patrick McHardy       2013-10-14  787  
96518518cc417b Patrick McHardy       2013-10-14  788  	skb = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
96518518cc417b Patrick McHardy       2013-10-14  789  	if (skb == NULL)
96518518cc417b Patrick McHardy       2013-10-14  790  		goto err;
96518518cc417b Patrick McHardy       2013-10-14  791  
84d7fce6938848 Pablo Neira Ayuso     2014-09-04  792  	err = nf_tables_fill_table_info(skb, ctx->net, ctx->portid, ctx->seq,
36596dadf54a92 Pablo Neira Ayuso     2018-01-09  793  					event, 0, ctx->family, ctx->table);
96518518cc417b Patrick McHardy       2013-10-14  794  	if (err < 0) {
96518518cc417b Patrick McHardy       2013-10-14  795  		kfree_skb(skb);
96518518cc417b Patrick McHardy       2013-10-14  796  		goto err;
96518518cc417b Patrick McHardy       2013-10-14  797  	}
96518518cc417b Patrick McHardy       2013-10-14  798  
d59d2f82f984df Pablo Neira Ayuso     2021-04-23  799  	nft_net = nft_pernet(ctx->net);
0854db2aaef3fc Florian Westphal      2021-04-01  800  	nft_notify_enqueue(skb, ctx->report, &nft_net->notify_list);
25e94a997b324b Pablo Neira Ayuso     2017-03-01  801  	return;
96518518cc417b Patrick McHardy       2013-10-14  802  err:
25e94a997b324b Pablo Neira Ayuso     2017-03-01  803  	nfnetlink_set_err(ctx->net, ctx->portid, NFNLGRP_NFTABLES, -ENOBUFS);
96518518cc417b Patrick McHardy       2013-10-14  804  }
96518518cc417b Patrick McHardy       2013-10-14  805  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 47812 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH nf 2/2] netfilter: nf_tables: do not allow to delete table with owner by handle
  2021-06-22 10:13 ` [PATCH nf 2/2] netfilter: nf_tables: do not allow to delete table with owner by handle Pablo Neira Ayuso
@ 2021-06-22 14:35     ` kernel test robot
  2021-06-22 14:35     ` kernel test robot
  1 sibling, 0 replies; 6+ messages in thread
From: kernel test robot @ 2021-06-22 14:35 UTC (permalink / raw)
  To: Pablo Neira Ayuso, netfilter-devel; +Cc: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 104327 bytes --]

Hi Pablo,

I love your patch! Perhaps something to improve:

[auto build test WARNING on nf/master]

url:    https://github.com/0day-ci/linux/commits/Pablo-Neira-Ayuso/netfilter-nf_tables-skip-netlink-portID-validation-if-zero/20210622-181539
base:   https://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf.git master
config: arc-allyesconfig (attached as .config)
compiler: arceb-elf-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/cdd859ce5abc8381eeb7ea8088fb4c273cb7c2cb
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Pablo-Neira-Ayuso/netfilter-nf_tables-skip-netlink-portID-validation-if-zero/20210622-181539
        git checkout cdd859ce5abc8381eeb7ea8088fb4c273cb7c2cb
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   net/netfilter/nf_tables_api.c: In function 'nft_table_lookup_byhandle':
   net/netfilter/nf_tables_api.c:605:19: error: invalid storage class for function 'nf_tables_alloc_handle'
     605 | static inline u64 nf_tables_alloc_handle(struct nft_table *table)
         |                   ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:605:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     605 | static inline u64 nf_tables_alloc_handle(struct nft_table *table)
         | ^~~~~~
   net/netfilter/nf_tables_api.c:613:1: error: invalid storage class for function '__nft_chain_type_get'
     613 | __nft_chain_type_get(u8 family, enum nft_chain_types type)
         | ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:623:1: error: invalid storage class for function '__nf_tables_chain_type_lookup'
     623 | __nf_tables_chain_type_lookup(const struct nlattr *nla, u8 family)
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:681:19: error: non-static declaration of 'nft_request_module' follows static declaration
     681 | EXPORT_SYMBOL_GPL(nft_request_module);
         |                   ^~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:681:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
     681 | EXPORT_SYMBOL_GPL(nft_request_module);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:645:20: note: previous definition of 'nft_request_module' was here
     645 | __printf(2, 3) int nft_request_module(struct net *net, const char *fmt,
         |                    ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:681:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
     681 | EXPORT_SYMBOL_GPL(nft_request_module);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:684:13: error: invalid storage class for function 'lockdep_nfnl_nft_mutex_not_held'
     684 | static void lockdep_nfnl_nft_mutex_not_held(void)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:693:1: error: invalid storage class for function 'nf_tables_chain_type_lookup'
     693 | nf_tables_chain_type_lookup(struct net *net, const struct nlattr *nla,
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:714:15: error: invalid storage class for function 'nft_base_seq'
     714 | static __be16 nft_base_seq(const struct net *net)
         |               ^~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:730:12: error: invalid storage class for function 'nf_tables_fill_table_info'
     730 | static int nf_tables_fill_table_info(struct sk_buff *skb, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:771:13: error: invalid storage class for function 'nft_notify_enqueue'
     771 | static void nft_notify_enqueue(struct sk_buff *skb, bool report,
         |             ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:778:13: error: invalid storage class for function 'nf_tables_table_notify'
     778 | static void nf_tables_table_notify(const struct nft_ctx *ctx, int event)
         |             ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:806:12: error: invalid storage class for function 'nf_tables_dump_tables'
     806 | static int nf_tables_dump_tables(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:848:12: error: invalid storage class for function 'nft_netlink_dump_start_rcu'
     848 | static int nft_netlink_dump_start_rcu(struct sock *nlsk, struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:866:12: error: invalid storage class for function 'nf_tables_gettable'
     866 | static int nf_tables_gettable(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:910:13: error: invalid storage class for function 'nft_table_disable'
     910 | static void nft_table_disable(struct net *net, struct nft_table *table, u32 cnt)
         |             ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:928:12: error: invalid storage class for function 'nf_tables_table_enable'
     928 | static int nf_tables_table_enable(struct net *net, struct nft_table *table)
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:953:13: error: invalid storage class for function 'nf_tables_table_disable'
     953 | static void nf_tables_table_disable(struct net *net, struct nft_table *table)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:966:12: error: invalid storage class for function 'nf_tables_updtable'
     966 | static int nf_tables_updtable(struct nft_ctx *ctx)
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1020:12: error: invalid storage class for function 'nft_chain_hash'
    1020 | static u32 nft_chain_hash(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1027:12: error: invalid storage class for function 'nft_chain_hash_obj'
    1027 | static u32 nft_chain_hash_obj(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1034:12: error: invalid storage class for function 'nft_chain_hash_cmp'
    1034 | static int nft_chain_hash_cmp(struct rhashtable_compare_arg *arg,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1043:12: error: invalid storage class for function 'nft_objname_hash'
    1043 | static u32 nft_objname_hash(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1052:12: error: invalid storage class for function 'nft_objname_hash_obj'
    1052 | static u32 nft_objname_hash_obj(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1059:12: error: invalid storage class for function 'nft_objname_hash_cmp'
    1059 | static int nft_objname_hash_cmp(struct rhashtable_compare_arg *arg,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1071:12: error: invalid storage class for function 'nf_tables_newtable'
    1071 | static int nf_tables_newtable(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1162:12: error: invalid storage class for function 'nft_flush_table'
    1162 | static int nft_flush_table(struct nft_ctx *ctx)
         |            ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1234:12: error: invalid storage class for function 'nft_flush'
    1234 | static int nft_flush(struct nft_ctx *ctx, int family)
         |            ^~~~~~~~~
   net/netfilter/nf_tables_api.c:1267:12: error: invalid storage class for function 'nf_tables_deltable'
    1267 | static int nf_tables_deltable(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1309:13: error: invalid storage class for function 'nf_tables_table_destroy'
    1309 | static void nf_tables_table_destroy(struct nft_ctx *ctx)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:1330:19: error: non-static declaration of 'nft_register_chain_type' follows static declaration
    1330 | EXPORT_SYMBOL_GPL(nft_register_chain_type);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1330:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    1330 | EXPORT_SYMBOL_GPL(nft_register_chain_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1320:6: note: previous definition of 'nft_register_chain_type' was here
    1320 | void nft_register_chain_type(const struct nft_chain_type *ctype)
         |      ^~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1330:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    1330 | EXPORT_SYMBOL_GPL(nft_register_chain_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1338:19: error: non-static declaration of 'nft_unregister_chain_type' follows static declaration
    1338 | EXPORT_SYMBOL_GPL(nft_unregister_chain_type);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1338:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    1338 | EXPORT_SYMBOL_GPL(nft_unregister_chain_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1332:6: note: previous definition of 'nft_unregister_chain_type' was here
    1332 | void nft_unregister_chain_type(const struct nft_chain_type *ctype)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1338:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    1338 | EXPORT_SYMBOL_GPL(nft_unregister_chain_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1345:1: error: invalid storage class for function 'nft_chain_lookup_byhandle'
    1345 | nft_chain_lookup_byhandle(const struct nft_table *table, u64 handle, u8 genmask)
         | ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1358:13: error: invalid storage class for function 'lockdep_commit_lock_is_held'
    1358 | static bool lockdep_commit_lock_is_held(const struct net *net)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1369:26: error: invalid storage class for function 'nft_chain_lookup'
    1369 | static struct nft_chain *nft_chain_lookup(struct net *net,
         |                          ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1425:12: error: invalid storage class for function 'nft_dump_stats'
    1425 | static int nft_dump_stats(struct sk_buff *skb, struct nft_stats __percpu *stats)
         |            ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1464:12: error: invalid storage class for function 'nft_dump_basechain_hook'
    1464 | static int nft_dump_basechain_hook(struct sk_buff *skb, int family,
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1504:12: error: invalid storage class for function 'nf_tables_fill_chain_info'
    1504 | static int nf_tables_fill_chain_info(struct sk_buff *skb, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1564:13: error: invalid storage class for function 'nf_tables_chain_notify'
    1564 | static void nf_tables_chain_notify(const struct nft_ctx *ctx, int event)
         |             ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1593:12: error: invalid storage class for function 'nf_tables_dump_chains'
    1593 | static int nf_tables_dump_chains(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1641:12: error: invalid storage class for function 'nf_tables_getchain'
    1641 | static int nf_tables_getchain(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1697:35: error: invalid storage class for function 'nft_stats_alloc'
    1697 | static struct nft_stats __percpu *nft_stats_alloc(const struct nlattr *attr)
         |                                   ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1728:13: error: invalid storage class for function 'nft_chain_stats_replace'
    1728 | static void nft_chain_stats_replace(struct nft_trans *trans)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1743:13: error: invalid storage class for function 'nf_tables_chain_free_chain_rules'
    1743 | static void nf_tables_chain_free_chain_rules(struct nft_chain *chain)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1793:25: error: invalid storage class for function 'nft_netdev_hook_alloc'
    1793 | static struct nft_hook *nft_netdev_hook_alloc(struct net *net,
         |                         ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1828:25: error: invalid storage class for function 'nft_hook_list_find'
    1828 | static struct nft_hook *nft_hook_list_find(struct list_head *hook_list,
         |                         ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1841:12: error: invalid storage class for function 'nf_tables_parse_netdev_hooks'
    1841 | static int nf_tables_parse_netdev_hooks(struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1891:12: error: invalid storage class for function 'nft_chain_parse_netdev'
    1891 | static int nft_chain_parse_netdev(struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1919:12: error: invalid storage class for function 'nft_chain_parse_hook'
    1919 | static int nft_chain_parse_hook(struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1987:13: error: invalid storage class for function 'nft_chain_release_hook'
    1987 | static void nft_chain_release_hook(struct nft_chain_hook *hook)
         |             ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2003:26: error: invalid storage class for function 'nf_tables_chain_alloc_rules'
    2003 | static struct nft_rule **nf_tables_chain_alloc_rules(const struct nft_chain *chain,
         |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2019:13: error: invalid storage class for function 'nft_basechain_hook_init'
    2019 | static void nft_basechain_hook_init(struct nf_hook_ops *ops, u8 family,
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2030:12: error: invalid storage class for function 'nft_basechain_init'
    2030 | static int nft_basechain_init(struct nft_base_chain *basechain, u8 family,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2062:12: error: invalid storage class for function 'nft_chain_add'
    2062 | static int nft_chain_add(struct nft_table *table, struct nft_chain *chain)
         |            ^~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2078:12: error: invalid storage class for function 'nf_tables_addchain'
    2078 | static int nf_tables_addchain(struct nft_ctx *ctx, u8 family, u8 genmask,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2216:13: error: invalid storage class for function 'nft_hook_list_equal'
    2216 | static bool nft_hook_list_equal(struct list_head *hook_list1,
         |             ^~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2235:12: error: invalid storage class for function 'nf_tables_updchain'
    2235 | static int nf_tables_updchain(struct nft_ctx *ctx, u8 genmask, u8 policy,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2358:26: error: invalid storage class for function 'nft_chain_lookup_byid'
    2358 | static struct nft_chain *nft_chain_lookup_byid(const struct net *net,
         |                          ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2375:12: error: invalid storage class for function 'nf_tables_newchain'
    2375 | static int nf_tables_newchain(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2474:12: error: invalid storage class for function 'nf_tables_delchain'
    2474 | static int nf_tables_delchain(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:2560:19: error: non-static declaration of 'nft_register_expr' follows static declaration
    2560 | EXPORT_SYMBOL_GPL(nft_register_expr);
         |                   ^~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2560:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    2560 | EXPORT_SYMBOL_GPL(nft_register_expr);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2550:5: note: previous definition of 'nft_register_expr' was here
    2550 | int nft_register_expr(struct nft_expr_type *type)
         |     ^~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2560:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    2560 | EXPORT_SYMBOL_GPL(nft_register_expr);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2574:19: error: non-static declaration of 'nft_unregister_expr' follows static declaration
    2574 | EXPORT_SYMBOL_GPL(nft_unregister_expr);
         |                   ^~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2574:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    2574 | EXPORT_SYMBOL_GPL(nft_unregister_expr);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2568:6: note: previous definition of 'nft_unregister_expr' was here
    2568 | void nft_unregister_expr(struct nft_expr_type *type)
         |      ^~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2574:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    2574 | EXPORT_SYMBOL_GPL(nft_unregister_expr);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2576:36: error: invalid storage class for function '__nft_expr_type_get'
    2576 | static const struct nft_expr_type *__nft_expr_type_get(u8 family,
         |                                    ^~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2593:12: error: invalid storage class for function 'nft_expr_type_request_module'
    2593 | static int nft_expr_type_request_module(struct net *net, u8 family,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2604:36: error: invalid storage class for function 'nft_expr_type_get'
    2604 | static const struct nft_expr_type *nft_expr_type_get(struct net *net,
         |                                    ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2638:12: error: invalid storage class for function 'nf_tables_fill_expr_info'
    2638 | static int nf_tables_fill_expr_info(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2660:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
    2660 | int nft_expr_dump(struct sk_buff *skb, unsigned int attr,
         | ^~~
   net/netfilter/nf_tables_api.c:2683:12: error: invalid storage class for function 'nf_tables_expr_parse'
    2683 | static int nf_tables_expr_parse(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2737:12: error: invalid storage class for function 'nf_tables_newexpr'
    2737 | static int nf_tables_newexpr(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2757:13: error: invalid storage class for function 'nf_tables_expr_destroy'
    2757 | static void nf_tables_expr_destroy(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2767:25: error: invalid storage class for function 'nft_expr_init'
    2767 | static struct nft_expr *nft_expr_init(const struct nft_ctx *ctx,
         |                         ^~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2829:25: error: invalid storage class for function '__nft_rule_lookup'
    2829 | static struct nft_rule *__nft_rule_lookup(const struct nft_chain *chain,
         |                         ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2843:25: error: invalid storage class for function 'nft_rule_lookup'
    2843 | static struct nft_rule *nft_rule_lookup(const struct nft_chain *chain,
         |                         ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2868:12: error: invalid storage class for function 'nf_tables_fill_rule_info'
    2868 | static int nf_tables_fill_rule_info(struct sk_buff *skb, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2928:13: error: invalid storage class for function 'nf_tables_rule_notify'
    2928 | static void nf_tables_rule_notify(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2962:12: error: invalid storage class for function '__nf_tables_dump_rules'
    2962 | static int __nf_tables_dump_rules(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2999:12: error: invalid storage class for function 'nf_tables_dump_rules'
    2999 | static int nf_tables_dump_rules(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3055:12: error: invalid storage class for function 'nf_tables_dump_rules_start'
    3055 | static int nf_tables_dump_rules_start(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3088:12: error: invalid storage class for function 'nf_tables_dump_rules_done'
    3088 | static int nf_tables_dump_rules_done(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3101:12: error: invalid storage class for function 'nf_tables_getrule'
    3101 | static int nf_tables_getrule(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3162:13: error: invalid storage class for function 'nf_tables_rule_destroy'
    3162 | static void nf_tables_rule_destroy(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:3212:19: error: non-static declaration of 'nft_chain_validate' follows static declaration
    3212 | EXPORT_SYMBOL_GPL(nft_chain_validate);
         |                   ^~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3212:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    3212 | EXPORT_SYMBOL_GPL(nft_chain_validate);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3186:5: note: previous definition of 'nft_chain_validate' was here
    3186 | int nft_chain_validate(const struct nft_ctx *ctx, const struct nft_chain *chain)
         |     ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3212:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    3212 | EXPORT_SYMBOL_GPL(nft_chain_validate);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3214:12: error: invalid storage class for function 'nft_table_validate'
    3214 | static int nft_table_validate(struct net *net, const struct nft_table *table)
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3236:25: error: invalid storage class for function 'nft_rule_lookup_byid'
    3236 | static struct nft_rule *nft_rule_lookup_byid(const struct net *net,
         |                         ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3241:12: error: invalid storage class for function 'nf_tables_newrule'
    3241 | static int nf_tables_newrule(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c: In function 'nf_tables_newrule':
   net/netfilter/nf_tables_api.c:3326:15: error: implicit declaration of function 'nft_rule_lookup_byid'; did you mean 'nft_rule_lookup'? [-Werror=implicit-function-declaration]
    3326 |    old_rule = nft_rule_lookup_byid(net, nla[NFTA_RULE_POSITION_ID]);
         |               ^~~~~~~~~~~~~~~~~~~~
         |               nft_rule_lookup
   net/netfilter/nf_tables_api.c:3326:13: warning: assignment to 'struct nft_rule *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
    3326 |    old_rule = nft_rule_lookup_byid(net, nla[NFTA_RULE_POSITION_ID]);
         |             ^
   net/netfilter/nf_tables_api.c: In function 'nft_table_lookup_byhandle':
   net/netfilter/nf_tables_api.c:3465:25: error: invalid storage class for function 'nft_rule_lookup_byid'
    3465 | static struct nft_rule *nft_rule_lookup_byid(const struct net *net,
         |                         ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3482:12: error: invalid storage class for function 'nf_tables_delrule'
    3482 | static int nf_tables_delrule(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3569:13: error: invalid storage class for function 'nft_set_ops_candidate'
    3569 | static bool nft_set_ops_candidate(const struct nft_set_type *type, u32 flags)
         |             ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3580:1: error: invalid storage class for function 'nft_select_set_ops'
    3580 | nft_select_set_ops(const struct nft_ctx *ctx,
         | ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3673:12: error: invalid storage class for function 'nft_ctx_init_from_setattr'
    3673 | static int nft_ctx_init_from_setattr(struct nft_ctx *ctx, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3697:24: error: invalid storage class for function 'nft_set_lookup'
    3697 | static struct nft_set *nft_set_lookup(const struct nft_table *table,
         |                        ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3713:24: error: invalid storage class for function 'nft_set_lookup_byhandle'
    3713 | static struct nft_set *nft_set_lookup_byhandle(const struct nft_table *table,
         |                        ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3727:24: error: invalid storage class for function 'nft_set_lookup_byid'
    3727 | static struct nft_set *nft_set_lookup_byid(const struct net *net,
         |                        ^~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:3763:19: error: non-static declaration of 'nft_set_lookup_global' follows static declaration
    3763 | EXPORT_SYMBOL_GPL(nft_set_lookup_global);
         |                   ^~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3763:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    3763 | EXPORT_SYMBOL_GPL(nft_set_lookup_global);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3746:17: note: previous definition of 'nft_set_lookup_global' was here
    3746 | struct nft_set *nft_set_lookup_global(const struct net *net,
         |                 ^~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3763:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    3763 | EXPORT_SYMBOL_GPL(nft_set_lookup_global);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3765:12: error: invalid storage class for function 'nf_tables_set_alloc_name'
    3765 | static int nf_tables_set_alloc_name(struct nft_ctx *ctx, struct nft_set *set,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3839:12: error: invalid storage class for function 'nf_tables_fill_set_concat'
    3839 | static int nf_tables_fill_set_concat(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3866:12: error: invalid storage class for function 'nf_tables_fill_set'
    3866 | static int nf_tables_fill_set(struct sk_buff *skb, const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3964:13: error: invalid storage class for function 'nf_tables_set_notify'
    3964 | static void nf_tables_set_notify(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3993:12: error: invalid storage class for function 'nf_tables_dump_sets'
    3993 | static int nf_tables_dump_sets(struct sk_buff *skb, struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4054:12: error: invalid storage class for function 'nf_tables_dump_sets_start'
    4054 | static int nf_tables_dump_sets_start(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4066:12: error: invalid storage class for function 'nf_tables_dump_sets_done'
    4066 | static int nf_tables_dump_sets_done(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4073:12: error: invalid storage class for function 'nf_tables_getset'
    4073 | static int nf_tables_getset(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4132:12: error: invalid storage class for function 'nft_set_desc_concat_parse'
    4132 | static int nft_set_desc_concat_parse(const struct nlattr *attr,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4157:12: error: invalid storage class for function 'nft_set_desc_concat'
    4157 | static int nft_set_desc_concat(struct nft_set_desc *desc,
         |            ^~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4175:12: error: invalid storage class for function 'nf_tables_set_desc_parse'
    4175 | static int nf_tables_set_desc_parse(struct nft_set_desc *desc,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4194:12: error: invalid storage class for function 'nf_tables_newset'
    4194 | static int nf_tables_newset(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4471:13: error: invalid storage class for function 'nft_set_catchall_destroy'
    4471 | static void nft_set_catchall_destroy(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4483:13: error: invalid storage class for function 'nft_set_destroy'
    4483 | static void nft_set_destroy(const struct nft_ctx *ctx, struct nft_set *set)
         |             ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4499:12: error: invalid storage class for function 'nf_tables_delset'
    4499 | static int nf_tables_delset(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4543:12: error: invalid storage class for function 'nft_validate_register_store'
    4543 | static int nft_validate_register_store(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4549:12: error: invalid storage class for function 'nft_setelem_data_validate'
    4549 | static int nft_setelem_data_validate(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c: In function 'nft_setelem_data_validate':
   net/netfilter/nf_tables_api.c:4557:9: error: implicit declaration of function 'nft_validate_register_store'; did you mean 'nft_parse_register_store'? [-Werror=implicit-function-declaration]
    4557 |  return nft_validate_register_store(ctx, dreg, nft_set_ext_data(ext),
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
         |         nft_parse_register_store
   net/netfilter/nf_tables_api.c: In function 'nft_table_lookup_byhandle':
   net/netfilter/nf_tables_api.c:4563:12: error: invalid storage class for function 'nf_tables_bind_check_setelem'
    4563 | static int nf_tables_bind_check_setelem(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4571:12: error: invalid storage class for function 'nft_set_catchall_bind_check'
    4571 | static int nft_set_catchall_bind_check(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:4637:19: error: non-static declaration of 'nf_tables_bind_set' follows static declaration
    4637 | EXPORT_SYMBOL_GPL(nf_tables_bind_set);
         |                   ^~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4637:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    4637 | EXPORT_SYMBOL_GPL(nf_tables_bind_set);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4594:5: note: previous definition of 'nf_tables_bind_set' was here
    4594 | int nf_tables_bind_set(const struct nft_ctx *ctx, struct nft_set *set,
         |     ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4637:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    4637 | EXPORT_SYMBOL_GPL(nf_tables_bind_set);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4639:13: error: invalid storage class for function 'nf_tables_unbind_set'
    4639 | static void nf_tables_unbind_set(const struct nft_ctx *ctx, struct nft_set *set,
         |             ^~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:4669:19: error: non-static declaration of 'nf_tables_deactivate_set' follows static declaration
    4669 | EXPORT_SYMBOL_GPL(nf_tables_deactivate_set);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4669:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    4669 | EXPORT_SYMBOL_GPL(nf_tables_deactivate_set);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4652:6: note: previous definition of 'nf_tables_deactivate_set' was here
    4652 | void nf_tables_deactivate_set(const struct nft_ctx *ctx, struct nft_set *set,
         |      ^~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4669:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    4669 | EXPORT_SYMBOL_GPL(nf_tables_deactivate_set);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4676:19: error: non-static declaration of 'nf_tables_destroy_set' follows static declaration
    4676 | EXPORT_SYMBOL_GPL(nf_tables_destroy_set);
         |                   ^~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4676:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    4676 | EXPORT_SYMBOL_GPL(nf_tables_destroy_set);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4671:6: note: previous definition of 'nf_tables_destroy_set' was here
    4671 | void nf_tables_destroy_set(const struct nft_ctx *ctx, struct nft_set *set)
         |      ^~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4676:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    4676 | EXPORT_SYMBOL_GPL(nf_tables_destroy_set);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4741:12: error: invalid storage class for function 'nft_ctx_init_from_elemattr'
    4741 | static int nft_ctx_init_from_elemattr(struct nft_ctx *ctx, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4763:12: error: invalid storage class for function 'nft_set_elem_expr_dump'
    4763 | static int nft_set_elem_expr_dump(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4800:12: error: invalid storage class for function 'nf_tables_fill_setelem'
    4800 | static int nf_tables_fill_setelem(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4886:12: error: invalid storage class for function 'nf_tables_dump_setelem'
    4886 | static int nf_tables_dump_setelem(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4902:12: error: invalid storage class for function 'nft_set_catchall_dump'
    4902 | static int nft_set_catchall_dump(struct net *net, struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4925:12: error: invalid storage class for function 'nf_tables_dump_set'
    4925 | static int nf_tables_dump_set(struct sk_buff *skb, struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5010:12: error: invalid storage class for function 'nf_tables_dump_set_start'
    5010 | static int nf_tables_dump_set_start(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5019:12: error: invalid storage class for function 'nf_tables_dump_set_done'
    5019 | static int nf_tables_dump_set_done(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5025:12: error: invalid storage class for function 'nf_tables_fill_setelem_info'
    5025 | static int nf_tables_fill_setelem_info(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5064:12: error: invalid storage class for function 'nft_setelem_parse_flags'
    5064 | static int nft_setelem_parse_flags(const struct nft_set *set,
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5080:12: error: invalid storage class for function 'nft_setelem_parse_key'
    5080 | static int nft_setelem_parse_key(struct nft_ctx *ctx, struct nft_set *set,
         |            ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5098:12: error: invalid storage class for function 'nft_setelem_parse_data'
    5098 | static int nft_setelem_parse_data(struct nft_ctx *ctx, struct nft_set *set,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5117:14: error: invalid storage class for function 'nft_setelem_catchall_get'
    5117 | static void *nft_setelem_catchall_get(const struct net *net,
         |              ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5138:12: error: invalid storage class for function 'nft_setelem_get'
    5138 | static int nft_setelem_get(struct nft_ctx *ctx, struct nft_set *set,
         |            ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5157:12: error: invalid storage class for function 'nft_get_set_elem'
    5157 | static int nft_get_set_elem(struct nft_ctx *ctx, struct nft_set *set,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5214:12: error: invalid storage class for function 'nf_tables_getsetelem'
    5214 | static int nf_tables_getsetelem(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5263:13: error: invalid storage class for function 'nf_tables_setelem_notify'
    5263 | static void nf_tables_setelem_notify(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5295:26: error: invalid storage class for function 'nft_trans_elem_alloc'
    5295 | static struct nft_trans *nft_trans_elem_alloc(struct nft_ctx *ctx,
         |                          ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5371:13: error: invalid storage class for function '__nft_set_elem_expr_destroy'
    5371 | static void __nft_set_elem_expr_destroy(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5382:13: error: invalid storage class for function 'nft_set_elem_expr_destroy'
    5382 | static void nft_set_elem_expr_destroy(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:5411:19: error: non-static declaration of 'nft_set_elem_destroy' follows static declaration
    5411 | EXPORT_SYMBOL_GPL(nft_set_elem_destroy);
         |                   ^~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5411:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    5411 | EXPORT_SYMBOL_GPL(nft_set_elem_destroy);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5392:6: note: previous definition of 'nft_set_elem_destroy' was here
    5392 | void nft_set_elem_destroy(const struct nft_set *set, void *elem,
         |      ^~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5411:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    5411 | EXPORT_SYMBOL_GPL(nft_set_elem_destroy);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5416:13: error: invalid storage class for function 'nf_tables_set_elem_destroy'
    5416 | static void nf_tables_set_elem_destroy(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5455:12: error: invalid storage class for function 'nft_set_elem_expr_setup'
    5455 | static int nft_set_elem_expr_setup(struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:5502:19: error: non-static declaration of 'nft_set_catchall_lookup' follows static declaration
    5502 | EXPORT_SYMBOL_GPL(nft_set_catchall_lookup);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5502:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    5502 | EXPORT_SYMBOL_GPL(nft_set_catchall_lookup);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5486:21: note: previous definition of 'nft_set_catchall_lookup' was here
    5486 | struct nft_set_ext *nft_set_catchall_lookup(const struct net *net,
         |                     ^~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5502:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    5502 | EXPORT_SYMBOL_GPL(nft_set_catchall_lookup);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5525:19: error: non-static declaration of 'nft_set_catchall_gc' follows static declaration
    5525 | EXPORT_SYMBOL_GPL(nft_set_catchall_gc);
         |                   ^~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5525:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    5525 | EXPORT_SYMBOL_GPL(nft_set_catchall_gc);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5504:7: note: previous definition of 'nft_set_catchall_gc' was here
    5504 | void *nft_set_catchall_gc(const struct nft_set *set)
         |       ^~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5525:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    5525 | EXPORT_SYMBOL_GPL(nft_set_catchall_gc);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5527:12: error: invalid storage class for function 'nft_setelem_catchall_insert'
    5527 | static int nft_setelem_catchall_insert(const struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5554:12: error: invalid storage class for function 'nft_setelem_insert'
    5554 | static int nft_setelem_insert(const struct net *net,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5569:13: error: invalid storage class for function 'nft_setelem_is_catchall'
    5569 | static bool nft_setelem_is_catchall(const struct nft_set *set,
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5581:13: error: invalid storage class for function 'nft_setelem_activate'
    5581 | static void nft_setelem_activate(struct net *net, struct nft_set *set,
         |             ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5594:12: error: invalid storage class for function 'nft_setelem_catchall_deactivate'
    5594 | static int nft_setelem_catchall_deactivate(const struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5616:12: error: invalid storage class for function '__nft_setelem_deactivate'
    5616 | static int __nft_setelem_deactivate(const struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5633:12: error: invalid storage class for function 'nft_setelem_deactivate'
    5633 | static int nft_setelem_deactivate(const struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5647:13: error: invalid storage class for function 'nft_setelem_catchall_remove'
    5647 | static void nft_setelem_catchall_remove(const struct net *net,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5662:13: error: invalid storage class for function 'nft_setelem_remove'
    5662 | static void nft_setelem_remove(const struct net *net,
         |             ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5672:12: error: invalid storage class for function 'nft_add_set_elem'
    5672 | static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5996:12: error: invalid storage class for function 'nf_tables_newsetelem'
    5996 | static int nf_tables_newsetelem(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6073:13: error: invalid storage class for function 'nft_setelem_data_activate'
    6073 | static void nft_setelem_data_activate(const struct net *net,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6085:13: error: invalid storage class for function 'nft_setelem_data_deactivate'
    6085 | static void nft_setelem_data_deactivate(const struct net *net,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6097:12: error: invalid storage class for function 'nft_del_setelem'
    6097 | static int nft_del_setelem(struct nft_ctx *ctx, struct nft_set *set,
         |            ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6177:12: error: invalid storage class for function 'nft_setelem_flush'
    6177 | static int nft_setelem_flush(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6207:12: error: invalid storage class for function '__nft_set_catchall_flush'
    6207 | static int __nft_set_catchall_flush(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6226:12: error: invalid storage class for function 'nft_set_catchall_flush'
    6226 | static int nft_set_catchall_flush(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6250:12: error: invalid storage class for function 'nft_set_flush'
    6250 | static int nft_set_flush(struct nft_ctx *ctx, struct nft_set *set, u8 genmask)
         |            ^~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6264:12: error: invalid storage class for function 'nf_tables_delsetelem'
    6264 | static int nf_tables_delsetelem(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:6342:19: error: non-static declaration of 'nft_register_obj' follows static declaration
    6342 | EXPORT_SYMBOL_GPL(nft_register_obj);
         |                   ^~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6342:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6342 | EXPORT_SYMBOL_GPL(nft_register_obj);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6332:5: note: previous definition of 'nft_register_obj' was here
    6332 | int nft_register_obj(struct nft_object_type *obj_type)
         |     ^~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6342:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6342 | EXPORT_SYMBOL_GPL(nft_register_obj);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6356:19: error: non-static declaration of 'nft_unregister_obj' follows static declaration
    6356 | EXPORT_SYMBOL_GPL(nft_unregister_obj);
         |                   ^~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6356:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6356 | EXPORT_SYMBOL_GPL(nft_unregister_obj);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6350:6: note: previous definition of 'nft_unregister_obj' was here
    6350 | void nft_unregister_obj(struct nft_object_type *obj_type)
         |      ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6356:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6356 | EXPORT_SYMBOL_GPL(nft_unregister_obj);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6390:19: error: non-static declaration of 'nft_obj_lookup' follows static declaration
    6390 | EXPORT_SYMBOL_GPL(nft_obj_lookup);
         |                   ^~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6390:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6390 | EXPORT_SYMBOL_GPL(nft_obj_lookup);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6358:20: note: previous definition of 'nft_obj_lookup' was here
    6358 | struct nft_object *nft_obj_lookup(const struct net *net,
         |                    ^~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6390:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6390 | EXPORT_SYMBOL_GPL(nft_obj_lookup);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6392:27: error: invalid storage class for function 'nft_obj_lookup_byhandle'
    6392 | static struct nft_object *nft_obj_lookup_byhandle(const struct nft_table *table,
         |                           ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6419:27: error: invalid storage class for function 'nft_obj_init'
    6419 | static struct nft_object *nft_obj_init(const struct nft_ctx *ctx,
         |                           ^~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6472:12: error: invalid storage class for function 'nft_object_dump'
    6472 | static int nft_object_dump(struct sk_buff *skb, unsigned int attr,
         |            ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6489:38: error: invalid storage class for function '__nft_obj_type_get'
    6489 | static const struct nft_object_type *__nft_obj_type_get(u32 objtype)
         |                                      ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6501:1: error: invalid storage class for function 'nft_obj_type_get'
    6501 | nft_obj_type_get(struct net *net, u32 objtype)
         | ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6519:12: error: invalid storage class for function 'nf_tables_updobj'
    6519 | static int nf_tables_updobj(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6551:12: error: invalid storage class for function 'nf_tables_newobj'
    6551 | static int nf_tables_newobj(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6657:12: error: invalid storage class for function 'nf_tables_fill_obj_info'
    6657 | static int nf_tables_fill_obj_info(struct sk_buff *skb, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6696:12: error: invalid storage class for function 'nf_tables_dump_obj'
    6696 | static int nf_tables_dump_obj(struct sk_buff *skb, struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6768:12: error: invalid storage class for function 'nf_tables_dump_obj_start'
    6768 | static int nf_tables_dump_obj_start(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6794:12: error: invalid storage class for function 'nf_tables_dump_obj_done'
    6794 | static int nf_tables_dump_obj_done(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6807:12: error: invalid storage class for function 'nf_tables_getobj'
    6807 | static int nf_tables_getobj(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6886:13: error: invalid storage class for function 'nft_obj_destroy'
    6886 | static void nft_obj_destroy(const struct nft_ctx *ctx, struct nft_object *obj)
         |             ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6897:12: error: invalid storage class for function 'nf_tables_delobj'
    6897 | static int nf_tables_delobj(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:6984:19: error: non-static declaration of 'nft_obj_notify' follows static declaration
    6984 | EXPORT_SYMBOL_GPL(nft_obj_notify);
         |                   ^~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6984:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6984 | EXPORT_SYMBOL_GPL(nft_obj_notify);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6945:6: note: previous definition of 'nft_obj_notify' was here
    6945 | void nft_obj_notify(struct net *net, const struct nft_table *table,
         |      ^~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6984:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6984 | EXPORT_SYMBOL_GPL(nft_obj_notify);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6986:13: error: invalid storage class for function 'nf_tables_obj_notify'
    6986 | static void nf_tables_obj_notify(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:7002:19: error: non-static declaration of 'nft_register_flowtable_type' follows static declaration
    7002 | EXPORT_SYMBOL_GPL(nft_register_flowtable_type);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7002:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7002 | EXPORT_SYMBOL_GPL(nft_register_flowtable_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6996:6: note: previous definition of 'nft_register_flowtable_type' was here
    6996 | void nft_register_flowtable_type(struct nf_flowtable_type *type)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7002:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7002 | EXPORT_SYMBOL_GPL(nft_register_flowtable_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7010:19: error: non-static declaration of 'nft_unregister_flowtable_type' follows static declaration
    7010 | EXPORT_SYMBOL_GPL(nft_unregister_flowtable_type);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7010:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7010 | EXPORT_SYMBOL_GPL(nft_unregister_flowtable_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7004:6: note: previous definition of 'nft_unregister_flowtable_type' was here
    7004 | void nft_unregister_flowtable_type(struct nf_flowtable_type *type)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7010:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7010 | EXPORT_SYMBOL_GPL(nft_unregister_flowtable_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7034:19: error: non-static declaration of 'nft_flowtable_lookup' follows static declaration
    7034 | EXPORT_SYMBOL_GPL(nft_flowtable_lookup);
         |                   ^~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7034:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7034 | EXPORT_SYMBOL_GPL(nft_flowtable_lookup);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7022:23: note: previous definition of 'nft_flowtable_lookup' was here
    7022 | struct nft_flowtable *nft_flowtable_lookup(const struct nft_table *table,
         |                       ^~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7034:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7034 | EXPORT_SYMBOL_GPL(nft_flowtable_lookup);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7050:19: error: non-static declaration of 'nf_tables_deactivate_flowtable' follows static declaration
    7050 | EXPORT_SYMBOL_GPL(nf_tables_deactivate_flowtable);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7050:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7050 | EXPORT_SYMBOL_GPL(nf_tables_deactivate_flowtable);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7036:6: note: previous definition of 'nf_tables_deactivate_flowtable' was here
    7036 | void nf_tables_deactivate_flowtable(const struct nft_ctx *ctx,
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7050:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7050 | EXPORT_SYMBOL_GPL(nf_tables_deactivate_flowtable);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7053:1: error: invalid storage class for function 'nft_flowtable_lookup_byhandle'
    7053 | nft_flowtable_lookup_byhandle(const struct nft_table *table,
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7078:12: error: invalid storage class for function 'nft_flowtable_parse_hook'
    7078 | static int nft_flowtable_parse_hook(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7144:40: error: invalid storage class for function '__nft_flowtable_type_get'
    7144 | static const struct nf_flowtable_type *__nft_flowtable_type_get(u8 family)
         |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7156:1: error: invalid storage class for function 'nft_flowtable_type_get'
    7156 | nft_flowtable_type_get(struct net *net, u8 family)
         | ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7175:13: error: invalid storage class for function 'nft_unregister_flowtable_hook'
    7175 | static void nft_unregister_flowtable_hook(struct net *net,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7184:13: error: invalid storage class for function 'nft_unregister_flowtable_net_hooks'
    7184 | static void nft_unregister_flowtable_net_hooks(struct net *net,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7193:12: error: invalid storage class for function 'nft_register_flowtable_net_hooks'
    7193 | static int nft_register_flowtable_net_hooks(struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7248:13: error: invalid storage class for function 'nft_flowtable_hooks_destroy'
    7248 | static void nft_flowtable_hooks_destroy(struct list_head *hook_list)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7258:12: error: invalid storage class for function 'nft_flowtable_update'
    7258 | static int nft_flowtable_update(struct nft_ctx *ctx, const struct nlmsghdr *nlh,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7327:12: error: invalid storage class for function 'nf_tables_newflowtable'
    7327 | static int nf_tables_newflowtable(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7454:13: error: invalid storage class for function 'nft_flowtable_hook_release'
    7454 | static void nft_flowtable_hook_release(struct nft_flowtable_hook *flowtable_hook)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7464:12: error: invalid storage class for function 'nft_delflowtable_hook'
    7464 | static int nft_delflowtable_hook(struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7516:12: error: invalid storage class for function 'nf_tables_delflowtable'
    7516 | static int nf_tables_delflowtable(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7568:12: error: invalid storage class for function 'nf_tables_fill_flowtable_info'
    7568 | static int nf_tables_fill_flowtable_info(struct sk_buff *skb, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~


vim +67 include/linux/export.h

f50169324df4ad Paul Gortmaker    2011-05-23  41  
7290d58095712a Ard Biesheuvel    2018-08-21  42  #ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
7290d58095712a Ard Biesheuvel    2018-08-21  43  #include <linux/compiler.h>
7290d58095712a Ard Biesheuvel    2018-08-21  44  /*
7290d58095712a Ard Biesheuvel    2018-08-21  45   * Emit the ksymtab entry as a pair of relative references: this reduces
7290d58095712a Ard Biesheuvel    2018-08-21  46   * the size by half on 64-bit architectures, and eliminates the need for
7290d58095712a Ard Biesheuvel    2018-08-21  47   * absolute relocations that require runtime processing on relocatable
7290d58095712a Ard Biesheuvel    2018-08-21  48   * kernels.
7290d58095712a Ard Biesheuvel    2018-08-21  49   */
7290d58095712a Ard Biesheuvel    2018-08-21  50  #define __KSYMTAB_ENTRY(sym, sec)					\
7290d58095712a Ard Biesheuvel    2018-08-21  51  	__ADDRESSABLE(sym)						\
7290d58095712a Ard Biesheuvel    2018-08-21  52  	asm("	.section \"___ksymtab" sec "+" #sym "\", \"a\"	\n"	\
ed13fc33f76303 Matthias Maennich 2019-09-06  53  	    "	.balign	4					\n"	\
7290d58095712a Ard Biesheuvel    2018-08-21  54  	    "__ksymtab_" #sym ":				\n"	\
7290d58095712a Ard Biesheuvel    2018-08-21  55  	    "	.long	" #sym "- .				\n"	\
7290d58095712a Ard Biesheuvel    2018-08-21  56  	    "	.long	__kstrtab_" #sym "- .			\n"	\
c3a6cf19e695c8 Masahiro Yamada   2019-10-18  57  	    "	.long	__kstrtabns_" #sym "- .			\n"	\
7290d58095712a Ard Biesheuvel    2018-08-21  58  	    "	.previous					\n")
7290d58095712a Ard Biesheuvel    2018-08-21  59  
7290d58095712a Ard Biesheuvel    2018-08-21  60  struct kernel_symbol {
7290d58095712a Ard Biesheuvel    2018-08-21  61  	int value_offset;
7290d58095712a Ard Biesheuvel    2018-08-21  62  	int name_offset;
8651ec01daedad Matthias Maennich 2019-09-06  63  	int namespace_offset;
7290d58095712a Ard Biesheuvel    2018-08-21  64  };
7290d58095712a Ard Biesheuvel    2018-08-21  65  #else
7290d58095712a Ard Biesheuvel    2018-08-21  66  #define __KSYMTAB_ENTRY(sym, sec)					\
7290d58095712a Ard Biesheuvel    2018-08-21 @67  	static const struct kernel_symbol __ksymtab_##sym		\
7290d58095712a Ard Biesheuvel    2018-08-21  68  	__attribute__((section("___ksymtab" sec "+" #sym), used))	\
ed13fc33f76303 Matthias Maennich 2019-09-06  69  	__aligned(sizeof(void *))					\
c3a6cf19e695c8 Masahiro Yamada   2019-10-18  70  	= { (unsigned long)&sym, __kstrtab_##sym, __kstrtabns_##sym }
7290d58095712a Ard Biesheuvel    2018-08-21  71  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 68180 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH nf 2/2] netfilter: nf_tables: do not allow to delete table with owner by handle
@ 2021-06-22 14:35     ` kernel test robot
  0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2021-06-22 14:35 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 105858 bytes --]

Hi Pablo,

I love your patch! Perhaps something to improve:

[auto build test WARNING on nf/master]

url:    https://github.com/0day-ci/linux/commits/Pablo-Neira-Ayuso/netfilter-nf_tables-skip-netlink-portID-validation-if-zero/20210622-181539
base:   https://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf.git master
config: arc-allyesconfig (attached as .config)
compiler: arceb-elf-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/cdd859ce5abc8381eeb7ea8088fb4c273cb7c2cb
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Pablo-Neira-Ayuso/netfilter-nf_tables-skip-netlink-portID-validation-if-zero/20210622-181539
        git checkout cdd859ce5abc8381eeb7ea8088fb4c273cb7c2cb
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   net/netfilter/nf_tables_api.c: In function 'nft_table_lookup_byhandle':
   net/netfilter/nf_tables_api.c:605:19: error: invalid storage class for function 'nf_tables_alloc_handle'
     605 | static inline u64 nf_tables_alloc_handle(struct nft_table *table)
         |                   ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:605:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     605 | static inline u64 nf_tables_alloc_handle(struct nft_table *table)
         | ^~~~~~
   net/netfilter/nf_tables_api.c:613:1: error: invalid storage class for function '__nft_chain_type_get'
     613 | __nft_chain_type_get(u8 family, enum nft_chain_types type)
         | ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:623:1: error: invalid storage class for function '__nf_tables_chain_type_lookup'
     623 | __nf_tables_chain_type_lookup(const struct nlattr *nla, u8 family)
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:681:19: error: non-static declaration of 'nft_request_module' follows static declaration
     681 | EXPORT_SYMBOL_GPL(nft_request_module);
         |                   ^~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:681:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
     681 | EXPORT_SYMBOL_GPL(nft_request_module);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:645:20: note: previous definition of 'nft_request_module' was here
     645 | __printf(2, 3) int nft_request_module(struct net *net, const char *fmt,
         |                    ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:681:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
     681 | EXPORT_SYMBOL_GPL(nft_request_module);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:684:13: error: invalid storage class for function 'lockdep_nfnl_nft_mutex_not_held'
     684 | static void lockdep_nfnl_nft_mutex_not_held(void)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:693:1: error: invalid storage class for function 'nf_tables_chain_type_lookup'
     693 | nf_tables_chain_type_lookup(struct net *net, const struct nlattr *nla,
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:714:15: error: invalid storage class for function 'nft_base_seq'
     714 | static __be16 nft_base_seq(const struct net *net)
         |               ^~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:730:12: error: invalid storage class for function 'nf_tables_fill_table_info'
     730 | static int nf_tables_fill_table_info(struct sk_buff *skb, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:771:13: error: invalid storage class for function 'nft_notify_enqueue'
     771 | static void nft_notify_enqueue(struct sk_buff *skb, bool report,
         |             ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:778:13: error: invalid storage class for function 'nf_tables_table_notify'
     778 | static void nf_tables_table_notify(const struct nft_ctx *ctx, int event)
         |             ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:806:12: error: invalid storage class for function 'nf_tables_dump_tables'
     806 | static int nf_tables_dump_tables(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:848:12: error: invalid storage class for function 'nft_netlink_dump_start_rcu'
     848 | static int nft_netlink_dump_start_rcu(struct sock *nlsk, struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:866:12: error: invalid storage class for function 'nf_tables_gettable'
     866 | static int nf_tables_gettable(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:910:13: error: invalid storage class for function 'nft_table_disable'
     910 | static void nft_table_disable(struct net *net, struct nft_table *table, u32 cnt)
         |             ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:928:12: error: invalid storage class for function 'nf_tables_table_enable'
     928 | static int nf_tables_table_enable(struct net *net, struct nft_table *table)
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:953:13: error: invalid storage class for function 'nf_tables_table_disable'
     953 | static void nf_tables_table_disable(struct net *net, struct nft_table *table)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:966:12: error: invalid storage class for function 'nf_tables_updtable'
     966 | static int nf_tables_updtable(struct nft_ctx *ctx)
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1020:12: error: invalid storage class for function 'nft_chain_hash'
    1020 | static u32 nft_chain_hash(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1027:12: error: invalid storage class for function 'nft_chain_hash_obj'
    1027 | static u32 nft_chain_hash_obj(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1034:12: error: invalid storage class for function 'nft_chain_hash_cmp'
    1034 | static int nft_chain_hash_cmp(struct rhashtable_compare_arg *arg,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1043:12: error: invalid storage class for function 'nft_objname_hash'
    1043 | static u32 nft_objname_hash(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1052:12: error: invalid storage class for function 'nft_objname_hash_obj'
    1052 | static u32 nft_objname_hash_obj(const void *data, u32 len, u32 seed)
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1059:12: error: invalid storage class for function 'nft_objname_hash_cmp'
    1059 | static int nft_objname_hash_cmp(struct rhashtable_compare_arg *arg,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1071:12: error: invalid storage class for function 'nf_tables_newtable'
    1071 | static int nf_tables_newtable(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1162:12: error: invalid storage class for function 'nft_flush_table'
    1162 | static int nft_flush_table(struct nft_ctx *ctx)
         |            ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1234:12: error: invalid storage class for function 'nft_flush'
    1234 | static int nft_flush(struct nft_ctx *ctx, int family)
         |            ^~~~~~~~~
   net/netfilter/nf_tables_api.c:1267:12: error: invalid storage class for function 'nf_tables_deltable'
    1267 | static int nf_tables_deltable(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1309:13: error: invalid storage class for function 'nf_tables_table_destroy'
    1309 | static void nf_tables_table_destroy(struct nft_ctx *ctx)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:1330:19: error: non-static declaration of 'nft_register_chain_type' follows static declaration
    1330 | EXPORT_SYMBOL_GPL(nft_register_chain_type);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1330:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    1330 | EXPORT_SYMBOL_GPL(nft_register_chain_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1320:6: note: previous definition of 'nft_register_chain_type' was here
    1320 | void nft_register_chain_type(const struct nft_chain_type *ctype)
         |      ^~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1330:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    1330 | EXPORT_SYMBOL_GPL(nft_register_chain_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1338:19: error: non-static declaration of 'nft_unregister_chain_type' follows static declaration
    1338 | EXPORT_SYMBOL_GPL(nft_unregister_chain_type);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1338:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    1338 | EXPORT_SYMBOL_GPL(nft_unregister_chain_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1332:6: note: previous definition of 'nft_unregister_chain_type' was here
    1332 | void nft_unregister_chain_type(const struct nft_chain_type *ctype)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1338:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    1338 | EXPORT_SYMBOL_GPL(nft_unregister_chain_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1345:1: error: invalid storage class for function 'nft_chain_lookup_byhandle'
    1345 | nft_chain_lookup_byhandle(const struct nft_table *table, u64 handle, u8 genmask)
         | ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1358:13: error: invalid storage class for function 'lockdep_commit_lock_is_held'
    1358 | static bool lockdep_commit_lock_is_held(const struct net *net)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1369:26: error: invalid storage class for function 'nft_chain_lookup'
    1369 | static struct nft_chain *nft_chain_lookup(struct net *net,
         |                          ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1425:12: error: invalid storage class for function 'nft_dump_stats'
    1425 | static int nft_dump_stats(struct sk_buff *skb, struct nft_stats __percpu *stats)
         |            ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1464:12: error: invalid storage class for function 'nft_dump_basechain_hook'
    1464 | static int nft_dump_basechain_hook(struct sk_buff *skb, int family,
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1504:12: error: invalid storage class for function 'nf_tables_fill_chain_info'
    1504 | static int nf_tables_fill_chain_info(struct sk_buff *skb, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1564:13: error: invalid storage class for function 'nf_tables_chain_notify'
    1564 | static void nf_tables_chain_notify(const struct nft_ctx *ctx, int event)
         |             ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1593:12: error: invalid storage class for function 'nf_tables_dump_chains'
    1593 | static int nf_tables_dump_chains(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1641:12: error: invalid storage class for function 'nf_tables_getchain'
    1641 | static int nf_tables_getchain(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1697:35: error: invalid storage class for function 'nft_stats_alloc'
    1697 | static struct nft_stats __percpu *nft_stats_alloc(const struct nlattr *attr)
         |                                   ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1728:13: error: invalid storage class for function 'nft_chain_stats_replace'
    1728 | static void nft_chain_stats_replace(struct nft_trans *trans)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1743:13: error: invalid storage class for function 'nf_tables_chain_free_chain_rules'
    1743 | static void nf_tables_chain_free_chain_rules(struct nft_chain *chain)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1793:25: error: invalid storage class for function 'nft_netdev_hook_alloc'
    1793 | static struct nft_hook *nft_netdev_hook_alloc(struct net *net,
         |                         ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1828:25: error: invalid storage class for function 'nft_hook_list_find'
    1828 | static struct nft_hook *nft_hook_list_find(struct list_head *hook_list,
         |                         ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1841:12: error: invalid storage class for function 'nf_tables_parse_netdev_hooks'
    1841 | static int nf_tables_parse_netdev_hooks(struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1891:12: error: invalid storage class for function 'nft_chain_parse_netdev'
    1891 | static int nft_chain_parse_netdev(struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1919:12: error: invalid storage class for function 'nft_chain_parse_hook'
    1919 | static int nft_chain_parse_hook(struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:1987:13: error: invalid storage class for function 'nft_chain_release_hook'
    1987 | static void nft_chain_release_hook(struct nft_chain_hook *hook)
         |             ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2003:26: error: invalid storage class for function 'nf_tables_chain_alloc_rules'
    2003 | static struct nft_rule **nf_tables_chain_alloc_rules(const struct nft_chain *chain,
         |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2019:13: error: invalid storage class for function 'nft_basechain_hook_init'
    2019 | static void nft_basechain_hook_init(struct nf_hook_ops *ops, u8 family,
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2030:12: error: invalid storage class for function 'nft_basechain_init'
    2030 | static int nft_basechain_init(struct nft_base_chain *basechain, u8 family,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2062:12: error: invalid storage class for function 'nft_chain_add'
    2062 | static int nft_chain_add(struct nft_table *table, struct nft_chain *chain)
         |            ^~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2078:12: error: invalid storage class for function 'nf_tables_addchain'
    2078 | static int nf_tables_addchain(struct nft_ctx *ctx, u8 family, u8 genmask,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2216:13: error: invalid storage class for function 'nft_hook_list_equal'
    2216 | static bool nft_hook_list_equal(struct list_head *hook_list1,
         |             ^~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2235:12: error: invalid storage class for function 'nf_tables_updchain'
    2235 | static int nf_tables_updchain(struct nft_ctx *ctx, u8 genmask, u8 policy,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2358:26: error: invalid storage class for function 'nft_chain_lookup_byid'
    2358 | static struct nft_chain *nft_chain_lookup_byid(const struct net *net,
         |                          ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2375:12: error: invalid storage class for function 'nf_tables_newchain'
    2375 | static int nf_tables_newchain(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2474:12: error: invalid storage class for function 'nf_tables_delchain'
    2474 | static int nf_tables_delchain(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:2560:19: error: non-static declaration of 'nft_register_expr' follows static declaration
    2560 | EXPORT_SYMBOL_GPL(nft_register_expr);
         |                   ^~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2560:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    2560 | EXPORT_SYMBOL_GPL(nft_register_expr);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2550:5: note: previous definition of 'nft_register_expr' was here
    2550 | int nft_register_expr(struct nft_expr_type *type)
         |     ^~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2560:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    2560 | EXPORT_SYMBOL_GPL(nft_register_expr);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2574:19: error: non-static declaration of 'nft_unregister_expr' follows static declaration
    2574 | EXPORT_SYMBOL_GPL(nft_unregister_expr);
         |                   ^~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2574:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    2574 | EXPORT_SYMBOL_GPL(nft_unregister_expr);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2568:6: note: previous definition of 'nft_unregister_expr' was here
    2568 | void nft_unregister_expr(struct nft_expr_type *type)
         |      ^~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2574:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    2574 | EXPORT_SYMBOL_GPL(nft_unregister_expr);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2576:36: error: invalid storage class for function '__nft_expr_type_get'
    2576 | static const struct nft_expr_type *__nft_expr_type_get(u8 family,
         |                                    ^~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2593:12: error: invalid storage class for function 'nft_expr_type_request_module'
    2593 | static int nft_expr_type_request_module(struct net *net, u8 family,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2604:36: error: invalid storage class for function 'nft_expr_type_get'
    2604 | static const struct nft_expr_type *nft_expr_type_get(struct net *net,
         |                                    ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2638:12: error: invalid storage class for function 'nf_tables_fill_expr_info'
    2638 | static int nf_tables_fill_expr_info(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2660:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
    2660 | int nft_expr_dump(struct sk_buff *skb, unsigned int attr,
         | ^~~
   net/netfilter/nf_tables_api.c:2683:12: error: invalid storage class for function 'nf_tables_expr_parse'
    2683 | static int nf_tables_expr_parse(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2737:12: error: invalid storage class for function 'nf_tables_newexpr'
    2737 | static int nf_tables_newexpr(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2757:13: error: invalid storage class for function 'nf_tables_expr_destroy'
    2757 | static void nf_tables_expr_destroy(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2767:25: error: invalid storage class for function 'nft_expr_init'
    2767 | static struct nft_expr *nft_expr_init(const struct nft_ctx *ctx,
         |                         ^~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2829:25: error: invalid storage class for function '__nft_rule_lookup'
    2829 | static struct nft_rule *__nft_rule_lookup(const struct nft_chain *chain,
         |                         ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2843:25: error: invalid storage class for function 'nft_rule_lookup'
    2843 | static struct nft_rule *nft_rule_lookup(const struct nft_chain *chain,
         |                         ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2868:12: error: invalid storage class for function 'nf_tables_fill_rule_info'
    2868 | static int nf_tables_fill_rule_info(struct sk_buff *skb, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2928:13: error: invalid storage class for function 'nf_tables_rule_notify'
    2928 | static void nf_tables_rule_notify(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2962:12: error: invalid storage class for function '__nf_tables_dump_rules'
    2962 | static int __nf_tables_dump_rules(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:2999:12: error: invalid storage class for function 'nf_tables_dump_rules'
    2999 | static int nf_tables_dump_rules(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3055:12: error: invalid storage class for function 'nf_tables_dump_rules_start'
    3055 | static int nf_tables_dump_rules_start(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3088:12: error: invalid storage class for function 'nf_tables_dump_rules_done'
    3088 | static int nf_tables_dump_rules_done(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3101:12: error: invalid storage class for function 'nf_tables_getrule'
    3101 | static int nf_tables_getrule(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3162:13: error: invalid storage class for function 'nf_tables_rule_destroy'
    3162 | static void nf_tables_rule_destroy(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:3212:19: error: non-static declaration of 'nft_chain_validate' follows static declaration
    3212 | EXPORT_SYMBOL_GPL(nft_chain_validate);
         |                   ^~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3212:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    3212 | EXPORT_SYMBOL_GPL(nft_chain_validate);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3186:5: note: previous definition of 'nft_chain_validate' was here
    3186 | int nft_chain_validate(const struct nft_ctx *ctx, const struct nft_chain *chain)
         |     ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3212:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    3212 | EXPORT_SYMBOL_GPL(nft_chain_validate);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3214:12: error: invalid storage class for function 'nft_table_validate'
    3214 | static int nft_table_validate(struct net *net, const struct nft_table *table)
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3236:25: error: invalid storage class for function 'nft_rule_lookup_byid'
    3236 | static struct nft_rule *nft_rule_lookup_byid(const struct net *net,
         |                         ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3241:12: error: invalid storage class for function 'nf_tables_newrule'
    3241 | static int nf_tables_newrule(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c: In function 'nf_tables_newrule':
   net/netfilter/nf_tables_api.c:3326:15: error: implicit declaration of function 'nft_rule_lookup_byid'; did you mean 'nft_rule_lookup'? [-Werror=implicit-function-declaration]
    3326 |    old_rule = nft_rule_lookup_byid(net, nla[NFTA_RULE_POSITION_ID]);
         |               ^~~~~~~~~~~~~~~~~~~~
         |               nft_rule_lookup
   net/netfilter/nf_tables_api.c:3326:13: warning: assignment to 'struct nft_rule *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
    3326 |    old_rule = nft_rule_lookup_byid(net, nla[NFTA_RULE_POSITION_ID]);
         |             ^
   net/netfilter/nf_tables_api.c: In function 'nft_table_lookup_byhandle':
   net/netfilter/nf_tables_api.c:3465:25: error: invalid storage class for function 'nft_rule_lookup_byid'
    3465 | static struct nft_rule *nft_rule_lookup_byid(const struct net *net,
         |                         ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3482:12: error: invalid storage class for function 'nf_tables_delrule'
    3482 | static int nf_tables_delrule(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3569:13: error: invalid storage class for function 'nft_set_ops_candidate'
    3569 | static bool nft_set_ops_candidate(const struct nft_set_type *type, u32 flags)
         |             ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3580:1: error: invalid storage class for function 'nft_select_set_ops'
    3580 | nft_select_set_ops(const struct nft_ctx *ctx,
         | ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3673:12: error: invalid storage class for function 'nft_ctx_init_from_setattr'
    3673 | static int nft_ctx_init_from_setattr(struct nft_ctx *ctx, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3697:24: error: invalid storage class for function 'nft_set_lookup'
    3697 | static struct nft_set *nft_set_lookup(const struct nft_table *table,
         |                        ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3713:24: error: invalid storage class for function 'nft_set_lookup_byhandle'
    3713 | static struct nft_set *nft_set_lookup_byhandle(const struct nft_table *table,
         |                        ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3727:24: error: invalid storage class for function 'nft_set_lookup_byid'
    3727 | static struct nft_set *nft_set_lookup_byid(const struct net *net,
         |                        ^~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:3763:19: error: non-static declaration of 'nft_set_lookup_global' follows static declaration
    3763 | EXPORT_SYMBOL_GPL(nft_set_lookup_global);
         |                   ^~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3763:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    3763 | EXPORT_SYMBOL_GPL(nft_set_lookup_global);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3746:17: note: previous definition of 'nft_set_lookup_global' was here
    3746 | struct nft_set *nft_set_lookup_global(const struct net *net,
         |                 ^~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3763:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    3763 | EXPORT_SYMBOL_GPL(nft_set_lookup_global);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3765:12: error: invalid storage class for function 'nf_tables_set_alloc_name'
    3765 | static int nf_tables_set_alloc_name(struct nft_ctx *ctx, struct nft_set *set,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3839:12: error: invalid storage class for function 'nf_tables_fill_set_concat'
    3839 | static int nf_tables_fill_set_concat(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3866:12: error: invalid storage class for function 'nf_tables_fill_set'
    3866 | static int nf_tables_fill_set(struct sk_buff *skb, const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3964:13: error: invalid storage class for function 'nf_tables_set_notify'
    3964 | static void nf_tables_set_notify(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:3993:12: error: invalid storage class for function 'nf_tables_dump_sets'
    3993 | static int nf_tables_dump_sets(struct sk_buff *skb, struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4054:12: error: invalid storage class for function 'nf_tables_dump_sets_start'
    4054 | static int nf_tables_dump_sets_start(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4066:12: error: invalid storage class for function 'nf_tables_dump_sets_done'
    4066 | static int nf_tables_dump_sets_done(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4073:12: error: invalid storage class for function 'nf_tables_getset'
    4073 | static int nf_tables_getset(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4132:12: error: invalid storage class for function 'nft_set_desc_concat_parse'
    4132 | static int nft_set_desc_concat_parse(const struct nlattr *attr,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4157:12: error: invalid storage class for function 'nft_set_desc_concat'
    4157 | static int nft_set_desc_concat(struct nft_set_desc *desc,
         |            ^~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4175:12: error: invalid storage class for function 'nf_tables_set_desc_parse'
    4175 | static int nf_tables_set_desc_parse(struct nft_set_desc *desc,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4194:12: error: invalid storage class for function 'nf_tables_newset'
    4194 | static int nf_tables_newset(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4471:13: error: invalid storage class for function 'nft_set_catchall_destroy'
    4471 | static void nft_set_catchall_destroy(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4483:13: error: invalid storage class for function 'nft_set_destroy'
    4483 | static void nft_set_destroy(const struct nft_ctx *ctx, struct nft_set *set)
         |             ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4499:12: error: invalid storage class for function 'nf_tables_delset'
    4499 | static int nf_tables_delset(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4543:12: error: invalid storage class for function 'nft_validate_register_store'
    4543 | static int nft_validate_register_store(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4549:12: error: invalid storage class for function 'nft_setelem_data_validate'
    4549 | static int nft_setelem_data_validate(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c: In function 'nft_setelem_data_validate':
   net/netfilter/nf_tables_api.c:4557:9: error: implicit declaration of function 'nft_validate_register_store'; did you mean 'nft_parse_register_store'? [-Werror=implicit-function-declaration]
    4557 |  return nft_validate_register_store(ctx, dreg, nft_set_ext_data(ext),
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
         |         nft_parse_register_store
   net/netfilter/nf_tables_api.c: In function 'nft_table_lookup_byhandle':
   net/netfilter/nf_tables_api.c:4563:12: error: invalid storage class for function 'nf_tables_bind_check_setelem'
    4563 | static int nf_tables_bind_check_setelem(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4571:12: error: invalid storage class for function 'nft_set_catchall_bind_check'
    4571 | static int nft_set_catchall_bind_check(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:4637:19: error: non-static declaration of 'nf_tables_bind_set' follows static declaration
    4637 | EXPORT_SYMBOL_GPL(nf_tables_bind_set);
         |                   ^~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4637:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    4637 | EXPORT_SYMBOL_GPL(nf_tables_bind_set);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4594:5: note: previous definition of 'nf_tables_bind_set' was here
    4594 | int nf_tables_bind_set(const struct nft_ctx *ctx, struct nft_set *set,
         |     ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4637:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    4637 | EXPORT_SYMBOL_GPL(nf_tables_bind_set);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4639:13: error: invalid storage class for function 'nf_tables_unbind_set'
    4639 | static void nf_tables_unbind_set(const struct nft_ctx *ctx, struct nft_set *set,
         |             ^~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:4669:19: error: non-static declaration of 'nf_tables_deactivate_set' follows static declaration
    4669 | EXPORT_SYMBOL_GPL(nf_tables_deactivate_set);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4669:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    4669 | EXPORT_SYMBOL_GPL(nf_tables_deactivate_set);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4652:6: note: previous definition of 'nf_tables_deactivate_set' was here
    4652 | void nf_tables_deactivate_set(const struct nft_ctx *ctx, struct nft_set *set,
         |      ^~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4669:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    4669 | EXPORT_SYMBOL_GPL(nf_tables_deactivate_set);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4676:19: error: non-static declaration of 'nf_tables_destroy_set' follows static declaration
    4676 | EXPORT_SYMBOL_GPL(nf_tables_destroy_set);
         |                   ^~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4676:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    4676 | EXPORT_SYMBOL_GPL(nf_tables_destroy_set);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4671:6: note: previous definition of 'nf_tables_destroy_set' was here
    4671 | void nf_tables_destroy_set(const struct nft_ctx *ctx, struct nft_set *set)
         |      ^~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4676:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    4676 | EXPORT_SYMBOL_GPL(nf_tables_destroy_set);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4741:12: error: invalid storage class for function 'nft_ctx_init_from_elemattr'
    4741 | static int nft_ctx_init_from_elemattr(struct nft_ctx *ctx, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4763:12: error: invalid storage class for function 'nft_set_elem_expr_dump'
    4763 | static int nft_set_elem_expr_dump(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4800:12: error: invalid storage class for function 'nf_tables_fill_setelem'
    4800 | static int nf_tables_fill_setelem(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4886:12: error: invalid storage class for function 'nf_tables_dump_setelem'
    4886 | static int nf_tables_dump_setelem(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4902:12: error: invalid storage class for function 'nft_set_catchall_dump'
    4902 | static int nft_set_catchall_dump(struct net *net, struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:4925:12: error: invalid storage class for function 'nf_tables_dump_set'
    4925 | static int nf_tables_dump_set(struct sk_buff *skb, struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5010:12: error: invalid storage class for function 'nf_tables_dump_set_start'
    5010 | static int nf_tables_dump_set_start(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5019:12: error: invalid storage class for function 'nf_tables_dump_set_done'
    5019 | static int nf_tables_dump_set_done(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5025:12: error: invalid storage class for function 'nf_tables_fill_setelem_info'
    5025 | static int nf_tables_fill_setelem_info(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5064:12: error: invalid storage class for function 'nft_setelem_parse_flags'
    5064 | static int nft_setelem_parse_flags(const struct nft_set *set,
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5080:12: error: invalid storage class for function 'nft_setelem_parse_key'
    5080 | static int nft_setelem_parse_key(struct nft_ctx *ctx, struct nft_set *set,
         |            ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5098:12: error: invalid storage class for function 'nft_setelem_parse_data'
    5098 | static int nft_setelem_parse_data(struct nft_ctx *ctx, struct nft_set *set,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5117:14: error: invalid storage class for function 'nft_setelem_catchall_get'
    5117 | static void *nft_setelem_catchall_get(const struct net *net,
         |              ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5138:12: error: invalid storage class for function 'nft_setelem_get'
    5138 | static int nft_setelem_get(struct nft_ctx *ctx, struct nft_set *set,
         |            ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5157:12: error: invalid storage class for function 'nft_get_set_elem'
    5157 | static int nft_get_set_elem(struct nft_ctx *ctx, struct nft_set *set,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5214:12: error: invalid storage class for function 'nf_tables_getsetelem'
    5214 | static int nf_tables_getsetelem(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5263:13: error: invalid storage class for function 'nf_tables_setelem_notify'
    5263 | static void nf_tables_setelem_notify(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5295:26: error: invalid storage class for function 'nft_trans_elem_alloc'
    5295 | static struct nft_trans *nft_trans_elem_alloc(struct nft_ctx *ctx,
         |                          ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5371:13: error: invalid storage class for function '__nft_set_elem_expr_destroy'
    5371 | static void __nft_set_elem_expr_destroy(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5382:13: error: invalid storage class for function 'nft_set_elem_expr_destroy'
    5382 | static void nft_set_elem_expr_destroy(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:5411:19: error: non-static declaration of 'nft_set_elem_destroy' follows static declaration
    5411 | EXPORT_SYMBOL_GPL(nft_set_elem_destroy);
         |                   ^~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5411:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    5411 | EXPORT_SYMBOL_GPL(nft_set_elem_destroy);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5392:6: note: previous definition of 'nft_set_elem_destroy' was here
    5392 | void nft_set_elem_destroy(const struct nft_set *set, void *elem,
         |      ^~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5411:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    5411 | EXPORT_SYMBOL_GPL(nft_set_elem_destroy);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5416:13: error: invalid storage class for function 'nf_tables_set_elem_destroy'
    5416 | static void nf_tables_set_elem_destroy(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5455:12: error: invalid storage class for function 'nft_set_elem_expr_setup'
    5455 | static int nft_set_elem_expr_setup(struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:5502:19: error: non-static declaration of 'nft_set_catchall_lookup' follows static declaration
    5502 | EXPORT_SYMBOL_GPL(nft_set_catchall_lookup);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5502:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    5502 | EXPORT_SYMBOL_GPL(nft_set_catchall_lookup);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5486:21: note: previous definition of 'nft_set_catchall_lookup' was here
    5486 | struct nft_set_ext *nft_set_catchall_lookup(const struct net *net,
         |                     ^~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5502:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    5502 | EXPORT_SYMBOL_GPL(nft_set_catchall_lookup);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5525:19: error: non-static declaration of 'nft_set_catchall_gc' follows static declaration
    5525 | EXPORT_SYMBOL_GPL(nft_set_catchall_gc);
         |                   ^~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5525:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    5525 | EXPORT_SYMBOL_GPL(nft_set_catchall_gc);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5504:7: note: previous definition of 'nft_set_catchall_gc' was here
    5504 | void *nft_set_catchall_gc(const struct nft_set *set)
         |       ^~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5525:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    5525 | EXPORT_SYMBOL_GPL(nft_set_catchall_gc);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5527:12: error: invalid storage class for function 'nft_setelem_catchall_insert'
    5527 | static int nft_setelem_catchall_insert(const struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5554:12: error: invalid storage class for function 'nft_setelem_insert'
    5554 | static int nft_setelem_insert(const struct net *net,
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5569:13: error: invalid storage class for function 'nft_setelem_is_catchall'
    5569 | static bool nft_setelem_is_catchall(const struct nft_set *set,
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5581:13: error: invalid storage class for function 'nft_setelem_activate'
    5581 | static void nft_setelem_activate(struct net *net, struct nft_set *set,
         |             ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5594:12: error: invalid storage class for function 'nft_setelem_catchall_deactivate'
    5594 | static int nft_setelem_catchall_deactivate(const struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5616:12: error: invalid storage class for function '__nft_setelem_deactivate'
    5616 | static int __nft_setelem_deactivate(const struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5633:12: error: invalid storage class for function 'nft_setelem_deactivate'
    5633 | static int nft_setelem_deactivate(const struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5647:13: error: invalid storage class for function 'nft_setelem_catchall_remove'
    5647 | static void nft_setelem_catchall_remove(const struct net *net,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5662:13: error: invalid storage class for function 'nft_setelem_remove'
    5662 | static void nft_setelem_remove(const struct net *net,
         |             ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5672:12: error: invalid storage class for function 'nft_add_set_elem'
    5672 | static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:5996:12: error: invalid storage class for function 'nf_tables_newsetelem'
    5996 | static int nf_tables_newsetelem(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6073:13: error: invalid storage class for function 'nft_setelem_data_activate'
    6073 | static void nft_setelem_data_activate(const struct net *net,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6085:13: error: invalid storage class for function 'nft_setelem_data_deactivate'
    6085 | static void nft_setelem_data_deactivate(const struct net *net,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6097:12: error: invalid storage class for function 'nft_del_setelem'
    6097 | static int nft_del_setelem(struct nft_ctx *ctx, struct nft_set *set,
         |            ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6177:12: error: invalid storage class for function 'nft_setelem_flush'
    6177 | static int nft_setelem_flush(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6207:12: error: invalid storage class for function '__nft_set_catchall_flush'
    6207 | static int __nft_set_catchall_flush(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6226:12: error: invalid storage class for function 'nft_set_catchall_flush'
    6226 | static int nft_set_catchall_flush(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6250:12: error: invalid storage class for function 'nft_set_flush'
    6250 | static int nft_set_flush(struct nft_ctx *ctx, struct nft_set *set, u8 genmask)
         |            ^~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6264:12: error: invalid storage class for function 'nf_tables_delsetelem'
    6264 | static int nf_tables_delsetelem(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:6342:19: error: non-static declaration of 'nft_register_obj' follows static declaration
    6342 | EXPORT_SYMBOL_GPL(nft_register_obj);
         |                   ^~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6342:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6342 | EXPORT_SYMBOL_GPL(nft_register_obj);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6332:5: note: previous definition of 'nft_register_obj' was here
    6332 | int nft_register_obj(struct nft_object_type *obj_type)
         |     ^~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6342:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6342 | EXPORT_SYMBOL_GPL(nft_register_obj);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6356:19: error: non-static declaration of 'nft_unregister_obj' follows static declaration
    6356 | EXPORT_SYMBOL_GPL(nft_unregister_obj);
         |                   ^~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6356:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6356 | EXPORT_SYMBOL_GPL(nft_unregister_obj);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6350:6: note: previous definition of 'nft_unregister_obj' was here
    6350 | void nft_unregister_obj(struct nft_object_type *obj_type)
         |      ^~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6356:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6356 | EXPORT_SYMBOL_GPL(nft_unregister_obj);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6390:19: error: non-static declaration of 'nft_obj_lookup' follows static declaration
    6390 | EXPORT_SYMBOL_GPL(nft_obj_lookup);
         |                   ^~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6390:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6390 | EXPORT_SYMBOL_GPL(nft_obj_lookup);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6358:20: note: previous definition of 'nft_obj_lookup' was here
    6358 | struct nft_object *nft_obj_lookup(const struct net *net,
         |                    ^~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6390:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6390 | EXPORT_SYMBOL_GPL(nft_obj_lookup);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6392:27: error: invalid storage class for function 'nft_obj_lookup_byhandle'
    6392 | static struct nft_object *nft_obj_lookup_byhandle(const struct nft_table *table,
         |                           ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6419:27: error: invalid storage class for function 'nft_obj_init'
    6419 | static struct nft_object *nft_obj_init(const struct nft_ctx *ctx,
         |                           ^~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6472:12: error: invalid storage class for function 'nft_object_dump'
    6472 | static int nft_object_dump(struct sk_buff *skb, unsigned int attr,
         |            ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6489:38: error: invalid storage class for function '__nft_obj_type_get'
    6489 | static const struct nft_object_type *__nft_obj_type_get(u32 objtype)
         |                                      ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6501:1: error: invalid storage class for function 'nft_obj_type_get'
    6501 | nft_obj_type_get(struct net *net, u32 objtype)
         | ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6519:12: error: invalid storage class for function 'nf_tables_updobj'
    6519 | static int nf_tables_updobj(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6551:12: error: invalid storage class for function 'nf_tables_newobj'
    6551 | static int nf_tables_newobj(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6657:12: error: invalid storage class for function 'nf_tables_fill_obj_info'
    6657 | static int nf_tables_fill_obj_info(struct sk_buff *skb, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6696:12: error: invalid storage class for function 'nf_tables_dump_obj'
    6696 | static int nf_tables_dump_obj(struct sk_buff *skb, struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6768:12: error: invalid storage class for function 'nf_tables_dump_obj_start'
    6768 | static int nf_tables_dump_obj_start(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6794:12: error: invalid storage class for function 'nf_tables_dump_obj_done'
    6794 | static int nf_tables_dump_obj_done(struct netlink_callback *cb)
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6807:12: error: invalid storage class for function 'nf_tables_getobj'
    6807 | static int nf_tables_getobj(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6886:13: error: invalid storage class for function 'nft_obj_destroy'
    6886 | static void nft_obj_destroy(const struct nft_ctx *ctx, struct nft_object *obj)
         |             ^~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6897:12: error: invalid storage class for function 'nf_tables_delobj'
    6897 | static int nf_tables_delobj(struct sk_buff *skb, const struct nfnl_info *info,
         |            ^~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:6984:19: error: non-static declaration of 'nft_obj_notify' follows static declaration
    6984 | EXPORT_SYMBOL_GPL(nft_obj_notify);
         |                   ^~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6984:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6984 | EXPORT_SYMBOL_GPL(nft_obj_notify);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6945:6: note: previous definition of 'nft_obj_notify' was here
    6945 | void nft_obj_notify(struct net *net, const struct nft_table *table,
         |      ^~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6984:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    6984 | EXPORT_SYMBOL_GPL(nft_obj_notify);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6986:13: error: invalid storage class for function 'nf_tables_obj_notify'
    6986 | static void nf_tables_obj_notify(const struct nft_ctx *ctx,
         |             ^~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   net/netfilter/nf_tables_api.c:7002:19: error: non-static declaration of 'nft_register_flowtable_type' follows static declaration
    7002 | EXPORT_SYMBOL_GPL(nft_register_flowtable_type);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7002:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7002 | EXPORT_SYMBOL_GPL(nft_register_flowtable_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:6996:6: note: previous definition of 'nft_register_flowtable_type' was here
    6996 | void nft_register_flowtable_type(struct nf_flowtable_type *type)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7002:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7002 | EXPORT_SYMBOL_GPL(nft_register_flowtable_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7010:19: error: non-static declaration of 'nft_unregister_flowtable_type' follows static declaration
    7010 | EXPORT_SYMBOL_GPL(nft_unregister_flowtable_type);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7010:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7010 | EXPORT_SYMBOL_GPL(nft_unregister_flowtable_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7004:6: note: previous definition of 'nft_unregister_flowtable_type' was here
    7004 | void nft_unregister_flowtable_type(struct nf_flowtable_type *type)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7010:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7010 | EXPORT_SYMBOL_GPL(nft_unregister_flowtable_type);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7034:19: error: non-static declaration of 'nft_flowtable_lookup' follows static declaration
    7034 | EXPORT_SYMBOL_GPL(nft_flowtable_lookup);
         |                   ^~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7034:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7034 | EXPORT_SYMBOL_GPL(nft_flowtable_lookup);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7022:23: note: previous definition of 'nft_flowtable_lookup' was here
    7022 | struct nft_flowtable *nft_flowtable_lookup(const struct nft_table *table,
         |                       ^~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
>> include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7034:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7034 | EXPORT_SYMBOL_GPL(nft_flowtable_lookup);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7050:19: error: non-static declaration of 'nf_tables_deactivate_flowtable' follows static declaration
    7050 | EXPORT_SYMBOL_GPL(nf_tables_deactivate_flowtable);
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
      98 |  extern typeof(sym) sym;       \
         |                     ^~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7050:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7050 | EXPORT_SYMBOL_GPL(nf_tables_deactivate_flowtable);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7036:6: note: previous definition of 'nf_tables_deactivate_flowtable' was here
    7036 | void nf_tables_deactivate_flowtable(const struct nft_ctx *ctx,
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/linkage.h:7,
                    from include/linux/kernel.h:8,
                    from include/linux/list.h:9,
                    from include/linux/module.h:12,
                    from net/netfilter/nf_tables_api.c:8:
   include/linux/export.h:67:2: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      67 |  static const struct kernel_symbol __ksymtab_##sym  \
         |  ^~~~~~
   include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
     108 |  __KSYMTAB_ENTRY(sym, sec)
         |  ^~~~~~~~~~~~~~~
   include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
     147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
         |                                       ^~~~~~~~~~~~~~~~
   include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
     155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
         |                                  ^~~~~~~~~~~~~~~
   include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
     159 | #define EXPORT_SYMBOL_GPL(sym)  _EXPORT_SYMBOL(sym, "_gpl")
         |                                 ^~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7050:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
    7050 | EXPORT_SYMBOL_GPL(nf_tables_deactivate_flowtable);
         | ^~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7053:1: error: invalid storage class for function 'nft_flowtable_lookup_byhandle'
    7053 | nft_flowtable_lookup_byhandle(const struct nft_table *table,
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7078:12: error: invalid storage class for function 'nft_flowtable_parse_hook'
    7078 | static int nft_flowtable_parse_hook(const struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7144:40: error: invalid storage class for function '__nft_flowtable_type_get'
    7144 | static const struct nf_flowtable_type *__nft_flowtable_type_get(u8 family)
         |                                        ^~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7156:1: error: invalid storage class for function 'nft_flowtable_type_get'
    7156 | nft_flowtable_type_get(struct net *net, u8 family)
         | ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7175:13: error: invalid storage class for function 'nft_unregister_flowtable_hook'
    7175 | static void nft_unregister_flowtable_hook(struct net *net,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7184:13: error: invalid storage class for function 'nft_unregister_flowtable_net_hooks'
    7184 | static void nft_unregister_flowtable_net_hooks(struct net *net,
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7193:12: error: invalid storage class for function 'nft_register_flowtable_net_hooks'
    7193 | static int nft_register_flowtable_net_hooks(struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7248:13: error: invalid storage class for function 'nft_flowtable_hooks_destroy'
    7248 | static void nft_flowtable_hooks_destroy(struct list_head *hook_list)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7258:12: error: invalid storage class for function 'nft_flowtable_update'
    7258 | static int nft_flowtable_update(struct nft_ctx *ctx, const struct nlmsghdr *nlh,
         |            ^~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7327:12: error: invalid storage class for function 'nf_tables_newflowtable'
    7327 | static int nf_tables_newflowtable(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7454:13: error: invalid storage class for function 'nft_flowtable_hook_release'
    7454 | static void nft_flowtable_hook_release(struct nft_flowtable_hook *flowtable_hook)
         |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7464:12: error: invalid storage class for function 'nft_delflowtable_hook'
    7464 | static int nft_delflowtable_hook(struct nft_ctx *ctx,
         |            ^~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7516:12: error: invalid storage class for function 'nf_tables_delflowtable'
    7516 | static int nf_tables_delflowtable(struct sk_buff *skb,
         |            ^~~~~~~~~~~~~~~~~~~~~~
   net/netfilter/nf_tables_api.c:7568:12: error: invalid storage class for function 'nf_tables_fill_flowtable_info'
    7568 | static int nf_tables_fill_flowtable_info(struct sk_buff *skb, struct net *net,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~


vim +67 include/linux/export.h

f50169324df4ad Paul Gortmaker    2011-05-23  41  
7290d58095712a Ard Biesheuvel    2018-08-21  42  #ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
7290d58095712a Ard Biesheuvel    2018-08-21  43  #include <linux/compiler.h>
7290d58095712a Ard Biesheuvel    2018-08-21  44  /*
7290d58095712a Ard Biesheuvel    2018-08-21  45   * Emit the ksymtab entry as a pair of relative references: this reduces
7290d58095712a Ard Biesheuvel    2018-08-21  46   * the size by half on 64-bit architectures, and eliminates the need for
7290d58095712a Ard Biesheuvel    2018-08-21  47   * absolute relocations that require runtime processing on relocatable
7290d58095712a Ard Biesheuvel    2018-08-21  48   * kernels.
7290d58095712a Ard Biesheuvel    2018-08-21  49   */
7290d58095712a Ard Biesheuvel    2018-08-21  50  #define __KSYMTAB_ENTRY(sym, sec)					\
7290d58095712a Ard Biesheuvel    2018-08-21  51  	__ADDRESSABLE(sym)						\
7290d58095712a Ard Biesheuvel    2018-08-21  52  	asm("	.section \"___ksymtab" sec "+" #sym "\", \"a\"	\n"	\
ed13fc33f76303 Matthias Maennich 2019-09-06  53  	    "	.balign	4					\n"	\
7290d58095712a Ard Biesheuvel    2018-08-21  54  	    "__ksymtab_" #sym ":				\n"	\
7290d58095712a Ard Biesheuvel    2018-08-21  55  	    "	.long	" #sym "- .				\n"	\
7290d58095712a Ard Biesheuvel    2018-08-21  56  	    "	.long	__kstrtab_" #sym "- .			\n"	\
c3a6cf19e695c8 Masahiro Yamada   2019-10-18  57  	    "	.long	__kstrtabns_" #sym "- .			\n"	\
7290d58095712a Ard Biesheuvel    2018-08-21  58  	    "	.previous					\n")
7290d58095712a Ard Biesheuvel    2018-08-21  59  
7290d58095712a Ard Biesheuvel    2018-08-21  60  struct kernel_symbol {
7290d58095712a Ard Biesheuvel    2018-08-21  61  	int value_offset;
7290d58095712a Ard Biesheuvel    2018-08-21  62  	int name_offset;
8651ec01daedad Matthias Maennich 2019-09-06  63  	int namespace_offset;
7290d58095712a Ard Biesheuvel    2018-08-21  64  };
7290d58095712a Ard Biesheuvel    2018-08-21  65  #else
7290d58095712a Ard Biesheuvel    2018-08-21  66  #define __KSYMTAB_ENTRY(sym, sec)					\
7290d58095712a Ard Biesheuvel    2018-08-21 @67  	static const struct kernel_symbol __ksymtab_##sym		\
7290d58095712a Ard Biesheuvel    2018-08-21  68  	__attribute__((section("___ksymtab" sec "+" #sym), used))	\
ed13fc33f76303 Matthias Maennich 2019-09-06  69  	__aligned(sizeof(void *))					\
c3a6cf19e695c8 Masahiro Yamada   2019-10-18  70  	= { (unsigned long)&sym, __kstrtab_##sym, __kstrtabns_##sym }
7290d58095712a Ard Biesheuvel    2018-08-21  71  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 68180 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-06-22 14:36 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-22 10:13 [PATCH nf 1/2] netfilter: nf_tables: skip netlink portID validation if zero Pablo Neira Ayuso
2021-06-22 10:13 ` [PATCH nf 2/2] netfilter: nf_tables: do not allow to delete table with owner by handle Pablo Neira Ayuso
2021-06-22 13:37   ` kernel test robot
2021-06-22 13:37     ` kernel test robot
2021-06-22 14:35   ` kernel test robot
2021-06-22 14:35     ` kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.