Hi Harsha,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on nf/master]
[also build test ERROR on v4.16-rc7]
[cannot apply to nf-next/master next-20180329]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Harsha-Sharma/netfilter-nft_ct-add-ct-timeout-support/20180401-070944
base:   https://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf.git master
config: i386-randconfig-x073-201813 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

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

   In file included from include/linux/kernel.h:10:0,
                    from net//netfilter/nft_ct.c:12:
   net//netfilter/nft_ct.c: In function 'ctnl_timeout_parse_policy':
>> net//netfilter/nft_ct.c:743:22: error: 'const struct nf_conntrack_l4proto' 
>> has no member named 'ctnl_timeout'; did you mean 'get_timeouts'?
     if (likely(l4proto->ctnl_timeout.nlattr_to_obj)) {
                         ^
   include/linux/compiler.h:76:40: note: in definition of macro 'likely'
    # define likely(x) __builtin_expect(!!(x), 1)
                                           ^
   net//netfilter/nft_ct.c:744:30: error: 'const struct nf_conntrack_l4proto' 
has no member named 'ctnl_timeout'; did you mean 'get_timeouts'?
      struct nlattr *tb[l4proto->ctnl_timeout.nlattr_max + 1];
                                 ^~~~~~~~~~~~
                                 get_timeouts
   net//netfilter/nft_ct.c:746:39: error: 'const struct nf_conntrack_l4proto' 
has no member named 'ctnl_timeout'; did you mean 'get_timeouts'?
      ret = nla_parse_nested(tb, l4proto->ctnl_timeout.nlattr_max,
                                          ^~~~~~~~~~~~
                                          get_timeouts
   net//netfilter/nft_ct.c:747:27: error: 'const struct nf_conntrack_l4proto' 
has no member named 'ctnl_timeout'; did you mean 'get_timeouts'?
               attr, l4proto->ctnl_timeout.nla_policy,
                              ^~~~~~~~~~~~
                              get_timeouts
   net//netfilter/nft_ct.c:752:18: error: 'const struct nf_conntrack_l4proto' 
has no member named 'ctnl_timeout'; did you mean 'get_timeouts'?
      ret = l4proto->ctnl_timeout.nlattr_to_obj(tb, net, timeouts);
                     ^~~~~~~~~~~~
                     get_timeouts
   net//netfilter/nft_ct.c:744:18: warning: unused variable 'tb' 
[-Wunused-variable]
      struct nlattr *tb[l4proto->ctnl_timeout.nlattr_max + 1];
                     ^~
   net//netfilter/nft_ct.c: In function 'nft_ct_timeout_obj_init':
>> net//netfilter/nft_ct.c:782:26: error: 'struct net' has no member named 
>> 'nfct_timeout_list'
     INIT_LIST_HEAD(&ctx->net->nfct_timeout_list);
                             ^~
   In file included from net//netfilter/nft_ct.c:12:0:
   net//netfilter/nft_ct.c:783:40: error: 'struct net' has no member named 
'nfct_timeout_list'
     list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) {
                                           ^
   include/linux/kernel.h:930:26: note: in definition of macro 'container_of'
     void *__mptr = (void *)(ptr);     \
                             ^~~
   include/linux/list.h:377:2: note: in expansion of macro 'list_entry'
     list_entry((ptr)->next, type, member)
     ^~~~~~~~~~
   include/linux/list.h:464:13: note: in expansion of macro 'list_first_entry'
     for (pos = list_first_entry(head, typeof(*pos), member); \
                ^~~~~~~~~~~~~~~~
>> net//netfilter/nft_ct.c:783:2: note: in expansion of macro 
>> 'list_for_each_entry'
     list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) {
     ^~~~~~~~~~~~~~~~~~~
   In file included from include/linux/kernel.h:10:0,
                    from net//netfilter/nft_ct.c:12:
   net//netfilter/nft_ct.c:783:40: error: 'struct net' has no member named 
'nfct_timeout_list'
     list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) {
                                           ^
   include/linux/compiler.h:316:19: note: in definition of macro 
'__compiletime_assert'
      bool __cond = !(condition);    \
                      ^~~~~~~~~
   include/linux/compiler.h:339:2: note: in expansion of macro 
'_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:45:37: note: in expansion of macro 
'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:931:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
     ^~~~~~~~~~~~~~~~
   include/linux/kernel.h:931:20: note: in expansion of macro '__same_type'
     BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
                       ^~~~~~~~~~~
   include/linux/list.h:366:2: note: in expansion of macro 'container_of'
     container_of(ptr, type, member)
     ^~~~~~~~~~~~
   include/linux/list.h:377:2: note: in expansion of macro 'list_entry'
     list_entry((ptr)->next, type, member)
     ^~~~~~~~~~
   include/linux/list.h:464:13: note: in expansion of macro 'list_first_entry'
     for (pos = list_first_entry(head, typeof(*pos), member); \
                ^~~~~~~~~~~~~~~~
>> net//netfilter/nft_ct.c:783:2: note: in expansion of macro 
>> 'list_for_each_entry'
     list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) {
     ^~~~~~~~~~~~~~~~~~~
   net//netfilter/nft_ct.c:783:40: error: 'struct net' has no member named 
'nfct_timeout_list'
     list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) {
                                           ^
   include/linux/compiler.h:316:19: note: in definition of macro 
'__compiletime_assert'
      bool __cond = !(condition);    \
                      ^~~~~~~~~
   include/linux/compiler.h:339:2: note: in expansion of macro 
'_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:45:37: note: in expansion of macro 
'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:931:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
     ^~~~~~~~~~~~~~~~
   include/linux/kernel.h:932:6: note: in expansion of macro '__same_type'
        !__same_type(*(ptr), void),   \
         ^~~~~~~~~~~
   include/linux/list.h:366:2: note: in expansion of macro 'container_of'
     container_of(ptr, type, member)
     ^~~~~~~~~~~~
   include/linux/list.h:377:2: note: in expansion of macro 'list_entry'
     list_entry((ptr)->next, type, member)
     ^~~~~~~~~~
   include/linux/list.h:464:13: note: in expansion of macro 'list_first_entry'
     for (pos = list_first_entry(head, typeof(*pos), member); \
                ^~~~~~~~~~~~~~~~
>> net//netfilter/nft_ct.c:783:2: note: in expansion of macro 
>> 'list_for_each_entry'
     list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) {
     ^~~~~~~~~~~~~~~~~~~
   In file included from include/linux/module.h:9:0,
                    from net//netfilter/nft_ct.c:14:
   net//netfilter/nft_ct.c:783:40: error: 'struct net' has no member named 
'nfct_timeout_list'
     list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, head) {
                                           ^
   include/linux/list.h:465:24: note: in definition of macro 
'list_for_each_entry'
          &pos->member != (head);     \
                           ^~~~
   net//netfilter/nft_ct.c:805:15: error: 'const struct nf_conntrack_l4proto' 
has no member named 'ctnl_timeout'; did you mean 'get_timeouts'?
         l4proto->ctnl_timeout.obj_size, GFP_KERNEL);
                  ^~~~~~~~~~~~
                  get_timeouts
   net//netfilter/nft_ct.c:817:45: error: 'struct net' has no member named 
'nfct_timeout_list'
     list_add_tail_rcu(&timeout->head, &ctx->net->nfct_timeout_list);
                                                ^~
   In file included from include/linux/kernel.h:10:0,
                    from net//netfilter/nft_ct.c:12:
   net//netfilter/nft_ct.c: In function 'nft_ct_timeout_obj_dump':
   net//netfilter/nft_ct.c:848:31: error: 'const struct nf_conntrack_l4proto' 
has no member named 'ctnl_timeout'; did you mean 'get_timeouts'?
     if (likely(timeout->l4proto->ctnl_timeout.obj_to_nlattr)) {
                                  ^
   include/linux/compiler.h:76:40: note: in definition of macro 'likely'
    # define likely(x) __builtin_expect(!!(x), 1)
                                           ^
   net//netfilter/nft_ct.c:856:27: error: 'const struct nf_conntrack_l4proto' 
has no member named 'ctnl_timeout'; did you mean 'get_timeouts'?
      ret = timeout->l4proto->ctnl_timeout.obj_to_nlattr(skb, &timeout->data);
                              ^~~~~~~~~~~~
                              get_timeouts

vim +743 net//netfilter/nft_ct.c

   735  
   736  static int
   737  ctnl_timeout_parse_policy(void *timeouts,
   738                            const struct nf_conntrack_l4proto *l4proto,
   739                            struct net *net, const struct nlattr *attr)
   740  {
   741          int ret = 0;
   742  
 > 743          if (likely(l4proto->ctnl_timeout.nlattr_to_obj)) {
   744                  struct nlattr *tb[l4proto->ctnl_timeout.nlattr_max + 1];
   745  
   746                  ret = nla_parse_nested(tb, 
l4proto->ctnl_timeout.nlattr_max,
   747                                         attr, 
l4proto->ctnl_timeout.nla_policy,
   748                                         NULL);
   749                  if (ret < 0)
   750                          return ret;
   751  
 > 752                  ret = l4proto->ctnl_timeout.nlattr_to_obj(tb, net, 
 > timeouts);
   753          }
   754          return ret;
   755  }
   756  
   757  static void nft_ct_timeout_obj_eval(struct nft_object *obj,
   758                                      struct nft_regs *regs,
   759                                      const struct nft_pktinfo *pkt)
   760  {
   761  }
   762  
   763  static int nft_ct_timeout_obj_init(const struct nft_ctx *ctx,
   764                                     const struct nlattr * const tb[],
   765                                     struct nft_object *obj)
   766  {
   767          __u16 l3num;
   768          __u8 l4num;
   769          struct nft_ct_timeout_obj *priv = nft_obj_data(obj);
   770          const struct nf_conntrack_l4proto *l4proto;
   771          struct ctnl_timeout *timeout, *matching = NULL;
   772          int ret;
   773  
   774          if (!tb[NFTA_CT_TIMEOUT_L4PROTO] ||
   775              !tb[NFTA_CT_TIMEOUT_L3PROTO] ||
   776              !tb[NFTA_CT_TIMEOUT_DATA])
   777                  return -EINVAL;
   778  
   779          l3num = ntohs(nla_get_be16(tb[NFTA_CT_TIMEOUT_L3PROTO]));
   780          l4num = nla_get_u8(tb[NFTA_CT_TIMEOUT_L4PROTO]);
   781  
 > 782          INIT_LIST_HEAD(&ctx->net->nfct_timeout_list);
 > 783          list_for_each_entry(timeout, &ctx->net->nfct_timeout_list, 
 > head) {
   784                  matching = timeout;
   785                  break;
   786          }
   787  
   788          if (matching) {
   789                  if (matching->l3num != l3num ||
   790                      matching->l4proto->l4proto != l4num)
   791                          return -EINVAL;
   792                  return ctnl_timeout_parse_policy(&matching->data,
   793                                                   matching->l4proto, 
ctx->net,
   794                                                   
tb[NFTA_CT_TIMEOUT_DATA]);
   795          }
   796  
   797          l4proto = nf_ct_l4proto_find_get(l3num, l4num);
   798  
   799          if (l4proto->l4proto != l4num) {
   800                  ret = -EOPNOTSUPP;
   801                  goto err_proto_put;
   802          }
   803  
   804          timeout = kzalloc(sizeof(struct ctnl_timeout) +
   805                            l4proto->ctnl_timeout.obj_size, GFP_KERNEL);
   806          if (timeout == NULL) {
   807                  ret = -ENOMEM;
   808                  goto err_proto_put;
   809          }
   810  
   811          ret = ctnl_timeout_parse_policy(&timeout->data, l4proto, 
ctx->net,
   812                                          tb[NFTA_CT_TIMEOUT_DATA]);
   813          if (ret < 0)
   814                  goto err;
   815          timeout->l3num = l3num;
   816          timeout->l4proto = l4proto;
   817          list_add_tail_rcu(&timeout->head, &ctx->net->nfct_timeout_list);
   818          priv->timeout = timeout;
   819  
   820          return 0;
   821  err:
   822          kfree(timeout);
   823  err_proto_put:
   824          nf_ct_l4proto_put(l4proto);
   825          return ret;
   826  }
   827  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to