Hi,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on nf-next/master]

url:    
https://github.com/0day-ci/linux/commits/wenxu-ucloud-cn/netfilter-Support-the-bridge-family-in-flow-table/20190830-172019
base:   
https://kernel.googlesource.com/pub/scm/linux/kernel/git/pablo/nf-next.git 
master
config: x86_64-allmodconfig (attached as .config)
compiler: gcc-7 (Debian 7.4.0-11) 7.4.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <[email protected]>

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   In file included from net//netfilter/nf_flow_table_core.c:9:0:
   net//netfilter/nf_flow_table_core.c: In function 'flow_offload_fill_dir':
>> include/net/ip6_route.h:322:26: warning: 'dst' may be used uninitialized in 
>> this function [-Wmaybe-uninitialized]
     idev = __in6_dev_get(dst->dev);
                          ~~~^~~~~
   net//netfilter/nf_flow_table_core.c:62:20: note: 'dst' was declared here
     struct dst_entry *dst;
                       ^~~
>> net//netfilter/nf_flow_table_core.c:83:22: warning: 'dst_port' may be used 
>> uninitialized in this function [-Wmaybe-uninitialized]
       ft->mtu = dst_port->dev->mtu;
                 ~~~~~~~~^~~~~
--
   In file included from net/netfilter/nf_flow_table_core.c:9:0:
   net/netfilter/nf_flow_table_core.c: In function 'flow_offload_fill_dir':
>> include/net/ip6_route.h:322:26: warning: 'dst' may be used uninitialized in 
>> this function [-Wmaybe-uninitialized]
     idev = __in6_dev_get(dst->dev);
                          ~~~^~~~~
   net/netfilter/nf_flow_table_core.c:62:20: note: 'dst' was declared here
     struct dst_entry *dst;
                       ^~~
   net/netfilter/nf_flow_table_core.c:83:22: warning: 'dst_port' may be used 
uninitialized in this function [-Wmaybe-uninitialized]
       ft->mtu = dst_port->dev->mtu;
                 ~~~~~~~~^~~~~

vim +/dst_port +83 net//netfilter/nf_flow_table_core.c

   > 9  #include <net/ip6_route.h>
    10  #include <net/netfilter/nf_tables.h>
    11  #include <net/netfilter/nf_flow_table.h>
    12  #include <net/netfilter/nf_conntrack.h>
    13  #include <net/netfilter/nf_conntrack_core.h>
    14  #include <net/netfilter/nf_conntrack_tuple.h>
    15  
    16  struct flow_offload_entry {
    17          struct flow_offload     flow;
    18          struct nf_conn          *ct;
    19          struct rcu_head         rcu_head;
    20  };
    21  
    22  static DEFINE_MUTEX(flowtable_lock);
    23  static LIST_HEAD(flowtables);
    24  
    25  static struct dst_entry *
    26  flow_offload_fill_inet_dst(struct flow_offload_tuple *ft,
    27                             struct nf_flow_route *route,
    28                             enum flow_offload_tuple_dir dir)
    29  {
    30          struct dst_entry *other_dst = route->tuple[!dir].dst;
    31          struct dst_entry *dst = route->tuple[dir].dst;
    32  
    33          ft->iifidx = other_dst->dev->ifindex;
    34          ft->dst.dst_cache = dst;
    35  
    36          return dst;
    37  }
    38  
    39  static struct dst_br_port *
    40  flow_offload_fill_bridge_dst(struct flow_offload_tuple *ft,
    41                               struct nf_flow_forward *forward,
    42                               enum flow_offload_tuple_dir dir)
    43  {
    44          struct dst_br_port other_dst_port = 
forward->tuple[!dir].dst_port;
    45          struct dst_br_port dst_port = forward->tuple[dir].dst_port;
    46  
    47          ft->iifidx = other_dst_port.dev->ifindex;
    48          ft->dst.dst_port = dst_port;
    49          ft->vlan_tag = forward->tuple[dir].vlan_tag;
    50  
    51          return &ft->dst.dst_port;
    52  }
    53  
    54  static void
    55  flow_offload_fill_dir(struct flow_offload *flow, struct nf_conn *ct,
    56                        struct nf_flow_dst *flow_dst,
    57                        enum flow_offload_tuple_dir dir)
    58  {
    59          struct flow_offload_tuple *ft = &flow->tuplehash[dir].tuple;
    60          struct nf_conntrack_tuple *ctt = &ct->tuplehash[dir].tuple;
    61          struct dst_br_port *dst_port;
    62          struct dst_entry *dst;
    63  
    64          switch (flow_dst->type) {
    65          case FLOW_OFFLOAD_TYPE_INET:
    66                  dst = flow_offload_fill_inet_dst(ft, &flow_dst->route, 
dir);
    67                  break;
    68          case FLOW_OFFLOAD_TYPE_BRIDGE:
    69                  dst_port = flow_offload_fill_bridge_dst(ft, 
&flow_dst->forward, dir);
    70                  break;
    71          }
    72  
    73          ft->dst.type = flow_dst->type;
    74          ft->dir = dir;
    75  
    76          switch (ctt->src.l3num) {
    77          case NFPROTO_IPV4:
    78                  ft->src_v4 = ctt->src.u3.in;
    79                  ft->dst_v4 = ctt->dst.u3.in;
    80                  if (flow_dst->type == FLOW_OFFLOAD_TYPE_INET)
    81                          ft->mtu = ip_dst_mtu_maybe_forward(dst, true);
    82                  else
  > 83                          ft->mtu = dst_port->dev->mtu;
    84                  break;
    85          case NFPROTO_IPV6:
    86                  ft->src_v6 = ctt->src.u3.in6;
    87                  ft->dst_v6 = ctt->dst.u3.in6;
    88                  ft->mtu = ip6_dst_mtu_forward(dst);
    89                  break;
    90          }
    91  
    92          ft->l3proto = ctt->src.l3num;
    93          ft->l4proto = ctt->dst.protonum;
    94          ft->src_port = ctt->src.u.tcp.port;
    95          ft->dst_port = ctt->dst.u.tcp.port;
    96  }
    97  

---
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