CC: [email protected] CC: [email protected] CC: [email protected] TO: Pablo Neira Ayuso <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: a763d5a5abd65797aec3dd1bf01fe2ccbec32967 commit: 7a27f6ab41356ecba47ec2bec6d635704c169779 netfilter: flowtable: use dev_fill_forward_path() to obtain egress device date: 9 months ago :::::: branch date: 14 hours ago :::::: commit date: 9 months ago config: arm-randconfig-c002-20211126 (https://download.01.org/0day-ci/archive/20211212/[email protected]/config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 5162b558d8c0b542e752b037e72a69d5fd51eb1e) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7a27f6ab41356ecba47ec2bec6d635704c169779 git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout 7a27f6ab41356ecba47ec2bec6d635704c169779 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) ^ include/linux/byteorder/generic.h:135:21: note: expanded from macro '___htons' #define ___htons(x) __cpu_to_be16(x) ^ include/uapi/linux/byteorder/little_endian.h:41:43: note: expanded from macro '__cpu_to_be16' #define __cpu_to_be16(x) ((__force __be16)__swab16((x))) ^ include/uapi/linux/swab.h:105:3: note: expanded from macro '__swab16' (__builtin_constant_p((__u16)(x)) ? \ ^ include/net/llc_pdu.h:266:6: note: Assuming the condition is false if (skb->protocol == htons(ETH_P_802_2)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/net/llc_pdu.h:266:2: note: Taking false branch if (skb->protocol == htons(ETH_P_802_2)) ^ net/llc/llc_sap.c:425:2: note: Returning from 'llc_pdu_decode_da' llc_pdu_decode_da(skb, laddr.mac); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/llc/llc_sap.c:428:6: note: Calling 'is_multicast_ether_addr' if (is_multicast_ether_addr(laddr.mac)) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/etherdevice.h:121:2: note: Assigned value is garbage or undefined u16 a = *(const u16 *)addr; ^ ~~~~~~~~~~~~~~~~~~ Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 9 warnings generated. net/llc/llc_station.c:57:2: warning: Value stored to 'rc' is never read [clang-analyzer-deadcode.DeadStores] rc = 0; ^ ~ net/llc/llc_station.c:57:2: note: Value stored to 'rc' is never read rc = 0; ^ ~ net/llc/llc_station.c:86:2: warning: Value stored to 'rc' is never read [clang-analyzer-deadcode.DeadStores] rc = 0; ^ ~ net/llc/llc_station.c:86:2: note: Value stored to 'rc' is never read rc = 0; ^ ~ Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 10 warnings generated. drivers/net/dsa/bcm_sf2.c:467:17: warning: Value stored to 'dev' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct device *dev = priv->dev->ds->dev; ^~~ ~~~~~~~~~~~~~~~~~~ drivers/net/dsa/bcm_sf2.c:467:17: note: Value stored to 'dev' during its initialization is never read struct device *dev = priv->dev->ds->dev; ^~~ ~~~~~~~~~~~~~~~~~~ drivers/net/dsa/bcm_sf2.c:494:2: warning: Value stored to 'reg' is never read [clang-analyzer-deadcode.DeadStores] reg = reg_readl(priv, REG_CROSSBAR); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/dsa/bcm_sf2.c:494:2: note: Value stored to 'reg' is never read reg = reg_readl(priv, REG_CROSSBAR); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/dsa/bcm_sf2.c:496:3: warning: Value stored to 'shift' is never read [clang-analyzer-deadcode.DeadStores] shift = i * priv->num_crossbar_int_ports; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/dsa/bcm_sf2.c:496:3: note: Value stored to 'shift' is never read shift = i * priv->num_crossbar_int_ports; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 9 warnings generated. >> net/netfilter/nf_flow_table_ip.c:312:2: warning: Undefined or garbage value >> returned to caller [clang-analyzer-core.uninitialized.UndefReturn] return ret; ^ ~~~ net/netfilter/nf_flow_table_ip.c:243:2: note: 'ret' declared without an initial value int ret; ^~~~~~~ net/netfilter/nf_flow_table_ip.c:245:23: note: '?' condition is true if (skb->protocol != htons(ETH_P_IP)) ^ include/linux/byteorder/generic.h:141:18: note: expanded from macro 'htons' #define htons(x) ___htons(x) ^ include/linux/byteorder/generic.h:135:21: note: expanded from macro '___htons' #define ___htons(x) __cpu_to_be16(x) ^ include/uapi/linux/byteorder/little_endian.h:41:43: note: expanded from macro '__cpu_to_be16' #define __cpu_to_be16(x) ((__force __be16)__swab16((x))) ^ include/uapi/linux/swab.h:105:3: note: expanded from macro '__swab16' (__builtin_constant_p((__u16)(x)) ? \ ^ net/netfilter/nf_flow_table_ip.c:245:6: note: Assuming the condition is false if (skb->protocol != htons(ETH_P_IP)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/netfilter/nf_flow_table_ip.c:245:2: note: Taking false branch if (skb->protocol != htons(ETH_P_IP)) ^ net/netfilter/nf_flow_table_ip.c:248:2: note: Taking false branch if (nf_flow_tuple_ip(skb, state->in, &tuple, &hdrsize) < 0) ^ net/netfilter/nf_flow_table_ip.c:252:6: note: Assuming 'tuplehash' is not equal to NULL if (tuplehash == NULL) ^~~~~~~~~~~~~~~~~ net/netfilter/nf_flow_table_ip.c:252:2: note: Taking false branch if (tuplehash == NULL) ^ net/netfilter/nf_flow_table_ip.c:256:9: note: Left side of '&&' is false flow = container_of(tuplehash, struct flow_offload, tuplehash[dir]); ^ include/linux/kernel.h:709:61: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ net/netfilter/nf_flow_table_ip.c:256:9: note: Taking false branch flow = container_of(tuplehash, struct flow_offload, tuplehash[dir]); ^ include/linux/kernel.h:709:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:320:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:308:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:300:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ net/netfilter/nf_flow_table_ip.c:256:9: note: Loop condition is false. Exiting loop flow = container_of(tuplehash, struct flow_offload, tuplehash[dir]); ^ include/linux/kernel.h:709:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:320:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:308:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:298:2: note: expanded from macro '__compiletime_assert' do { \ ^ net/netfilter/nf_flow_table_ip.c:258:2: note: Taking false branch if (unlikely(nf_flow_exceeds_mtu(skb, flow->tuplehash[dir].tuple.mtu))) ^ net/netfilter/nf_flow_table_ip.c:263:6: note: Calling 'nf_flow_state_check' if (nf_flow_state_check(flow, iph->protocol, skb, thoff)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/netfilter/nf_flow_table_ip.c:25:6: note: Assuming 'proto' is not equal to IPPROTO_TCP if (proto != IPPROTO_TCP) ^~~~~~~~~~~~~~~~~~~~ net/netfilter/nf_flow_table_ip.c:25:2: note: Taking true branch if (proto != IPPROTO_TCP) ^ net/netfilter/nf_flow_table_ip.c:26:3: note: Returning zero, which participates in a condition later return 0; ^~~~~~~~ net/netfilter/nf_flow_table_ip.c:263:6: note: Returning from 'nf_flow_state_check' if (nf_flow_state_check(flow, iph->protocol, skb, thoff)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/netfilter/nf_flow_table_ip.c:263:2: note: Taking false branch if (nf_flow_state_check(flow, iph->protocol, skb, thoff)) ^ net/netfilter/nf_flow_table_ip.c:266:6: note: Assuming field 'xmit_type' is not equal to FLOW_OFFLOAD_XMIT_NEIGH if (tuplehash->tuple.xmit_type == FLOW_OFFLOAD_XMIT_NEIGH || vim +312 net/netfilter/nf_flow_table_ip.c 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 227 7d208687176292 Felix Fietkau 2018-02-26 228 unsigned int 7d208687176292 Felix Fietkau 2018-02-26 229 nf_flow_offload_ip_hook(void *priv, struct sk_buff *skb, 7d208687176292 Felix Fietkau 2018-02-26 230 const struct nf_hook_state *state) 7d208687176292 Felix Fietkau 2018-02-26 231 { 7d208687176292 Felix Fietkau 2018-02-26 232 struct flow_offload_tuple_rhash *tuplehash; 7d208687176292 Felix Fietkau 2018-02-26 233 struct nf_flowtable *flow_table = priv; 7d208687176292 Felix Fietkau 2018-02-26 234 struct flow_offload_tuple tuple = {}; 7d208687176292 Felix Fietkau 2018-02-26 235 enum flow_offload_tuple_dir dir; 7d208687176292 Felix Fietkau 2018-02-26 236 struct flow_offload *flow; 7d208687176292 Felix Fietkau 2018-02-26 237 struct net_device *outdev; 2a79fd3908acd8 Jason A. Donenfeld 2018-05-30 238 struct rtable *rt; b6f27d322a0a7b Felix Fietkau 2018-02-26 239 unsigned int thoff; 7d208687176292 Felix Fietkau 2018-02-26 240 struct iphdr *iph; 7d208687176292 Felix Fietkau 2018-02-26 241 __be32 nexthop; 2fc11745c3ffa3 Pablo Neira Ayuso 2021-03-17 242 u32 hdrsize; 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 243 int ret; 7d208687176292 Felix Fietkau 2018-02-26 244 7d208687176292 Felix Fietkau 2018-02-26 245 if (skb->protocol != htons(ETH_P_IP)) 7d208687176292 Felix Fietkau 2018-02-26 246 return NF_ACCEPT; 7d208687176292 Felix Fietkau 2018-02-26 247 2fc11745c3ffa3 Pablo Neira Ayuso 2021-03-17 248 if (nf_flow_tuple_ip(skb, state->in, &tuple, &hdrsize) < 0) 7d208687176292 Felix Fietkau 2018-02-26 249 return NF_ACCEPT; 7d208687176292 Felix Fietkau 2018-02-26 250 7d208687176292 Felix Fietkau 2018-02-26 251 tuplehash = flow_offload_lookup(flow_table, &tuple); 7d208687176292 Felix Fietkau 2018-02-26 252 if (tuplehash == NULL) 7d208687176292 Felix Fietkau 2018-02-26 253 return NF_ACCEPT; 7d208687176292 Felix Fietkau 2018-02-26 254 7d208687176292 Felix Fietkau 2018-02-26 255 dir = tuplehash->tuple.dir; 7d208687176292 Felix Fietkau 2018-02-26 256 flow = container_of(tuplehash, struct flow_offload, tuplehash[dir]); 7d208687176292 Felix Fietkau 2018-02-26 257 e75b3e1c9bc5b9 Florian Westphal 2019-05-21 258 if (unlikely(nf_flow_exceeds_mtu(skb, flow->tuplehash[dir].tuple.mtu))) 7d208687176292 Felix Fietkau 2018-02-26 259 return NF_ACCEPT; 7d208687176292 Felix Fietkau 2018-02-26 260 2fc11745c3ffa3 Pablo Neira Ayuso 2021-03-17 261 iph = ip_hdr(skb); 2fc11745c3ffa3 Pablo Neira Ayuso 2021-03-17 262 thoff = iph->ihl * 4; 2fc11745c3ffa3 Pablo Neira Ayuso 2021-03-17 263 if (nf_flow_state_check(flow, iph->protocol, skb, thoff)) b6f27d322a0a7b Felix Fietkau 2018-02-26 264 return NF_ACCEPT; b6f27d322a0a7b Felix Fietkau 2018-02-26 265 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 266 if (tuplehash->tuple.xmit_type == FLOW_OFFLOAD_XMIT_NEIGH || 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 267 tuplehash->tuple.xmit_type == FLOW_OFFLOAD_XMIT_XFRM) { 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 268 rt = (struct rtable *)tuplehash->tuple.dst_cache; e5075c0badaaac Pablo Neira Ayuso 2021-03-17 269 if (!dst_check(&rt->dst, 0)) { 589b474a4b7ce4 Florian Westphal 2019-07-30 270 flow_offload_teardown(flow); 589b474a4b7ce4 Florian Westphal 2019-07-30 271 return NF_ACCEPT; 589b474a4b7ce4 Florian Westphal 2019-07-30 272 } 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 273 } 589b474a4b7ce4 Florian Westphal 2019-07-30 274 2babb46c8c825e Pablo Neira Ayuso 2021-03-17 275 if (skb_try_make_writable(skb, thoff + hdrsize)) 2babb46c8c825e Pablo Neira Ayuso 2021-03-17 276 return NF_DROP; 2babb46c8c825e Pablo Neira Ayuso 2021-03-17 277 1b9cd7690a1ef6 Pablo Neira Ayuso 2021-03-17 278 flow_offload_refresh(flow_table, flow); 1b9cd7690a1ef6 Pablo Neira Ayuso 2021-03-17 279 2babb46c8c825e Pablo Neira Ayuso 2021-03-17 280 iph = ip_hdr(skb); f4401262b927b8 Pablo Neira Ayuso 2021-03-17 281 nf_flow_nat_ip(flow, skb, thoff, dir, iph); 7d208687176292 Felix Fietkau 2018-02-26 282 7d208687176292 Felix Fietkau 2018-02-26 283 ip_decrease_ttl(iph); de20900fbe1c4f Florian Westphal 2019-08-27 284 skb->tstamp = 0; 7d208687176292 Felix Fietkau 2018-02-26 285 53c2b2899af7e6 Pablo Neira Ayuso 2020-03-24 286 if (flow_table->flags & NF_FLOWTABLE_COUNTER) 53c2b2899af7e6 Pablo Neira Ayuso 2020-03-24 287 nf_ct_acct_update(flow->ct, tuplehash->tuple.dir, skb->len); 53c2b2899af7e6 Pablo Neira Ayuso 2020-03-24 288 5139c0c007250c Pablo Neira Ayuso 2021-03-24 289 if (unlikely(tuplehash->tuple.xmit_type == FLOW_OFFLOAD_XMIT_XFRM)) { 589b474a4b7ce4 Florian Westphal 2019-07-30 290 memset(skb->cb, 0, sizeof(struct inet_skb_parm)); 589b474a4b7ce4 Florian Westphal 2019-07-30 291 IPCB(skb)->iif = skb->dev->ifindex; 589b474a4b7ce4 Florian Westphal 2019-07-30 292 IPCB(skb)->flags = IPSKB_FORWARDED; 589b474a4b7ce4 Florian Westphal 2019-07-30 293 return nf_flow_xmit_xfrm(skb, state, &rt->dst); 589b474a4b7ce4 Florian Westphal 2019-07-30 294 } 589b474a4b7ce4 Florian Westphal 2019-07-30 295 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 296 switch (tuplehash->tuple.xmit_type) { 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 297 case FLOW_OFFLOAD_XMIT_NEIGH: 5139c0c007250c Pablo Neira Ayuso 2021-03-24 298 outdev = rt->dst.dev; 7d208687176292 Felix Fietkau 2018-02-26 299 skb->dev = outdev; 7d208687176292 Felix Fietkau 2018-02-26 300 nexthop = rt_nexthop(rt, flow->tuplehash[!dir].tuple.src_v4.s_addr); 2a79fd3908acd8 Jason A. Donenfeld 2018-05-30 301 skb_dst_set_noref(skb, &rt->dst); 7d208687176292 Felix Fietkau 2018-02-26 302 neigh_xmit(NEIGH_ARP_TABLE, outdev, &nexthop, skb); 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 303 ret = NF_STOLEN; 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 304 break; 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 305 case FLOW_OFFLOAD_XMIT_DIRECT: 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 306 ret = nf_flow_queue_xmit(state->net, skb, tuplehash, ETH_P_IP); 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 307 if (ret == NF_DROP) 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 308 flow_offload_teardown(flow); 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 309 break; 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 310 } 7d208687176292 Felix Fietkau 2018-02-26 311 7a27f6ab41356e Pablo Neira Ayuso 2021-03-24 @312 return ret; 7d208687176292 Felix Fietkau 2018-02-26 313 } 7d208687176292 Felix Fietkau 2018-02-26 314 EXPORT_SYMBOL_GPL(nf_flow_offload_ip_hook); a908fdec3dda29 Felix Fietkau 2018-02-26 315 --- 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]
