Subject: KMSAN: uninit-value in nf_ip6_checksum

From: syzbot <[email-masked]>
Date: Fri, 15 May 2020 06:36:14 -0700

Hello,

syzbot found the following crash on:

HEAD commit:    8b97c627 kmsan: drop the opportunity to ignore pages
git tree:       https://github.com/google/kmsan.git master
console output: https://syzkaller.appspot.com/x/log.txt?x=17830eac100000
kernel config:  https://syzkaller.appspot.com/x/.config?x=6f048d804e1a47a0
dashboard link: https://syzkaller.appspot.com/bug?extid=266e61dcc3259a67d5ec
compiler:       clang version 10.0.0 (https://github.com/llvm/llvm-project/ c2443155a0fb245c8f17f2c1c72b6ea391e86e81)

Unfortunately, I don't have any reproducer for this crash yet.

IMPORTANT: if you fix the bug, please add the following tag to the commit:
Reported-by: [email-masked]

=====================================================
BUG: KMSAN: uninit-value in nf_ip6_checksum+0x58d/0x610 net/netfilter/utils.c:74
CPU: 1 PID: 16 Comm: ksoftirqd/1 Not tainted 5.7.0-rc4-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
 __dump_stack lib/dump_stack.c:77 [inline]
 dump_stack+0x1c9/0x220 lib/dump_stack.c:118
 kmsan_report+0xf7/0x1e0 mm/kmsan/kmsan_report.c:121
 __msan_warning+0x58/0xa0 mm/kmsan/kmsan_instr.c:215
 nf_ip6_checksum+0x58d/0x610 net/netfilter/utils.c:74
 nf_nat_icmpv6_reply_translation+0x24b/0x10c0 net/netfilter/nf_nat_proto.c:802
 nf_nat_ipv6_fn+0x394/0x4d0 net/netfilter/nf_nat_proto.c:875
 nf_nat_ipv6_in+0x126/0x3c0 net/netfilter/nf_nat_proto.c:894
 nf_hook_entry_hookfn include/linux/netfilter.h:135 [inline]
 nf_hook_slow+0x16e/0x400 net/netfilter/core.c:512
 nf_hook include/linux/netfilter.h:262 [inline]
 NF_HOOK include/linux/netfilter.h:305 [inline]
 ipv6_rcv+0x273/0x710 net/ipv6/ip6_input.c:307
 __netif_receive_skb_one_core net/core/dev.c:5188 [inline]
 __netif_receive_skb net/core/dev.c:5302 [inline]
 process_backlog+0xa41/0x1410 net/core/dev.c:6134
 napi_poll net/core/dev.c:6572 [inline]
 net_rx_action+0x786/0x1aa0 net/core/dev.c:6640
 __do_softirq+0x311/0x83d kernel/softirq.c:293
 run_ksoftirqd+0x25/0x40 kernel/softirq.c:608
 smpboot_thread_fn+0x493/0x980 kernel/smpboot.c:165
 kthread+0x4b5/0x4f0 kernel/kthread.c:269
 ret_from_fork+0x35/0x40 arch/x86/entry/entry_64.S:353

Uninit was stored to memory at:
 kmsan_save_stack_with_flags mm/kmsan/kmsan.c:144 [inline]
 kmsan_internal_chain_origin+0xad/0x130 mm/kmsan/kmsan.c:310
 __msan_chain_origin+0x50/0x90 mm/kmsan/kmsan_instr.c:165
 __skb_checksum_complete+0x422/0x540 net/core/skbuff.c:2858
 nf_ip6_checksum+0x501/0x610 net/netfilter/utils.c:91
 nf_nat_icmpv6_reply_translation+0x24b/0x10c0 net/netfilter/nf_nat_proto.c:802
 nf_nat_ipv6_fn+0x394/0x4d0 net/netfilter/nf_nat_proto.c:875
 nf_nat_ipv6_local_fn+0xb0/0x690 net/netfilter/nf_nat_proto.c:948
 nf_hook_entry_hookfn include/linux/netfilter.h:135 [inline]
 nf_hook_slow+0x16e/0x400 net/netfilter/core.c:512
 nf_hook include/linux/netfilter.h:262 [inline]
 __ip6_local_out+0x56d/0x750 net/ipv6/output_core.c:167
 ip6_local_out+0xa4/0x1d0 net/ipv6/output_core.c:177
 ip6_send_skb net/ipv6/ip6_output.c:1865 [inline]
 ip6_push_pending_frames+0x213/0x4f0 net/ipv6/ip6_output.c:1885
 icmpv6_push_pending_frames+0x674/0x6b0 net/ipv6/icmp.c:304
 icmp6_send+0x32a3/0x39d0 net/ipv6/icmp.c:617
 icmpv6_send+0xe4/0x110 net/ipv6/ip6_icmp.c:43
 ip6_link_failure+0x68/0x590 net/ipv6/route.c:2640
 dst_link_failure include/net/dst.h:418 [inline]
 ndisc_error_report+0x106/0x1a0 net/ipv6/ndisc.c:710
 neigh_invalidate+0x348/0x8d0 net/core/neighbour.c:993
 neigh_timer_handler+0xb1a/0x1530 net/core/neighbour.c:1080
 call_timer_fn+0x218/0x510 kernel/time/timer.c:1405
 expire_timers kernel/time/timer.c:1450 [inline]
 __run_timers+0xcff/0x1210 kernel/time/timer.c:1774
 run_timer_softirq+0x2d/0x50 kernel/time/timer.c:1787
 __do_softirq+0x311/0x83d kernel/softirq.c:293

Uninit was stored to memory at:
 kmsan_save_stack_with_flags mm/kmsan/kmsan.c:144 [inline]
 kmsan_internal_chain_origin+0xad/0x130 mm/kmsan/kmsan.c:310
 kmsan_memcpy_memmove_metadata+0x272/0x2e0 mm/kmsan/kmsan.c:247
 kmsan_memcpy_metadata+0xb/0x10 mm/kmsan/kmsan.c:267
 __msan_memcpy+0x43/0x50 mm/kmsan/kmsan_instr.c:116
 csum_partial_copy+0xae/0x100 lib/checksum.c:174
 skb_copy_and_csum_bits+0x227/0x1130 net/core/skbuff.c:2737
 icmpv6_getfrag+0x15f/0x350 net/ipv6/icmp.c:319
 __ip6_append_data+0x50d7/0x63e0 net/ipv6/ip6_output.c:1623
 ip6_append_data+0x3cb/0x660 net/ipv6/ip6_output.c:1757
 icmp6_send+0x306a/0x39d0 net/ipv6/icmp.c:609
 icmpv6_send+0xe4/0x110 net/ipv6/ip6_icmp.c:43
 ip6_link_failure+0x68/0x590 net/ipv6/route.c:2640
 dst_link_failure include/net/dst.h:418 [inline]
 ndisc_error_report+0x106/0x1a0 net/ipv6/ndisc.c:710
 neigh_invalidate+0x348/0x8d0 net/core/neighbour.c:993
 neigh_timer_handler+0xb1a/0x1530 net/core/neighbour.c:1080
 call_timer_fn+0x218/0x510 kernel/time/timer.c:1405
 expire_timers kernel/time/timer.c:1450 [inline]
 __run_timers+0xcff/0x1210 kernel/time/timer.c:1774
 run_timer_softirq+0x2d/0x50 kernel/time/timer.c:1787
 __do_softirq+0x311/0x83d kernel/softirq.c:293

Uninit was stored to memory at:
 kmsan_save_stack_with_flags mm/kmsan/kmsan.c:144 [inline]
 kmsan_internal_chain_origin+0xad/0x130 mm/kmsan/kmsan.c:310
 kmsan_memcpy_memmove_metadata+0x272/0x2e0 mm/kmsan/kmsan.c:247
 kmsan_memcpy_metadata+0xb/0x10 mm/kmsan/kmsan.c:267
 __msan_memcpy+0x43/0x50 mm/kmsan/kmsan_instr.c:116
 pskb_expand_head+0x38b/0x1b00 net/core/skbuff.c:1636
 __skb_cow include/linux/skbuff.h:3171 [inline]
 skb_cow_head include/linux/skbuff.h:3205 [inline]
 geneve_build_skb+0x4c0/0xe00 drivers/net/geneve.c:754
 geneve6_xmit_skb drivers/net/geneve.c:969 [inline]
 geneve_xmit+0x1b21/0x2c20 drivers/net/geneve.c:1001
 __netdev_start_xmit include/linux/netdevice.h:4533 [inline]
 netdev_start_xmit include/linux/netdevice.h:4547 [inline]
 xmit_one net/core/dev.c:3477 [inline]
 dev_hard_start_xmit+0x531/0xab0 net/core/dev.c:3493
 __dev_queue_xmit+0x2f8d/0x3b20 net/core/dev.c:4052
 dev_queue_xmit+0x4b/0x60 net/core/dev.c:4085
 batadv_send_skb_packet+0x59b/0x8c0 net/batman-adv/send.c:108
 batadv_send_broadcast_skb+0x76/0x90 net/batman-adv/send.c:127
 batadv_iv_ogm_send_to_if net/batman-adv/bat_iv_ogm.c:393 [inline]
 batadv_iv_ogm_emit net/batman-adv/bat_iv_ogm.c:419 [inline]
 batadv_iv_send_outstanding_bat_ogm_packet+0x97e/0xd50 net/batman-adv/bat_iv_ogm.c:1710
 process_one_work+0x1555/0x1f40 kernel/workqueue.c:2268
 worker_thread+0xef6/0x2450 kernel/workqueue.c:2414
 kthread+0x4b5/0x4f0 kernel/kthread.c:269
 ret_from_fork+0x35/0x40 arch/x86/entry/entry_64.S:353

Uninit was stored to memory at:
 kmsan_save_stack_with_flags mm/kmsan/kmsan.c:144 [inline]
 kmsan_internal_chain_origin+0xad/0x130 mm/kmsan/kmsan.c:310
 kmsan_memcpy_memmove_metadata+0x272/0x2e0 mm/kmsan/kmsan.c:247
 kmsan_memcpy_metadata+0xb/0x10 mm/kmsan/kmsan.c:267
 __msan_memcpy+0x43/0x50 mm/kmsan/kmsan_instr.c:116
 pskb_expand_head+0x38b/0x1b00 net/core/skbuff.c:1636
 __skb_cow include/linux/skbuff.h:3171 [inline]
 skb_cow_head include/linux/skbuff.h:3205 [inline]
 batadv_skb_head_push+0x234/0x350 net/batman-adv/soft-interface.c:74
 batadv_send_skb_packet+0x1a7/0x8c0 net/batman-adv/send.c:86
 batadv_send_broadcast_skb+0x76/0x90 net/batman-adv/send.c:127
 batadv_iv_ogm_send_to_if net/batman-adv/bat_iv_ogm.c:393 [inline]
 batadv_iv_ogm_emit net/batman-adv/bat_iv_ogm.c:419 [inline]
 batadv_iv_send_outstanding_bat_ogm_packet+0x97e/0xd50 net/batman-adv/bat_iv_ogm.c:1710
 process_one_work+0x1555/0x1f40 kernel/workqueue.c:2268
 worker_thread+0xef6/0x2450 kernel/workqueue.c:2414
 kthread+0x4b5/0x4f0 kernel/kthread.c:269
 ret_from_fork+0x35/0x40 arch/x86/entry/entry_64.S:353

Uninit was created at:
 kmsan_save_stack_with_flags+0x3c/0x90 mm/kmsan/kmsan.c:144
 kmsan_internal_alloc_meta_for_pages mm/kmsan/kmsan_shadow.c:269 [inline]
 kmsan_alloc_page+0xb9/0x180 mm/kmsan/kmsan_shadow.c:293
 __alloc_pages_nodemask+0x56a2/0x5dc0 mm/page_alloc.c:4848
 __alloc_pages include/linux/gfp.h:504 [inline]
 __alloc_pages_node include/linux/gfp.h:517 [inline]
 alloc_pages_node include/linux/gfp.h:531 [inline]
 __page_frag_cache_refill mm/page_alloc.c:4923 [inline]
 page_frag_alloc+0x3ae/0x910 mm/page_alloc.c:4953
 __netdev_alloc_skb+0x703/0xbb0 net/core/skbuff.c:456
 __netdev_alloc_skb_ip_align include/linux/skbuff.h:2852 [inline]
 netdev_alloc_skb_ip_align include/linux/skbuff.h:2862 [inline]
 batadv_iv_ogm_aggregate_new net/batman-adv/bat_iv_ogm.c:558 [inline]
 batadv_iv_ogm_queue_add+0x10da/0x1900 net/batman-adv/bat_iv_ogm.c:670
 batadv_iv_ogm_schedule_buff net/batman-adv/bat_iv_ogm.c:849 [inline]
 batadv_iv_ogm_schedule+0x10cb/0x1430 net/batman-adv/bat_iv_ogm.c:869
 batadv_iv_send_outstanding_bat_ogm_packet+0xbae/0xd50 net/batman-adv/bat_iv_ogm.c:1722
 process_one_work+0x1555/0x1f40 kernel/workqueue.c:2268
 worker_thread+0xef6/0x2450 kernel/workqueue.c:2414
 kthread+0x4b5/0x4f0 kernel/kthread.c:269
 ret_from_fork+0x35/0x40 arch/x86/entry/entry_64.S:353
=====================================================

---
This bug is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at [email-masked].

syzbot will keep track of this bug report. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.