CC: [email protected]
TO: "Greg Kroah-Hartman" <[email protected]>

tree:   https://android.googlesource.com/kernel/goldfish android-3.18
head:   fa7316c94fad2b143fe78cb0af113aec5e8a2a8a
commit: bb484c80792f7b566184aab3c2d6ee528d950e94 [15022/17854] flow_dissect: 
use programable dissector in skb_flow_dissect and friends
:::::: branch date: 3 days ago
:::::: commit date: 9 months ago
compiler: arceb-elf-gcc (GCC) 9.3.0

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


cppcheck possible warnings: (new ones prefixed by >>, may not real problems)

>> net/core/flow_dissector.c:303:12: warning: Variable 'key_basic' is 
>> reassigned a value before the old one has been used. 'break;' missing? 
>> [redundantAssignInSwitch]
    key_basic = skb_flow_dissector_target(flow_dissector,
              ^
   net/core/flow_dissector.c:137:12: note: Variable 'key_basic' is reassigned a 
value before the old one has been used. 'break;' missing?
    key_basic = skb_flow_dissector_target(flow_dissector,
              ^
   net/core/flow_dissector.c:303:12: note: Variable 'key_basic' is reassigned a 
value before the old one has been used. 'break;' missing?
    key_basic = skb_flow_dissector_target(flow_dissector,
              ^

vim +303 net/core/flow_dissector.c

357afe9c46c951 Nikolay Aleksandrov 2013-10-02  100  
453a940ea725d6 WANG Cong           2014-08-25  101  /**
453a940ea725d6 WANG Cong           2014-08-25  102   * __skb_flow_dissect - 
extract the flow_keys struct and return it
453a940ea725d6 WANG Cong           2014-08-25  103   * @skb: sk_buff to extract 
the flow from, can be NULL if the rest are specified
bb484c80792f7b Jiri Pirko          2015-05-12  104   * @flow_dissector: list of 
keys to dissect
bb484c80792f7b Jiri Pirko          2015-05-12  105   * @target_container: 
target structure to put dissected values into
453a940ea725d6 WANG Cong           2014-08-25  106   * @data: raw buffer 
pointer to the packet, if NULL use skb->data
453a940ea725d6 WANG Cong           2014-08-25  107   * @proto: protocol for 
which to get the flow, if @data is NULL use skb->protocol
453a940ea725d6 WANG Cong           2014-08-25  108   * @nhoff: network header 
offset, if @data is NULL use skb_network_offset(skb)
453a940ea725d6 WANG Cong           2014-08-25  109   * @hlen: packet header 
length, if @data is NULL use skb_headlen(skb)
453a940ea725d6 WANG Cong           2014-08-25  110   *
bb484c80792f7b Jiri Pirko          2015-05-12  111   * The function will try to 
retrieve individual keys into target specified
bb484c80792f7b Jiri Pirko          2015-05-12  112   * by flow_dissector from 
either the skbuff or a raw buffer specified by the
bb484c80792f7b Jiri Pirko          2015-05-12  113   * rest parameters.
bb484c80792f7b Jiri Pirko          2015-05-12  114   *
bb484c80792f7b Jiri Pirko          2015-05-12  115   * Caller must take care of 
zeroing target container memory.
453a940ea725d6 WANG Cong           2014-08-25  116   */
bb484c80792f7b Jiri Pirko          2015-05-12  117  bool 
__skb_flow_dissect(const struct sk_buff *skb,
bb484c80792f7b Jiri Pirko          2015-05-12  118                      struct 
flow_dissector *flow_dissector,
bb484c80792f7b Jiri Pirko          2015-05-12  119                      void 
*target_container,
453a940ea725d6 WANG Cong           2014-08-25  120                      void 
*data, __be16 proto, int nhoff, int hlen)
0744dd00c1b1be Eric Dumazet        2011-11-28  121  {
bb484c80792f7b Jiri Pirko          2015-05-12  122      struct 
flow_dissector_key_basic *key_basic;
bb484c80792f7b Jiri Pirko          2015-05-12  123      struct 
flow_dissector_key_addrs *key_addrs;
bb484c80792f7b Jiri Pirko          2015-05-12  124      struct 
flow_dissector_key_ports *key_ports;
0744dd00c1b1be Eric Dumazet        2011-11-28  125      u8 ip_proto;
0744dd00c1b1be Eric Dumazet        2011-11-28  126  
690e36e726d00d David S. Miller     2014-08-23  127      if (!data) {
690e36e726d00d David S. Miller     2014-08-23  128              data = 
skb->data;
453a940ea725d6 WANG Cong           2014-08-25  129              proto = 
skb->protocol;
453a940ea725d6 WANG Cong           2014-08-25  130              nhoff = 
skb_network_offset(skb);
690e36e726d00d David S. Miller     2014-08-23  131              hlen = 
skb_headlen(skb);
690e36e726d00d David S. Miller     2014-08-23  132      }
690e36e726d00d David S. Miller     2014-08-23  133  
bb484c80792f7b Jiri Pirko          2015-05-12  134      /* It is ensured by 
skb_flow_dissector_init() that basic key will
bb484c80792f7b Jiri Pirko          2015-05-12  135       * be always present.
bb484c80792f7b Jiri Pirko          2015-05-12  136       */
bb484c80792f7b Jiri Pirko          2015-05-12  137      key_basic = 
skb_flow_dissector_target(flow_dissector,
bb484c80792f7b Jiri Pirko          2015-05-12  138                              
              FLOW_DISSECTOR_KEY_BASIC,
bb484c80792f7b Jiri Pirko          2015-05-12  139                              
              target_container);
0744dd00c1b1be Eric Dumazet        2011-11-28  140  
0744dd00c1b1be Eric Dumazet        2011-11-28  141  again:
0744dd00c1b1be Eric Dumazet        2011-11-28  142      switch (proto) {
2b8837aeaaa0bb Joe Perches         2014-03-12  143      case htons(ETH_P_IP): {
0744dd00c1b1be Eric Dumazet        2011-11-28  144              const struct 
iphdr *iph;
0744dd00c1b1be Eric Dumazet        2011-11-28  145              struct iphdr 
_iph;
0744dd00c1b1be Eric Dumazet        2011-11-28  146  ip:
690e36e726d00d David S. Miller     2014-08-23  147              iph = 
__skb_header_pointer(skb, nhoff, sizeof(_iph), data, hlen, &_iph);
6f092343855a71 Jason Wang          2013-11-01  148              if (!iph || 
iph->ihl < 5)
0744dd00c1b1be Eric Dumazet        2011-11-28  149                      return 
false;
3797d3e8462efd Eric Dumazet        2013-11-07  150              nhoff += 
iph->ihl * 4;
0744dd00c1b1be Eric Dumazet        2011-11-28  151  
3797d3e8462efd Eric Dumazet        2013-11-07  152              ip_proto = 
iph->protocol;
0744dd00c1b1be Eric Dumazet        2011-11-28  153              if 
(ip_is_fragment(iph))
0744dd00c1b1be Eric Dumazet        2011-11-28  154                      
ip_proto = 0;
3797d3e8462efd Eric Dumazet        2013-11-07  155  
bb484c80792f7b Jiri Pirko          2015-05-12  156              if 
(!skb_flow_dissector_uses_key(flow_dissector,
bb484c80792f7b Jiri Pirko          2015-05-12  157                              
                 FLOW_DISSECTOR_KEY_IPV4_ADDRS))
5af7fb6e3e92c2 Alexander Duyck     2014-10-10  158                      break;
bb484c80792f7b Jiri Pirko          2015-05-12  159              key_addrs = 
skb_flow_dissector_target(flow_dissector,
bb484c80792f7b Jiri Pirko          2015-05-12  160                              
                      FLOW_DISSECTOR_KEY_IPV4_ADDRS,
bb484c80792f7b Jiri Pirko          2015-05-12  161                              
                      target_container);
bb484c80792f7b Jiri Pirko          2015-05-12  162              
memcpy(key_addrs, &iph->saddr, sizeof(*key_addrs));
0744dd00c1b1be Eric Dumazet        2011-11-28  163              break;
0744dd00c1b1be Eric Dumazet        2011-11-28  164      }
2b8837aeaaa0bb Joe Perches         2014-03-12  165      case htons(ETH_P_IPV6): 
{
0744dd00c1b1be Eric Dumazet        2011-11-28  166              const struct 
ipv6hdr *iph;
0744dd00c1b1be Eric Dumazet        2011-11-28  167              struct ipv6hdr 
_iph;
19469a873bafd4 Tom Herbert         2014-07-01  168              __be32 
flow_label;
19469a873bafd4 Tom Herbert         2014-07-01  169  
0744dd00c1b1be Eric Dumazet        2011-11-28  170  ipv6:
690e36e726d00d David S. Miller     2014-08-23  171              iph = 
__skb_header_pointer(skb, nhoff, sizeof(_iph), data, hlen, &_iph);
0744dd00c1b1be Eric Dumazet        2011-11-28  172              if (!iph)
0744dd00c1b1be Eric Dumazet        2011-11-28  173                      return 
false;
0744dd00c1b1be Eric Dumazet        2011-11-28  174  
0744dd00c1b1be Eric Dumazet        2011-11-28  175              ip_proto = 
iph->nexthdr;
0744dd00c1b1be Eric Dumazet        2011-11-28  176              nhoff += 
sizeof(struct ipv6hdr);
19469a873bafd4 Tom Herbert         2014-07-01  177  
bb484c80792f7b Jiri Pirko          2015-05-12  178              if 
(!skb_flow_dissector_uses_key(flow_dissector,
bb484c80792f7b Jiri Pirko          2015-05-12  179                              
                 FLOW_DISSECTOR_KEY_IPV6_HASH_ADDRS))
56193d1bce2b27 Alexander Duyck     2014-09-05  180                      break;
bb484c80792f7b Jiri Pirko          2015-05-12  181              key_addrs = 
skb_flow_dissector_target(flow_dissector,
bb484c80792f7b Jiri Pirko          2015-05-12  182                              
                      FLOW_DISSECTOR_KEY_IPV6_HASH_ADDRS,
bb484c80792f7b Jiri Pirko          2015-05-12  183                              
                      target_container);
56193d1bce2b27 Alexander Duyck     2014-09-05  184  
bb484c80792f7b Jiri Pirko          2015-05-12  185              key_addrs->src 
= (__force __be32)ipv6_addr_hash(&iph->saddr);
bb484c80792f7b Jiri Pirko          2015-05-12  186              key_addrs->dst 
= (__force __be32)ipv6_addr_hash(&iph->daddr);
5af7fb6e3e92c2 Alexander Duyck     2014-10-10  187  
19469a873bafd4 Tom Herbert         2014-07-01  188              flow_label = 
ip6_flowlabel(iph);
19469a873bafd4 Tom Herbert         2014-07-01  189              if (flow_label) 
{
19469a873bafd4 Tom Herbert         2014-07-01  190                      /* 
Awesome, IPv6 packet has a flow label so we can
19469a873bafd4 Tom Herbert         2014-07-01  191                       * use 
that to represent the ports without any
19469a873bafd4 Tom Herbert         2014-07-01  192                       * 
further dissection.
19469a873bafd4 Tom Herbert         2014-07-01  193                       */
bb484c80792f7b Jiri Pirko          2015-05-12  194  
bb484c80792f7b Jiri Pirko          2015-05-12  195                      
key_basic->n_proto = proto;
bb484c80792f7b Jiri Pirko          2015-05-12  196                      
key_basic->ip_proto = ip_proto;
bb484c80792f7b Jiri Pirko          2015-05-12  197                      
key_basic->thoff = (u16)nhoff;
bb484c80792f7b Jiri Pirko          2015-05-12  198  
bb484c80792f7b Jiri Pirko          2015-05-12  199                      if 
(!skb_flow_dissector_uses_key(flow_dissector,
bb484c80792f7b Jiri Pirko          2015-05-12  200                              
                         FLOW_DISSECTOR_KEY_PORTS))
bb484c80792f7b Jiri Pirko          2015-05-12  201                              
break;
bb484c80792f7b Jiri Pirko          2015-05-12  202                      
key_ports = skb_flow_dissector_target(flow_dissector,
bb484c80792f7b Jiri Pirko          2015-05-12  203                              
                              FLOW_DISSECTOR_KEY_PORTS,
bb484c80792f7b Jiri Pirko          2015-05-12  204                              
                              target_container);
bb484c80792f7b Jiri Pirko          2015-05-12  205                      
key_ports->ports = flow_label;
19469a873bafd4 Tom Herbert         2014-07-01  206  
19469a873bafd4 Tom Herbert         2014-07-01  207                      return 
true;
19469a873bafd4 Tom Herbert         2014-07-01  208              }
19469a873bafd4 Tom Herbert         2014-07-01  209  
0744dd00c1b1be Eric Dumazet        2011-11-28  210              break;
0744dd00c1b1be Eric Dumazet        2011-11-28  211      }
2b8837aeaaa0bb Joe Perches         2014-03-12  212      case 
htons(ETH_P_8021AD):
2b8837aeaaa0bb Joe Perches         2014-03-12  213      case 
htons(ETH_P_8021Q): {
0744dd00c1b1be Eric Dumazet        2011-11-28  214              const struct 
vlan_hdr *vlan;
0744dd00c1b1be Eric Dumazet        2011-11-28  215              struct vlan_hdr 
_vlan;
0744dd00c1b1be Eric Dumazet        2011-11-28  216  
690e36e726d00d David S. Miller     2014-08-23  217              vlan = 
__skb_header_pointer(skb, nhoff, sizeof(_vlan), data, hlen, &_vlan);
0744dd00c1b1be Eric Dumazet        2011-11-28  218              if (!vlan)
0744dd00c1b1be Eric Dumazet        2011-11-28  219                      return 
false;
0744dd00c1b1be Eric Dumazet        2011-11-28  220  
0744dd00c1b1be Eric Dumazet        2011-11-28  221              proto = 
vlan->h_vlan_encapsulated_proto;
0744dd00c1b1be Eric Dumazet        2011-11-28  222              nhoff += 
sizeof(*vlan);
0744dd00c1b1be Eric Dumazet        2011-11-28  223              goto again;
0744dd00c1b1be Eric Dumazet        2011-11-28  224      }
2b8837aeaaa0bb Joe Perches         2014-03-12  225      case 
htons(ETH_P_PPP_SES): {
0744dd00c1b1be Eric Dumazet        2011-11-28  226              struct {
0744dd00c1b1be Eric Dumazet        2011-11-28  227                      struct 
pppoe_hdr hdr;
0744dd00c1b1be Eric Dumazet        2011-11-28  228                      __be16 
proto;
0744dd00c1b1be Eric Dumazet        2011-11-28  229              } *hdr, _hdr;
690e36e726d00d David S. Miller     2014-08-23  230              hdr = 
__skb_header_pointer(skb, nhoff, sizeof(_hdr), data, hlen, &_hdr);
0744dd00c1b1be Eric Dumazet        2011-11-28  231              if (!hdr)
0744dd00c1b1be Eric Dumazet        2011-11-28  232                      return 
false;
0744dd00c1b1be Eric Dumazet        2011-11-28  233              proto = 
hdr->proto;
0744dd00c1b1be Eric Dumazet        2011-11-28  234              nhoff += 
PPPOE_SES_HLEN;
0744dd00c1b1be Eric Dumazet        2011-11-28  235              switch (proto) {
2b8837aeaaa0bb Joe Perches         2014-03-12  236              case 
htons(PPP_IP):
0744dd00c1b1be Eric Dumazet        2011-11-28  237                      goto ip;
2b8837aeaaa0bb Joe Perches         2014-03-12  238              case 
htons(PPP_IPV6):
0744dd00c1b1be Eric Dumazet        2011-11-28  239                      goto 
ipv6;
0744dd00c1b1be Eric Dumazet        2011-11-28  240              default:
0744dd00c1b1be Eric Dumazet        2011-11-28  241                      return 
false;
0744dd00c1b1be Eric Dumazet        2011-11-28  242              }
0744dd00c1b1be Eric Dumazet        2011-11-28  243      }
56193d1bce2b27 Alexander Duyck     2014-09-05  244      case htons(ETH_P_FCOE):
bb484c80792f7b Jiri Pirko          2015-05-12  245              
key_basic->thoff = (u16)(nhoff + FCOE_HEADER_LEN);
56193d1bce2b27 Alexander Duyck     2014-09-05  246              /* fall through 
*/
0744dd00c1b1be Eric Dumazet        2011-11-28  247      default:
0744dd00c1b1be Eric Dumazet        2011-11-28  248              return false;
0744dd00c1b1be Eric Dumazet        2011-11-28  249      }
0744dd00c1b1be Eric Dumazet        2011-11-28  250  
0744dd00c1b1be Eric Dumazet        2011-11-28  251      switch (ip_proto) {
0744dd00c1b1be Eric Dumazet        2011-11-28  252      case IPPROTO_GRE: {
0744dd00c1b1be Eric Dumazet        2011-11-28  253              struct gre_hdr {
0744dd00c1b1be Eric Dumazet        2011-11-28  254                      __be16 
flags;
0744dd00c1b1be Eric Dumazet        2011-11-28  255                      __be16 
proto;
0744dd00c1b1be Eric Dumazet        2011-11-28  256              } *hdr, _hdr;
0744dd00c1b1be Eric Dumazet        2011-11-28  257  
690e36e726d00d David S. Miller     2014-08-23  258              hdr = 
__skb_header_pointer(skb, nhoff, sizeof(_hdr), data, hlen, &_hdr);
0744dd00c1b1be Eric Dumazet        2011-11-28  259              if (!hdr)
0744dd00c1b1be Eric Dumazet        2011-11-28  260                      return 
false;
0744dd00c1b1be Eric Dumazet        2011-11-28  261              /*
0744dd00c1b1be Eric Dumazet        2011-11-28  262               * Only look 
inside GRE if version zero and no
0744dd00c1b1be Eric Dumazet        2011-11-28  263               * routing
0744dd00c1b1be Eric Dumazet        2011-11-28  264               */
0744dd00c1b1be Eric Dumazet        2011-11-28  265              if 
(!(hdr->flags & (GRE_VERSION|GRE_ROUTING))) {
0744dd00c1b1be Eric Dumazet        2011-11-28  266                      proto = 
hdr->proto;
0744dd00c1b1be Eric Dumazet        2011-11-28  267                      nhoff 
+= 4;
0744dd00c1b1be Eric Dumazet        2011-11-28  268                      if 
(hdr->flags & GRE_CSUM)
0744dd00c1b1be Eric Dumazet        2011-11-28  269                              
nhoff += 4;
0744dd00c1b1be Eric Dumazet        2011-11-28  270                      if 
(hdr->flags & GRE_KEY)
0744dd00c1b1be Eric Dumazet        2011-11-28  271                              
nhoff += 4;
0744dd00c1b1be Eric Dumazet        2011-11-28  272                      if 
(hdr->flags & GRE_SEQ)
0744dd00c1b1be Eric Dumazet        2011-11-28  273                              
nhoff += 4;
e1733de2243609 Michael Dalton      2013-03-11  274                      if 
(proto == htons(ETH_P_TEB)) {
e1733de2243609 Michael Dalton      2013-03-11  275                              
const struct ethhdr *eth;
e1733de2243609 Michael Dalton      2013-03-11  276                              
struct ethhdr _eth;
e1733de2243609 Michael Dalton      2013-03-11  277  
690e36e726d00d David S. Miller     2014-08-23  278                              
eth = __skb_header_pointer(skb, nhoff,
690e36e726d00d David S. Miller     2014-08-23  279                              
                           sizeof(_eth),
690e36e726d00d David S. Miller     2014-08-23  280                              
                           data, hlen, &_eth);
e1733de2243609 Michael Dalton      2013-03-11  281                              
if (!eth)
e1733de2243609 Michael Dalton      2013-03-11  282                              
        return false;
e1733de2243609 Michael Dalton      2013-03-11  283                              
proto = eth->h_proto;
e1733de2243609 Michael Dalton      2013-03-11  284                              
nhoff += sizeof(*eth);
e1733de2243609 Michael Dalton      2013-03-11  285                      }
0744dd00c1b1be Eric Dumazet        2011-11-28  286                      goto 
again;
0744dd00c1b1be Eric Dumazet        2011-11-28  287              }
0744dd00c1b1be Eric Dumazet        2011-11-28  288              break;
0744dd00c1b1be Eric Dumazet        2011-11-28  289      }
0744dd00c1b1be Eric Dumazet        2011-11-28  290      case IPPROTO_IPIP:
fca418955148e4 Tom Herbert         2013-07-29  291              proto = 
htons(ETH_P_IP);
fca418955148e4 Tom Herbert         2013-07-29  292              goto ip;
b438f940d3541f Tom Herbert         2013-07-29  293      case IPPROTO_IPV6:
b438f940d3541f Tom Herbert         2013-07-29  294              proto = 
htons(ETH_P_IPV6);
b438f940d3541f Tom Herbert         2013-07-29  295              goto ipv6;
0744dd00c1b1be Eric Dumazet        2011-11-28  296      default:
0744dd00c1b1be Eric Dumazet        2011-11-28  297              break;
0744dd00c1b1be Eric Dumazet        2011-11-28  298      }
0744dd00c1b1be Eric Dumazet        2011-11-28  299  
bb484c80792f7b Jiri Pirko          2015-05-12  300      /* It is ensured by 
skb_flow_dissector_init() that basic key will
bb484c80792f7b Jiri Pirko          2015-05-12  301       * be always present.
bb484c80792f7b Jiri Pirko          2015-05-12  302       */
bb484c80792f7b Jiri Pirko          2015-05-12 @303      key_basic = 
skb_flow_dissector_target(flow_dissector,
bb484c80792f7b Jiri Pirko          2015-05-12  304                              
              FLOW_DISSECTOR_KEY_BASIC,
bb484c80792f7b Jiri Pirko          2015-05-12  305                              
              target_container);
bb484c80792f7b Jiri Pirko          2015-05-12  306      key_basic->n_proto = 
proto;
bb484c80792f7b Jiri Pirko          2015-05-12  307      key_basic->ip_proto = 
ip_proto;
bb484c80792f7b Jiri Pirko          2015-05-12  308      key_basic->thoff = 
(u16) nhoff;
bb484c80792f7b Jiri Pirko          2015-05-12  309  
bb484c80792f7b Jiri Pirko          2015-05-12  310      if 
(skb_flow_dissector_uses_key(flow_dissector,
bb484c80792f7b Jiri Pirko          2015-05-12  311                              
        FLOW_DISSECTOR_KEY_PORTS)) {
bb484c80792f7b Jiri Pirko          2015-05-12  312              key_ports = 
skb_flow_dissector_target(flow_dissector,
bb484c80792f7b Jiri Pirko          2015-05-12  313                              
                      FLOW_DISSECTOR_KEY_PORTS,
bb484c80792f7b Jiri Pirko          2015-05-12  314                              
                      target_container);
bb484c80792f7b Jiri Pirko          2015-05-12  315              
key_ports->ports = __skb_flow_get_ports(skb, nhoff, ip_proto,
5af7fb6e3e92c2 Alexander Duyck     2014-10-10  316                              
                        data, hlen);
bb484c80792f7b Jiri Pirko          2015-05-12  317      }
5af7fb6e3e92c2 Alexander Duyck     2014-10-10  318  
0744dd00c1b1be Eric Dumazet        2011-11-28  319      return true;
0744dd00c1b1be Eric Dumazet        2011-11-28  320  }
690e36e726d00d David S. Miller     2014-08-23  321  
EXPORT_SYMBOL(__skb_flow_dissect);
441d9d327f1e77 Cong Wang           2013-01-21  322  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to