tree:
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: 8548fd2f20ed19b0e8c0585b71fdfde1ae00ae3c
commit: cfab6dbd0ecf342fc904952d8565c8d80c741a63 [8958/9312] netfilter: flowtable: add
tunnel match offload support
reproduce:
# apt-get install sparse
# sparse version: v0.6.1-180-g0558317d-dirty
git checkout cfab6dbd0ecf342fc904952d8565c8d80c741a63
make ARCH=x86_64 allmodconfig
make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
> net/netfilter/nf_flow_table_offload.c:44:32: sparse: sparse:
incorrect type in assignment (different base types) @@ expected restricted __be32
[usertype] keyid @@ got [usertype] keyid @@
net/netfilter/nf_flow_table_offload.c:44:32: sparse: expected restricted __be32
[usertype] keyid
net/netfilter/nf_flow_table_offload.c:44:32: sparse: got unsigned int
net/netfilter/nf_flow_table_offload.c:54:44: sparse: sparse: incorrect type in
assignment (different base types) @@ expected restricted __be32 [usertype] src @@
got [usertype] src @@
net/netfilter/nf_flow_table_offload.c:54:44: sparse: expected restricted __be32
[usertype] src
net/netfilter/nf_flow_table_offload.c:54:44: sparse: got unsigned int
net/netfilter/nf_flow_table_offload.c:56:44: sparse: sparse: incorrect type in
assignment (different base types) @@ expected restricted __be32 [usertype] dst @@
got [usertype] dst @@
net/netfilter/nf_flow_table_offload.c:56:44: sparse: expected restricted __be32
[usertype] dst
net/netfilter/nf_flow_table_offload.c:56:44: sparse: got unsigned int
net/netfilter/nf_flow_table_offload.c:108:32: sparse: sparse: incorrect type in
assignment (different base types) @@ expected restricted __be32 [usertype] src @@
got [usertype] src @@
net/netfilter/nf_flow_table_offload.c:108:32: sparse: expected restricted __be32
[usertype] src
net/netfilter/nf_flow_table_offload.c:108:32: sparse: got unsigned int
net/netfilter/nf_flow_table_offload.c:110:32: sparse: sparse: incorrect type in
assignment (different base types) @@ expected restricted __be32 [usertype] dst @@
got [usertype] dst @@
net/netfilter/nf_flow_table_offload.c:110:32: sparse: expected restricted __be32
[usertype] dst
net/netfilter/nf_flow_table_offload.c:110:32: sparse: got unsigned int
net/netfilter/nf_flow_table_offload.c:124:29: sparse: sparse: incorrect type in
assignment (different base types) @@ expected restricted __be16 [usertype] n_proto @@
got e] n_proto @@
net/netfilter/nf_flow_table_offload.c:124:29: sparse: expected restricted __be16
[usertype] n_proto
net/netfilter/nf_flow_table_offload.c:124:29: sparse: got int
net/netfilter/nf_flow_table_offload.c:142:22: sparse: sparse: incorrect type in
assignment (different base types) @@ expected restricted __be16 [usertype] src @@
got e] src @@
net/netfilter/nf_flow_table_offload.c:142:22: sparse: expected restricted __be16
[usertype] src
net/netfilter/nf_flow_table_offload.c:142:22: sparse: got int
net/netfilter/nf_flow_table_offload.c:144:22: sparse: sparse: incorrect type in
assignment (different base types) @@ expected restricted __be16 [usertype] dst @@
got e] dst @@
net/netfilter/nf_flow_table_offload.c:144:22: sparse: expected restricted __be16
[usertype] dst
net/netfilter/nf_flow_table_offload.c:144:22: sparse: got int
net/netfilter/nf_flow_table_offload.c:192:30: sparse: sparse: incorrect type in
argument 4 (different base types) @@ expected restricted __be32 const [usertype] *value
@@ got t [usertype] *value @@
net/netfilter/nf_flow_table_offload.c:192:30: sparse: expected restricted __be32
const [usertype] *value
net/netfilter/nf_flow_table_offload.c:192:30: sparse: got unsigned int *
net/netfilter/nf_flow_table_offload.c:192:36: sparse: sparse: incorrect type in
argument 5 (different base types) @@ expected restricted __be32 const [usertype] *mask
@@ got t [usertype] *mask @@
net/netfilter/nf_flow_table_offload.c:192:36: sparse: expected restricted __be32
const [usertype] *mask
net/netfilter/nf_flow_table_offload.c:192:36: sparse: got unsigned int *
net/netfilter/nf_flow_table_offload.c:197:30: sparse: sparse: incorrect type in
argument 4 (different base types) @@ expected restricted __be32 const [usertype] *value
@@ got t [usertype] *value @@
net/netfilter/nf_flow_table_offload.c:197:30: sparse: expected restricted __be32
const [usertype] *value
net/netfilter/nf_flow_table_offload.c:197:30: sparse: got unsigned int *
net/netfilter/nf_flow_table_offload.c:197:36: sparse: sparse: incorrect type in
argument 5 (different base types) @@ expected restricted __be32 const [usertype] *mask
@@ got t [usertype] *mask @@
net/netfilter/nf_flow_table_offload.c:197:36: sparse: expected restricted __be32
const [usertype] *mask
net/netfilter/nf_flow_table_offload.c:197:36: sparse: got unsigned int *
net/netfilter/nf_flow_table_offload.c:236:30: sparse: sparse: incorrect type in
argument 4 (different base types) @@ expected restricted __be32 const [usertype] *value
@@ got t [usertype] *value @@
net/netfilter/nf_flow_table_offload.c:236:30: sparse: expected restricted __be32
const [usertype] *value
net/netfilter/nf_flow_table_offload.c:236:30: sparse: got unsigned int *
net/netfilter/nf_flow_table_offload.c:236:36: sparse: sparse: incorrect type in
argument 5 (different base types) @@ expected restricted __be32 const [usertype] *mask
@@ got t [usertype] *mask @@
net/netfilter/nf_flow_table_offload.c:236:36: sparse: expected restricted __be32
const [usertype] *mask
net/netfilter/nf_flow_table_offload.c:236:36: sparse: got unsigned int *
net/netfilter/nf_flow_table_offload.c:242:30: sparse: sparse: incorrect type in
argument 4 (different base types) @@ expected restricted __be32 const [usertype] *value
@@ got t [usertype] *value @@
net/netfilter/nf_flow_table_offload.c:242:30: sparse: expected restricted __be32
const [usertype] *value
net/netfilter/nf_flow_table_offload.c:242:30: sparse: got unsigned int *
net/netfilter/nf_flow_table_offload.c:242:36: sparse: sparse: incorrect type in
argument 5 (different base types) @@ expected restricted __be32 const [usertype] *mask
@@ got t [usertype] *mask @@
net/netfilter/nf_flow_table_offload.c:242:36: sparse: expected restricted __be32
const [usertype] *mask
net/netfilter/nf_flow_table_offload.c:242:36: sparse: got unsigned int *
net/netfilter/nf_flow_table_offload.c:254:20: sparse: sparse: incorrect type in
initializer (different base types) @@ expected unsigned int [usertype] mask @@ got d
int [usertype] mask @@
net/netfilter/nf_flow_table_offload.c:254:20: sparse: expected unsigned int
[usertype] mask
net/netfilter/nf_flow_table_offload.c:254:20: sparse: got restricted __be32
net/netfilter/nf_flow_table_offload.c:272:37: sparse: sparse: incorrect type in
argument 5 (different base types) @@ expected restricted __be32 const [usertype] *mask
@@ got t [usertype] *mask @@
net/netfilter/nf_flow_table_offload.c:272:37: sparse: expected restricted __be32
const [usertype] *mask
net/netfilter/nf_flow_table_offload.c:272:37: sparse: got unsigned int *
net/netfilter/nf_flow_table_offload.c:281:20: sparse: sparse: incorrect type in
initializer (different base types) @@ expected unsigned int [usertype] mask @@ got d
int [usertype] mask @@
net/netfilter/nf_flow_table_offload.c:281:20: sparse: expected unsigned int
[usertype] mask
net/netfilter/nf_flow_table_offload.c:281:20: sparse: got restricted __be32
net/netfilter/nf_flow_table_offload.c:299:37: sparse: sparse: incorrect type in
argument 5 (different base types) @@ expected restricted __be32 const [usertype] *mask
@@ got t [usertype] *mask @@
net/netfilter/nf_flow_table_offload.c:299:37: sparse: expected restricted __be32
const [usertype] *mask
net/netfilter/nf_flow_table_offload.c:299:37: sparse: got unsigned int *
net/netfilter/nf_flow_table_offload.c:321:20: sparse: sparse: incorrect type in
initializer (different base types) @@ expected unsigned int [usertype] mask @@ got d
int [usertype] mask @@
net/netfilter/nf_flow_table_offload.c:321:20: sparse: expected unsigned int
[usertype] mask
net/netfilter/nf_flow_table_offload.c:321:20: sparse: got restricted __be32
net/netfilter/nf_flow_table_offload.c:338:60: sparse: sparse: incorrect type in
argument 4 (different base types) @@ expected restricted __be32 const [usertype] *mask
@@ got t [usertype] *mask @@
net/netfilter/nf_flow_table_offload.c:338:60: sparse: expected restricted __be32
const [usertype] *mask
net/netfilter/nf_flow_table_offload.c:338:60: sparse: got unsigned int *
net/netfilter/nf_flow_table_offload.c:346:20: sparse: sparse: incorrect type in
initializer (different base types) @@ expected unsigned int [usertype] mask @@ got d
int [usertype] mask @@
net/netfilter/nf_flow_table_offload.c:346:20: sparse: expected unsigned int
[usertype] mask
net/netfilter/nf_flow_table_offload.c:346:20: sparse: got restricted __be32
net/netfilter/nf_flow_table_offload.c:363:60: sparse: sparse: incorrect type in
argument 4 (different base types) @@ expected restricted __be32 const [usertype] *mask
@@ got t [usertype] *mask @@
net/netfilter/nf_flow_table_offload.c:363:60: sparse: expected restricted __be32
const [usertype] *mask
net/netfilter/nf_flow_table_offload.c:363:60: sparse: got unsigned int *
net/netfilter/nf_flow_table_offload.c:398:22: sparse: sparse: incorrect type in
assignment (different base types) @@ expected unsigned int [assigned] [usertype] port
@@ got ed int [assigned] [usertype] port @@
net/netfilter/nf_flow_table_offload.c:398:22: sparse: expected unsigned int
[assigned] [usertype] port
net/netfilter/nf_flow_table_offload.c:398:22: sparse: got restricted __be32
[usertype]
net/netfilter/nf_flow_table_offload.c:399:22: sparse: sparse: incorrect type in
assignment (different base types) @@ expected unsigned int [usertype] mask @@ got d
int [usertype] mask @@
net/netfilter/nf_flow_table_offload.c:399:22: sparse: expected unsigned int
[usertype] mask
net/netfilter/nf_flow_table_offload.c:399:22: sparse: got restricted __be32
net/netfilter/nf_flow_table_offload.c:404:22: sparse: sparse: incorrect type in
assignment (different base types) @@ expected unsigned int [assigned] [usertype] port
@@ got ed int [assigned] [usertype] port @@
net/netfilter/nf_flow_table_offload.c:404:22: sparse: expected unsigned int
[assigned] [usertype] port
net/netfilter/nf_flow_table_offload.c:404:22: sparse: got restricted __be32
[usertype]
net/netfilter/nf_flow_table_offload.c:405:22: sparse: sparse: incorrect type in
assignment (different base types) @@ expected unsigned int [usertype] mask @@ got d
int [usertype] mask @@
net/netfilter/nf_flow_table_offload.c:405:22: sparse: expected unsigned int
[usertype] mask
net/netfilter/nf_flow_table_offload.c:405:22: sparse: got restricted __be32
net/netfilter/nf_flow_table_offload.c:412:30: sparse: sparse: incorrect type in
argument 4 (different base types) @@ expected restricted __be32 const [usertype] *value
@@ got t [usertype] *value @@
net/netfilter/nf_flow_table_offload.c:412:30: sparse: expected restricted __be32
const [usertype] *value
net/netfilter/nf_flow_table_offload.c:412:30: sparse: got unsigned int *
net/netfilter/nf_flow_table_offload.c:412:37: sparse: sparse: incorrect type in
argument 5 (different base types) @@ expected restricted __be32 const [usertype] *mask
@@ got t [usertype] *mask @@
net/netfilter/nf_flow_table_offload.c:412:37: sparse: expected restricted __be32
const [usertype] *mask
net/netfilter/nf_flow_table_offload.c:412:37: sparse: got unsigned int *
net/netfilter/nf_flow_table_offload.c:428:22: sparse: sparse: incorrect type in
assignment (different base types) @@ expected unsigned int [assigned] [usertype] port
@@ got ed int [assigned] [usertype] port @@
net/netfilter/nf_flow_table_offload.c:428:22: sparse: expected unsigned int
[assigned] [usertype] port
net/netfilter/nf_flow_table_offload.c:428:22: sparse: got restricted __be32
[usertype]
net/netfilter/nf_flow_table_offload.c:429:22: sparse: sparse: incorrect type in
assignment (different base types) @@ expected unsigned int [usertype] mask @@ got d
int [usertype] mask @@
net/netfilter/nf_flow_table_offload.c:429:22: sparse: expected unsigned int
[usertype] mask
net/netfilter/nf_flow_table_offload.c:429:22: sparse: got restricted __be32
net/netfilter/nf_flow_table_offload.c:434:22: sparse: sparse: incorrect type in
assignment (different base types) @@ expected unsigned int [assigned] [usertype] port
@@ got ed int [assigned] [usertype] port @@
net/netfilter/nf_flow_table_offload.c:434:22: sparse: expected unsigned int
[assigned] [usertype] port
net/netfilter/nf_flow_table_offload.c:434:22: sparse: got restricted __be32
[usertype]
net/netfilter/nf_flow_table_offload.c:435:22: sparse: sparse: incorrect type in
assignment (different base types) @@ expected unsigned int [usertype] mask @@ got d
int [usertype] mask @@
net/netfilter/nf_flow_table_offload.c:435:22: sparse: expected unsigned int
[usertype] mask
vim +44 net/netfilter/nf_flow_table_offload.c
26
27 #define NF_FLOW_DISSECTOR(__match, __type, __field) \
28 (__match)->dissector.offset[__type] = \
29 offsetof(struct nf_flow_key, __field)
30
31 static void nf_flow_rule_lwt_match(struct nf_flow_match *match,
32 struct ip_tunnel_info *tun_info)
33 {
34 struct nf_flow_key *mask = &match->mask;
35 struct nf_flow_key *key = &match->key;
36 unsigned int enc_keys;
37
38 if (!tun_info || !(tun_info->mode & IP_TUNNEL_INFO_TX))
39 return;
40
41 NF_FLOW_DISSECTOR(match, FLOW_DISSECTOR_KEY_ENC_CONTROL, enc_control);
42 NF_FLOW_DISSECTOR(match, FLOW_DISSECTOR_KEY_ENC_KEYID, enc_key_id);
43 key->enc_key_id.keyid = tunnel_id_to_key32(tun_info->key.tun_id);
44 mask->enc_key_id.keyid = 0xffffffff;
45 enc_keys =
BIT(FLOW_DISSECTOR_KEY_ENC_KEYID) |
46 BIT(FLOW_DISSECTOR_KEY_ENC_CONTROL);
47
48 if (ip_tunnel_info_af(tun_info) == AF_INET) {
49 NF_FLOW_DISSECTOR(match, FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS,
50 enc_ipv4);
51 key->enc_ipv4.src = tun_info->key.u.ipv4.dst;
52 key->enc_ipv4.dst = tun_info->key.u.ipv4.src;
53 if (key->enc_ipv4.src)
54 mask->enc_ipv4.src = 0xffffffff;
55 if (key->enc_ipv4.dst)
56 mask->enc_ipv4.dst = 0xffffffff;
57 enc_keys |= BIT(FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS);
58 key->enc_control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
59 } else {
60 memcpy(&key->enc_ipv6.src, &tun_info->key.u.ipv6.dst,
61 sizeof(struct in6_addr));
62 memcpy(&key->enc_ipv6.dst, &tun_info->key.u.ipv6.src,
63 sizeof(struct in6_addr));
64 if (memcmp(&key->enc_ipv6.src, &in6addr_any,
65 sizeof(struct in6_addr)))
66 memset(&key->enc_ipv6.src, 0xff,
67 sizeof(struct in6_addr));
68 if (memcmp(&key->enc_ipv6.dst, &in6addr_any,
69 sizeof(struct in6_addr)))
70 memset(&key->enc_ipv6.dst, 0xff,
71 sizeof(struct in6_addr));
72 enc_keys |= BIT(FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS);
73 key->enc_control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS;
74 }
75
76 match->dissector.used_keys |= enc_keys;
77 }
78
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org