Re: [PATCH nf-next 6/8] netfilter: conntrack: avoid l4proto pkt_to_tuple calls

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux