Hi Florian,

I love your patch! Perhaps something to improve:

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

url:    
https://github.com/0day-ci/linux/commits/Florian-Westphal/netfilter-conntrack-remove-ctnetlink-callbacks-from-l3-protocol-trackers/20180629-053035
base:   https://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next.git master
reproduce:
        # apt-get install sparse
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

>> net/netfilter/nf_conntrack_core.c:281:34: sparse: cast to restricted __be16
>> net/netfilter/nf_conntrack_core.c:281:34: sparse: cast from restricted __be32
>> net/netfilter/nf_conntrack_core.c:282:42: sparse: restricted __be32 degrades 
>> to integer
   net/netfilter/nf_conntrack_core.c:282:34: sparse: cast to restricted __be16
   net/netfilter/nf_conntrack_core.c:1998:9: sparse: incompatible types in 
comparison expression (different address spaces)
   net/netfilter/nf_conntrack_core.c:2328:9: sparse: incompatible types in 
comparison expression (different address spaces)
   net/netfilter/nf_conntrack_core.c:117:13: sparse: context imbalance in 
'nf_conntrack_double_unlock' - unexpected unlock
   net/netfilter/nf_conntrack_core.c:127:13: sparse: context imbalance in 
'nf_conntrack_double_lock' - wrong count at exit
   net/netfilter/nf_conntrack_core.c:157:9: sparse: context imbalance in 
'nf_conntrack_all_lock' - wrong count at exit
   net/netfilter/nf_conntrack_core.c:168:13: sparse: context imbalance in 
'nf_conntrack_all_unlock' - unexpected unlock
   net/netfilter/nf_conntrack_core.c:1825:28: sparse: context imbalance in 
'get_next_corpse' - unexpected unlock

vim +281 net/netfilter/nf_conntrack_core.c

   224  
   225  static bool
   226  nf_ct_get_tuple(const struct sk_buff *skb,
   227                  unsigned int nhoff,
   228                  unsigned int dataoff,
   229                  u_int16_t l3num,
   230                  u_int8_t protonum,
   231                  struct net *net,
   232                  struct nf_conntrack_tuple *tuple,
   233                  const struct nf_conntrack_l4proto *l4proto)
   234  {
   235          unsigned int size;
   236          const __be32 *ap;
   237          __be32 _addrs[8];
   238  
   239          memset(tuple, 0, sizeof(*tuple));
   240  
   241          tuple->src.l3num = l3num;
   242          switch (l3num) {
   243          case NFPROTO_IPV4:
   244                  nhoff += offsetof(struct iphdr, saddr);
   245                  size = 2 * sizeof(__be32);
   246                  break;
   247          case NFPROTO_IPV6:
   248                  nhoff += offsetof(struct ipv6hdr, saddr);
   249                  size = sizeof(_addrs);
   250                  break;
   251          default:
   252                  return true;
   253          }
   254  
   255          ap = skb_header_pointer(skb, nhoff, size, _addrs);
   256          if (!ap)
   257                  return false;
   258  
   259          switch (l3num) {
   260          case NFPROTO_IPV4:
   261                  tuple->src.u3.ip = ap[0];
   262                  tuple->dst.u3.ip = ap[1];
   263                  break;
   264          case NFPROTO_IPV6:
   265                  memcpy(tuple->src.u3.ip6, ap, 
sizeof(tuple->src.u3.ip6));
   266                  memcpy(tuple->dst.u3.ip6, ap + 4, 
sizeof(tuple->dst.u3.ip6));
   267                  break;
   268          }
   269  
   270          tuple->dst.protonum = protonum;
   271          tuple->dst.dir = IP_CT_DIR_ORIGINAL;
   272  
   273          if (unlikely(l4proto->pkt_to_tuple))
   274                  return l4proto->pkt_to_tuple(skb, dataoff, net, tuple);
   275  
   276          /* Actually only need first 4 bytes to get ports. */
   277          ap = skb_header_pointer(skb, dataoff, sizeof(*ap), &_addrs);
   278          if (ap == NULL)
   279                  return false;
   280  
 > 281          tuple->src.u.udp.port = (__be16)*ap;
 > 282          tuple->dst.u.udp.port = (__be16)(*ap >> 16);
   283          return true;
   284  }
   285  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to