CC: [email protected] CC: [email protected] CC: Linux Memory Management List <[email protected]> TO: Eric Dumazet <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: 5191249f880367a4cd675825cd721a8d78f26a45 commit: 587652bbdd06ab38a4c1b85e40f933d2cf4a1147 [1658/2290] net: gro: populate net/core/gro.c :::::: branch date: 2 days ago :::::: commit date: 4 days ago config: i386-randconfig-c001-20211118 (attached as .config) 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 # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=587652bbdd06ab38a4c1b85e40f933d2cf4a1147 git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git git fetch --no-tags linux-next master git checkout 587652bbdd06ab38a4c1b85e40f933d2cf4a1147 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=i386 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 >>) Suppressed 8 warnings (8 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. 8 warnings generated. Suppressed 8 warnings (8 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. 8 warnings generated. Suppressed 8 warnings (8 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. 8 warnings generated. Suppressed 8 warnings (8 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. 8 warnings generated. Suppressed 8 warnings (8 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. 8 warnings generated. Suppressed 8 warnings (8 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. include/net/dst_metadata.h:74:18: warning: Access to field 'type' results in a dereference of a null pointer (loaded from variable 'a') [clang-analyzer-core.NullDereference] if (!a != !b || a->type != b->type) ^ net/core/gro.c:735:37: note: Calling 'dev_gro_receive' ret = napi_frags_finish(napi, skb, dev_gro_receive(napi, skb)); ^~~~~~~~~~~~~~~~~~~~~~~~~~ net/core/gro.c:446:2: note: Taking false branch if (netif_elide_gro(skb->dev)) ^ net/core/gro.c:449:2: note: Calling 'gro_list_prepare' gro_list_prepare(&gro_list->list, skb); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/core/gro.c:323:2: note: Loop condition is true. Entering loop body list_for_each_entry(p, head, list) { ^ include/linux/list.h:630:2: note: expanded from macro 'list_for_each_entry' for (pos = list_first_entry(head, typeof(*pos), member); \ ^ net/core/gro.c:328:7: note: Assuming the condition is false if (hash != skb_get_hash_raw(p)) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~ net/core/gro.c:328:3: note: Taking false branch if (hash != skb_get_hash_raw(p)) { ^ net/core/gro.c:335:7: note: Assuming field 'vlan_present' is 0 if (skb_vlan_tag_present(p)) ^ include/linux/if_vlan.h:77:37: note: expanded from macro 'skb_vlan_tag_present' #define skb_vlan_tag_present(__skb) ((__skb)->vlan_present) ^~~~~~~~~~~~~~~~~~~~~~~ net/core/gro.c:335:3: note: Taking false branch if (skb_vlan_tag_present(p)) ^ net/core/gro.c:338:7: note: Assuming 'maclen' is equal to ETH_HLEN if (maclen == ETH_HLEN) ^~~~~~~~~~~~~~~~~~ net/core/gro.c:338:3: note: Taking true branch if (maclen == ETH_HLEN) ^ net/core/gro.c:351:7: note: Assuming 'diffs' is 0 if (!diffs && unlikely(skb->slow_gro | p->slow_gro)) { ^~~~~~ net/core/gro.c:351:7: note: Left side of '&&' is true net/core/gro.c:351:17: note: Assuming the condition is false if (!diffs && unlikely(skb->slow_gro | p->slow_gro)) { ^ include/linux/compiler.h:78:40: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^~~~ net/core/gro.c:351:3: note: Taking true branch if (!diffs && unlikely(skb->slow_gro | p->slow_gro)) { ^ net/core/gro.c:357:13: note: Assuming 'p->sk' is not equal to 'skb->sk' diffs |= p->sk != skb->sk; ^~~~~~~~~~~~~~~~ net/core/gro.c:358:13: note: Calling 'skb_metadata_dst_cmp' diffs |= skb_metadata_dst_cmp(p, skb); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/net/dst_metadata.h:68:6: note: Assuming the condition is false if (!(skb_a->_skb_refdst | skb_b->_skb_refdst)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/net/dst_metadata.h:68:2: note: Taking false branch if (!(skb_a->_skb_refdst | skb_b->_skb_refdst)) ^ include/net/dst_metadata.h:71:2: note: Value assigned to 'a' a = (const struct metadata_dst *) skb_dst(skb_a); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/net/dst_metadata.h:74:6: note: Assuming 'a' is null if (!a != !b || a->type != b->type) ^~ include/net/dst_metadata.h:74:6: note: Assuming pointer value is null if (!a != !b || a->type != b->type) ^~ include/net/dst_metadata.h:74:12: note: Assuming 'b' is null if (!a != !b || a->type != b->type) ^~ include/net/dst_metadata.h:74:6: note: Left side of '||' is false if (!a != !b || a->type != b->type) ^ include/net/dst_metadata.h:74:18: note: Access to field 'type' results in a dereference of a null pointer (loaded from variable 'a') if (!a != !b || a->type != b->type) ^ >> net/core/gro.c:400:2: warning: Null pointer passed as 2nd argument to memory >> copy function [clang-analyzer-unix.cstring.NullArg] memcpy(skb_tail_pointer(skb), NAPI_GRO_CB(skb)->frag0, grow); ^ arch/x86/include/asm/string_32.h:182:25: note: expanded from macro 'memcpy' #define memcpy(t, f, n) __builtin_memcpy(t, f, n) ^ net/core/gro.c:731:24: note: Calling 'napi_frags_skb' struct sk_buff *skb = napi_frags_skb(napi); ^~~~~~~~~~~~~~~~~~~~ net/core/gro.c:702:15: note: Calling 'skb_gro_header_hard' if (unlikely(skb_gro_header_hard(skb, hlen))) { ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ net/core/gro.c:702:15: note: Returning from 'skb_gro_header_hard' if (unlikely(skb_gro_header_hard(skb, hlen))) { ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ net/core/gro.c:702:2: note: Taking true branch if (unlikely(skb_gro_header_hard(skb, hlen))) { ^ net/core/gro.c:703:9: note: Calling 'skb_gro_header_slow' eth = skb_gro_header_slow(skb, hlen, 0); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/net/gro.h:150:7: note: Calling 'pskb_may_pull' if (!pskb_may_pull(skb, hlen)) ^~~~~~~~~~~~~~~~~~~~~~~~ include/linux/skbuff.h:2395:13: note: Assuming the condition is true if (likely(len <= skb_headlen(skb))) ^ include/linux/compiler.h:77:40: note: expanded from macro 'likely' # define likely(x) __builtin_expect(!!(x), 1) ^ include/linux/skbuff.h:2395:2: note: Taking true branch if (likely(len <= skb_headlen(skb))) ^ include/net/gro.h:150:7: note: Returning from 'pskb_may_pull' if (!pskb_may_pull(skb, hlen)) ^~~~~~~~~~~~~~~~~~~~~~~~ include/net/gro.h:150:2: note: Taking false branch if (!pskb_may_pull(skb, hlen)) ^ include/net/gro.h:153:2: note: Calling 'skb_gro_frag0_invalidate' skb_gro_frag0_invalidate(skb); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/net/gro.h:143:2: note: Null pointer value stored to field 'frag0' NAPI_GRO_CB(skb)->frag0 = NULL; ^ include/net/gro.h:79:26: note: expanded from macro 'NAPI_GRO_CB' #define NAPI_GRO_CB(skb) ((struct napi_gro_cb *)(skb)->cb) ^ include/net/gro.h:153:2: note: Returning from 'skb_gro_frag0_invalidate' skb_gro_frag0_invalidate(skb); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/core/gro.c:703:9: note: Returning from 'skb_gro_header_slow' eth = skb_gro_header_slow(skb, hlen, 0); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/core/gro.c:704:16: note: Assuming 'eth' is non-null if (unlikely(!eth)) { ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ net/core/gro.c:704:3: note: Taking false branch if (unlikely(!eth)) { ^ net/core/gro.c:716:2: note: Calling '__skb_pull' __skb_pull(skb, hlen); ^~~~~~~~~~~~~~~~~~~~~ include/linux/skbuff.h:2368:9: note: Assuming field 'len' is >= field 'data_len' BUG_ON(skb->len < skb->data_len); ^ include/asm-generic/bug.h:65:45: note: expanded from macro 'BUG_ON' #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) ^~~~~~~~~ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ include/linux/skbuff.h:2368:2: note: Taking false branch BUG_ON(skb->len < skb->data_len); ^ include/asm-generic/bug.h:65:32: note: expanded from macro 'BUG_ON' #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) ^ include/linux/skbuff.h:2368:2: note: Loop condition is false. Exiting loop BUG_ON(skb->len < skb->data_len); ^ include/asm-generic/bug.h:65:27: note: expanded from macro 'BUG_ON' #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) ^ net/core/gro.c:716:2: note: Returning from '__skb_pull' __skb_pull(skb, hlen); ^~~~~~~~~~~~~~~~~~~~~ net/core/gro.c:731:24: note: Returning from 'napi_frags_skb' struct sk_buff *skb = napi_frags_skb(napi); ^~~~~~~~~~~~~~~~~~~~ net/core/gro.c:735:37: note: Calling 'dev_gro_receive' ret = napi_frags_finish(napi, skb, dev_gro_receive(napi, skb)); vim +400 net/core/gro.c 587652bbdd06ab Eric Dumazet 2021-11-15 393 587652bbdd06ab Eric Dumazet 2021-11-15 394 static void gro_pull_from_frag0(struct sk_buff *skb, int grow) 587652bbdd06ab Eric Dumazet 2021-11-15 395 { 587652bbdd06ab Eric Dumazet 2021-11-15 396 struct skb_shared_info *pinfo = skb_shinfo(skb); 587652bbdd06ab Eric Dumazet 2021-11-15 397 587652bbdd06ab Eric Dumazet 2021-11-15 398 BUG_ON(skb->end - skb->tail < grow); 587652bbdd06ab Eric Dumazet 2021-11-15 399 587652bbdd06ab Eric Dumazet 2021-11-15 @400 memcpy(skb_tail_pointer(skb), NAPI_GRO_CB(skb)->frag0, grow); 587652bbdd06ab Eric Dumazet 2021-11-15 401 587652bbdd06ab Eric Dumazet 2021-11-15 402 skb->data_len -= grow; 587652bbdd06ab Eric Dumazet 2021-11-15 403 skb->tail += grow; 587652bbdd06ab Eric Dumazet 2021-11-15 404 587652bbdd06ab Eric Dumazet 2021-11-15 405 skb_frag_off_add(&pinfo->frags[0], grow); 587652bbdd06ab Eric Dumazet 2021-11-15 406 skb_frag_size_sub(&pinfo->frags[0], grow); 587652bbdd06ab Eric Dumazet 2021-11-15 407 587652bbdd06ab Eric Dumazet 2021-11-15 408 if (unlikely(!skb_frag_size(&pinfo->frags[0]))) { 587652bbdd06ab Eric Dumazet 2021-11-15 409 skb_frag_unref(skb, 0); 587652bbdd06ab Eric Dumazet 2021-11-15 410 memmove(pinfo->frags, pinfo->frags + 1, 587652bbdd06ab Eric Dumazet 2021-11-15 411 --pinfo->nr_frags * sizeof(pinfo->frags[0])); 587652bbdd06ab Eric Dumazet 2021-11-15 412 } 587652bbdd06ab Eric Dumazet 2021-11-15 413 } 587652bbdd06ab Eric Dumazet 2021-11-15 414 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
