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