Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp4653580imm; Fri, 18 May 2018 08:32:23 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpuyM3fITm36G95cSH6IOmYd97Doio1pcBKug+0T7vzGhiSe3vIfZdMSnCTFjZlrDG9xdvw X-Received: by 2002:a17:902:bb0b:: with SMTP id l11-v6mr10218528pls.190.1526657543634; Fri, 18 May 2018 08:32:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526657543; cv=none; d=google.com; s=arc-20160816; b=z+zB191jVeQqcNT2wYsGBFqiJI8buHB3oTb81ONBh304sDKWoNlh0ErlHssT/aCYdl pVgZb5RPi3KoLIDxjeIDZhwNlvHPyLDrYV1FFp3l/TACQqkQL8EqmKEel7QT+TQIjn4N z6U4wvbyoY2+iEltFwUvLL8G9u/J8yH7TMAfUVC9VqUsv0EncZZsr2h+5/hs5AQN4gOL njFBfEruGnSTwlIjPfTmGhH27qu16sGyDOntx/Ef8sQNqex1Yk5gkC40MpNTpjHihSf0 iu77aTtNFI4OMBRQv6+TYS+clia1pGMgAqCDGHz/8trsdMRlKJtKBlydWPiCWR16jcdj Yzsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature :arc-authentication-results; bh=bCfj5jocjcVwYyOmcYlt7/rChuFNLTA+uZ64oku/eCc=; b=MaFmAv4h4P4MS454OG+Y9VX3SRcWOTbIBv3FiKVU/QsXxP2JZI+tRa8opVDl67AejR OGD3LA3l6c6aoPDqkDRLXDsE3I2j/JeuH3DJ/NFwcKnpRTqRJQeCkhV+nBkD7Gk+sr7T jzKwoBeoCi6fCVLW1K/U9FGjZ5WQrIt1DDDEHt2nb/m91MP0KjQ4OFNfzsOh/XeR+mlm 7oru0Bv7RbvWZgj+14E4/HoNmFgs9YIKmvLiRK2t6Ko20KECI1oE3X2sB8j+QLAaIXU6 C0mKXPYgIFef0TvWtWfHxJD/3Qd6GEdOSLXONILmk51v3aU/ealGdpE9ym62vlEtMeZw FfXg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=sXwtwHve; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m3-v6si6027460pgc.229.2018.05.18.08.32.09; Fri, 18 May 2018 08:32:23 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=sXwtwHve; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752234AbeERPar (ORCPT + 99 others); Fri, 18 May 2018 11:30:47 -0400 Received: from mail-pl0-f67.google.com ([209.85.160.67]:33815 "EHLO mail-pl0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751009AbeERPaq (ORCPT ); Fri, 18 May 2018 11:30:46 -0400 Received: by mail-pl0-f67.google.com with SMTP id ay10-v6so4799525plb.1; Fri, 18 May 2018 08:30:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=bCfj5jocjcVwYyOmcYlt7/rChuFNLTA+uZ64oku/eCc=; b=sXwtwHveJZiwhH4eXn3J2rXOGGwUyV5MeMWf1AR9Nmw04TLk9k7qSaPHxM7qJLuoL5 kDy4EjGHmyV1vPg6cLmkdtI15k94Lw71V9+YGRenG3bu0j9vXBr/XCvOtjtAYWt38nKu Qwg5oa28m3pOFrqJNUiOCtCwz43tvhsZVIDTEHrVi2IHUya6B1Moqng2oPtApVs62pla tjZczRrcZrnPfQj3zJfjgaQMfCE2Emx3eKFiEwnjM+f2qIm2h9NngMwMMh9+UTJk9y/6 yXpqWfOlAtOxa0sff2f0TGqs3v2sqOs2GhRsPDuyDgvIy5mJZx6JrAKv6NEv8SxHaNBi 8T2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=bCfj5jocjcVwYyOmcYlt7/rChuFNLTA+uZ64oku/eCc=; b=or5bShwDklTq7YWQDah5To6x0b3CXl1i/HWoJAt4SwtWSMr/Ms6adJku4WNP0TYmAc lI9uWUvxCC8xemImULEDjpGIzDT27jF+wkvvijRQ/gFikrmZo6wi0a1sirR/ihK69Vl4 rxExSB9ET2ZUTCt45lKscvoidi2UgUO99tPWUf2s3Kq5mQzkvLEP93tLnO1+icb1KUHu B6lj2Q9j8bQVhJDWxtY34YuV50oBCfDvvzP4gaada2FixhWbu2DWS4akPEG2MHc34783 DCAZRk7IZKYlJmWMR2S+2fTYLpG9C5mMkRYNIhxnxlVuI/13cyiwcFgIUXrgn4081iA3 eOxQ== X-Gm-Message-State: ALKqPwe8jurQguZftVtXTfQd04iCNsrhsWfRv7Be4FOqnsJIDxdkrHwT H6q3utVCwD/dqmRlyKHr/A4= X-Received: by 2002:a17:902:6b45:: with SMTP id g5-v6mr10125129plt.67.1526657445680; Fri, 18 May 2018 08:30:45 -0700 (PDT) Received: from [192.168.86.235] (c-67-180-167-114.hsd1.ca.comcast.net. [67.180.167.114]) by smtp.gmail.com with ESMTPSA id l63-v6sm15476124pfi.6.2018.05.18.08.30.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 May 2018 08:30:44 -0700 (PDT) Subject: Re: WARNING in ip_recv_error To: DaeRyong Jeong , davem@davemloft.net, kuznet@ms2.inr.ac.ru, yoshfuji@linux-ipv6.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, byoungyoung@purdue.edu, kt0755@gmail.com, bammanag@purdue.edu, Willem de Bruijn References: <20180518120826.GA19515@dragonet.kaist.ac.kr> From: Eric Dumazet Message-ID: <293d029c-b14c-a625-3703-97a5754e99f1@gmail.com> Date: Fri, 18 May 2018 08:30:43 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: <20180518120826.GA19515@dragonet.kaist.ac.kr> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/18/2018 05:08 AM, DaeRyong Jeong wrote: > We report the crash: WARNING in ip_recv_error > (I resend the email since I mistakenly missed the subject in my previous > email. I'm sorry.) > > > This crash has been found in v4.17-rc1 using RaceFuzzer (a modified > version of Syzkaller), which we describe more at the end of this > report. Our analysis shows that the race occurs when invoking two > syscalls concurrently, setsockopt$inet6_IPV6_ADDRFORM and recvmsg. > > > Diagnosis: > We think the concurrent execution of do_ipv6_setsockopt() with optname > IPV6_ADDRFORM and inet_recvmsg() causes the crash. do_ipv6_setsockopt() > can update sk->prot to &udp_prot and sk->sk_family to PF_INET. But > inet_recvmsg() can execute sk->sk_prot->recvmsg() right after that > sk->prot is updated and sk->sk_family is not updated by > do_ipv6_setsockopt(). This will lead WARN_ON in ip_recv_error(). > > > Thread interleaving: > CPU0 (do_ipv6_setsockopt) CPU1 (inet_recvmsg) > ===== ===== > struct proto *prot = &udp_prot; > ... > sk->sk_prot = prot; > sk->sk_socket->ops = &inet_dgram_ops; > err = sk->sk_prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT, > flags & ~MSG_DONTWAIT, &addr_len); > > (in udp_recvmsg) > if (flags & MSG_ERRQUEUE) > return ip_recv_error(sk, msg, len, addr_len); > > (in ip_recv_error) > WARN_ON_ONCE(sk->sk_family == AF_INET6); > sk->sk_family = PF_INET; > > > Call Sequence: > CPU0 > ===== > udpv6_setsockopt > ipv6_setsockopt > do_ipv6_setsockopt > > CPU1 > ===== > sock_recvmsg > sock_recvmsg_nosec > inet_recvmsg > udp_recvmsg > > > ================================================================== > WARNING: CPU: 1 PID: 32600 at /home/daeryong/workspace/new-race-fuzzer/kernels_repo/kernel_v4.17-rc1/net/ipv4/ip_sockglue.c:508 ip_recv_error+0x6f2/0x720 net/ipv4/ip_sockglue.c:508 > Kernel panic - not syncing: panic_on_warn set ... > > CPU: 1 PID: 32600 Comm: syz-executor0 Not tainted 4.17.0-rc1 #1 > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.8.2-0-g33fbe13 by qemu-project.org 04/01/2014 > Call Trace: > __dump_stack lib/dump_stack.c:77 [inline] > dump_stack+0x166/0x21c lib/dump_stack.c:113 > panic+0x1a0/0x3a7 kernel/panic.c:184 > __warn+0x191/0x1a0 kernel/panic.c:536 > report_bug+0x132/0x1b0 lib/bug.c:186 > fixup_bug.part.11+0x28/0x50 arch/x86/kernel/traps.c:178 > fixup_bug arch/x86/kernel/traps.c:247 [inline] > do_error_trap+0x28b/0x2d0 arch/x86/kernel/traps.c:296 > do_invalid_op+0x1b/0x20 arch/x86/kernel/traps.c:315 > invalid_op+0x14/0x20 arch/x86/entry/entry_64.S:992 > RIP: 0010:ip_recv_error+0x6f2/0x720 net/ipv4/ip_sockglue.c:508 > RSP: 0018:ffff8801dadff630 EFLAGS: 00010212 > RAX: 0000000000040000 RBX: 0000000000002002 RCX: ffffffff8327de12 > RDX: 000000000000008a RSI: ffffc90001a0c000 RDI: ffff8801be615010 > RBP: ffff8801dadff720 R08: 0000000000002002 R09: ffff8801dadff918 > R10: ffff8801dadff738 R11: ffff8801dadffaff R12: ffff8801be615000 > R13: ffff8801dadffd50 R14: 1ffff1003b5bfece R15: ffff8801dadffb90 > udp_recvmsg+0x834/0xa10 net/ipv4/udp.c:1571 > inet_recvmsg+0x121/0x420 net/ipv4/af_inet.c:830 > sock_recvmsg_nosec net/socket.c:802 [inline] > sock_recvmsg+0x7f/0xa0 net/socket.c:809 > ___sys_recvmsg+0x1f0/0x430 net/socket.c:2279 > __sys_recvmsg+0xfc/0x1c0 net/socket.c:2328 > __do_sys_recvmsg net/socket.c:2338 [inline] > __se_sys_recvmsg net/socket.c:2335 [inline] > __x64_sys_recvmsg+0x48/0x50 net/socket.c:2335 > do_syscall_64+0x15f/0x4a0 arch/x86/entry/common.c:287 > entry_SYSCALL_64_after_hwframe+0x49/0xbe > RIP: 0033:0x4563f9 > RSP: 002b:00007f24f6927b28 EFLAGS: 00000246 ORIG_RAX: 000000000000002f > RAX: ffffffffffffffda RBX: 000000000072bfa0 RCX: 00000000004563f9 > RDX: 0000000000002002 RSI: 0000000020000240 RDI: 0000000000000016 > RBP: 00000000000004e4 R08: 0000000000000000 R09: 0000000000000000 > R10: 0000000000000000 R11: 0000000000000246 R12: 00007f24f69286d4 > R13: 00000000ffffffff R14: 00000000006fc600 R15: 0000000000000000 > Dumping ftrace buffer: > (ftrace buffer empty) > Kernel Offset: disabled > Rebooting in 86400 seconds.. > ================================================================== > > > = About RaceFuzzer > > RaceFuzzer is a customized version of Syzkaller, specifically tailored > to find race condition bugs in the Linux kernel. While we leverage > many different technique, the notable feature of RaceFuzzer is in > leveraging a custom hypervisor (QEMU/KVM) to interleave the > scheduling. In particular, we modified the hypervisor to intentionally > stall a per-core execution, which is similar to supporting per-core > breakpoint functionality. This allows RaceFuzzer to force the kernel > to deterministically trigger racy condition (which may rarely happen > in practice due to randomness in scheduling). > > RaceFuzzer's C repro always pinpoints two racy syscalls. Since C > repro's scheduling synchronization should be performed at the user > space, its reproducibility is limited (reproduction may take from 1 > second to 10 minutes (or even more), depending on a bug). This is > because, while RaceFuzzer precisely interleaves the scheduling at the > kernel's instruction level when finding this bug, C repro cannot fully > utilize such a feature. Please disregard all code related to > "should_hypercall" in the C repro, as this is only for our debugging > purposes using our own hypervisor. > We probably need to revert Willem patch (7ce875e5ecb8562fd44040f69bda96c999e38bbc)