Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp3667388ybl; Fri, 20 Dec 2019 13:23:19 -0800 (PST) X-Google-Smtp-Source: APXvYqx3d6BFaEmiPnE1ZO0Z3cO94OxM+W7LzAElyrErY2p5aWiqQEwDz5w52hrH26bzWdOTit2k X-Received: by 2002:a9d:ec1:: with SMTP id 59mr16251204otj.141.1576876999720; Fri, 20 Dec 2019 13:23:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576876999; cv=none; d=google.com; s=arc-20160816; b=xWbqnvFRT/WBldsHjM8LzvS48aCvmAC0QudtPF1aWMBi69bmwydbz/KnjXU0b74gvG +0QxmV7DLlURcNA8FMUV00dZVu18g4L42mzplmQttN0SSdiryEX7OGSNsq5XWATmyGsG Z7PvQslnfLUiqyi/AY9ZuZr8OrP3tJuqaMSFYaeDuM9CxVXGJae0pEK8JksbEUzCP2UJ 3GRlqjkpj1irfg9mYEAz4YNNelpFtjNxncJv3HHZ/rU+LKLfe8r2zmsgVU3ub96CHYpl 7JxPFiJnhevPB3JAFbmcgrCIuVXDsQtnTL9azEGc+rFF657dtwovJCJ765E8N93dkEof 192Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:mime-version :message-id:date:dkim-signature; bh=r9lHUhVFmnwnvOI5+OYOqNbrR4sRrsu0Lvjkysu9m60=; b=pAYXrP6LGo+lvsoadIMbpH/ykCohhT8cZ5jKP45n82Gr+kS7w63VcOdu3s/zQGx32k Zj7IjMhZ2y4R6mMaEOp4DYnBDJhT6skGZzu3DaYU1lV2Kcey9ulwqVQWQmLq3OczY4Fd JaLGGRgeFhRhWLPM1p3oQS0K0ljHTeJ1JgZL9/I9f115hdqmQWUu+Be4aKVHikwujoyl zZ4jHyZTpqxgPF8xIqDBW0c48gUOkSOKUqmFK5e8gbDmaInNy68PwJ+MDa1VkcphiGjQ aBozy32K/CdGNwogxKKmX2TlOUPtKn1hHGAZKovFnbZ+jZEwPBXDGW+TSnz5eqAJMJBa 1pMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=VccLePC7; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b20si5859064otf.199.2019.12.20.13.23.07; Fri, 20 Dec 2019 13:23:19 -0800 (PST) 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=@google.com header.s=20161025 header.b=VccLePC7; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727563AbfLTVWK (ORCPT + 99 others); Fri, 20 Dec 2019 16:22:10 -0500 Received: from mail-pj1-f74.google.com ([209.85.216.74]:35912 "EHLO mail-pj1-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727402AbfLTVWK (ORCPT ); Fri, 20 Dec 2019 16:22:10 -0500 Received: by mail-pj1-f74.google.com with SMTP id m61so6044752pjb.1 for ; Fri, 20 Dec 2019 13:22:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=r9lHUhVFmnwnvOI5+OYOqNbrR4sRrsu0Lvjkysu9m60=; b=VccLePC7IXuSG66sx0PbhNexga6fWcYCg7SXxnBD8scdmE77qzrp8kF5tiLoxIvGyZ cgK70KJ/9brCj7xNGnxcD5GmiI3v95REtyIFZKcDUNcjClkCij1om62AJlI1ZIJSwm4r VyLinh19pG1DNbeVj+CrqjyWjdPG57HVKg/ApLWg8GY1NIEIlrb7IwGrAWzZw4AI/CU0 5RMbSPsGxtHhlNDlvmajf1daaT8ueDprlX322nqjNm/3N3yqswVvHXR338cTdHW8DZbe 77MdGvRoDccK14cs3eCsPZcP1Q1GcXGUFCrwA0WrabkD+Xv9iQ1zQ2h96D2vbpGsc6Os Id/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=r9lHUhVFmnwnvOI5+OYOqNbrR4sRrsu0Lvjkysu9m60=; b=SVI9l3ckmDy61zV1Yx2ceO8ThER5c8l/LNXfYDCESALfmxCD1zu3xt4urTRrwYh5ot MbdNYX2UshdTDHclczEHysFbWOnetNyXoK3M+L/2DxBvjeykubQCJxEqjJLf81p6xte0 mEQIYhO9HYiCyBa6RLkGvxCOTeSbZgRKtZuMpnVOoAQ1rrJkdMK5ZuhFvRDd3C+VROuq LYZ+6jP8qyrgAiPS4/ak/1sdXRfLUcbrI6x9S1jPCqWBanSDbu18gzwkiqSxETmg2kAm A2IMUxb5wVZdnW6yFML4esXPIDYDPVwKNuBgVfu+Vuk5RsH4bacWIhSBi7PPAHsz27YD rT3g== X-Gm-Message-State: APjAAAXFXeJ/vjnfkg3KtDYTnisvQBAXj6gv3T7o9/36nQGVnjSxaVGW cC2mvy45fw2T/MsilDB2DXsLI2hRvw4= X-Received: by 2002:a63:bc01:: with SMTP id q1mr18010589pge.442.1576876929534; Fri, 20 Dec 2019 13:22:09 -0800 (PST) Date: Fri, 20 Dec 2019 13:22:07 -0800 Message-Id: <20191220212207.76726-1-adelva@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.24.1.735.g03f4e72817-goog Subject: [PATCH net] virtio-net: Skip set_features on non-cvq devices From: Alistair Delva To: netdev@vger.kernel.org Cc: stable@vger.kernel.org, "Michael S . Tsirkin" , Jason Wang , "David S . Miller" , kernel-team@android.com, virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On devices without control virtqueue support, such as the virtio_net implementation in crosvm[1], attempting to configure LRO will panic the kernel: kernel BUG at drivers/net/virtio_net.c:1591! invalid opcode: 0000 [#1] PREEMPT SMP PTI CPU: 1 PID: 483 Comm: Binder:330_1 Not tainted 5.4.5-01326-g19463e9acaac #1 Hardware name: ChromiumOS crosvm, BIOS 0 RIP: 0010:virtnet_send_command+0x15d/0x170 [virtio_net] Code: d8 00 00 00 80 78 02 00 0f 94 c0 65 48 8b 0c 25 28 00 00 00 48 3b 4c 24 70 75 11 48 8d 65 d8 5b 41 5c 41 5d 41 5e 41 5f 5d c3 <0f> 0b e8 ec a4 12 c8 66 90 66 2e 0f 1f 84 00 00 00 00 00 55 48 89 RSP: 0018:ffffb97940e7bb50 EFLAGS: 00010246 RAX: ffffffffc0596020 RBX: ffffa0e1fc8ea840 RCX: 0000000000000017 RDX: ffffffffc0596110 RSI: 0000000000000011 RDI: 000000000000000d RBP: ffffb97940e7bbf8 R08: ffffa0e1fc8ea0b0 R09: ffffa0e1fc8ea0b0 R10: ffffffffffffffff R11: ffffffffc0590940 R12: 0000000000000005 R13: ffffa0e1ffad2c00 R14: ffffb97940e7bc08 R15: 0000000000000000 FS: 0000000000000000(0000) GS:ffffa0e1fd100000(006b) knlGS:00000000e5ef7494 CS: 0010 DS: 002b ES: 002b CR0: 0000000080050033 CR2: 00000000e5eeb82c CR3: 0000000079b06001 CR4: 0000000000360ee0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: ? preempt_count_add+0x58/0xb0 ? _raw_spin_lock_irqsave+0x36/0x70 ? _raw_spin_unlock_irqrestore+0x1a/0x40 ? __wake_up+0x70/0x190 virtnet_set_features+0x90/0xf0 [virtio_net] __netdev_update_features+0x271/0x980 ? nlmsg_notify+0x5b/0xa0 dev_disable_lro+0x2b/0x190 ? inet_netconf_notify_devconf+0xe2/0x120 devinet_sysctl_forward+0x176/0x1e0 proc_sys_call_handler+0x1f0/0x250 proc_sys_write+0xf/0x20 __vfs_write+0x3e/0x190 ? __sb_start_write+0x6d/0xd0 vfs_write+0xd3/0x190 ksys_write+0x68/0xd0 __ia32_sys_write+0x14/0x20 do_fast_syscall_32+0x86/0xe0 entry_SYSENTER_compat+0x7c/0x8e This happens because virtio_set_features() does not check the presence of the control virtqueue feature, which is sanity checked by a BUG_ON in virtnet_send_command(). Fix this by skipping any feature processing if the control virtqueue is missing. This should be OK for any future feature that is added, as presumably all of them would require control virtqueue support to notify the endpoint that offload etc. should begin. [1] https://chromium.googlesource.com/chromiumos/platform/crosvm/ Fixes: a02e8964eaf9 ("virtio-net: ethtool configurable LRO") Cc: stable@vger.kernel.org [4.20+] Cc: Michael S. Tsirkin Cc: Jason Wang Cc: David S. Miller Cc: kernel-team@android.com Cc: virtualization@lists.linux-foundation.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Alistair Delva --- drivers/net/virtio_net.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 4d7d5434cc5d..709bcd34e485 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -2560,6 +2560,9 @@ static int virtnet_set_features(struct net_device *dev, u64 offloads; int err; + if (!vi->has_cvq) + return 0; + if ((dev->features ^ features) & NETIF_F_LRO) { if (vi->xdp_queue_pairs) return -EBUSY; -- 2.24.1.735.g03f4e72817-goog