Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1984201imu; Fri, 14 Dec 2018 04:05:08 -0800 (PST) X-Google-Smtp-Source: AFSGD/WxHLbBpeb/5U874lgv9+Ss0mn6XzNeiuoBH8OouuUd9tlM7rYHpYTGkC/zNXeqbXIZzoVe X-Received: by 2002:a63:e5c:: with SMTP id 28mr2255284pgo.369.1544789108412; Fri, 14 Dec 2018 04:05:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544789108; cv=none; d=google.com; s=arc-20160816; b=neJXpL4VgjmR2I7GkNMnNMGcAX1DCw7vy2AxD/LLswFyS5YIdvWeraXMwm8VYUqgbn xvFaopwAh6XMuniK0pAGpQu32WU474MD3aFsppSlYLVIR6UuitqqK90JVEyyx3YUZ0X7 M7IVXu32P11yBHgNPtUsLYbtuhf8SagBZwDHzJw41vurSGpbBDWph48pf8vbtcoIQy97 Dfl5lBbjbYVdMk4rWaChb7YScvpQLzggIYbQ69VLU+nrH916KafHJz5fy/crrd3B9k+7 jRbgUPU8P8W6GfADp5aR5Npet1+jLNswCTXCBYzgAQ7TqiAqOIzZGpmcQbG+sh3iUB2k ntJQ== 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:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=4IHgL+DRJ+IJNwpx7tQwY5W8U3KKevs0/B2GgPci1UE=; b=IXxyB+imTaP6Y0jLxi9MSDNYw8bEEgb9W/+8jyysOozabFUbO9eoJqSrQSYCFONybX 6STO4hDoAvSNLwQssS8Vln1QTVxdoOzanPMRatT3N/Nieqr73wuAjKdF+5lu7jNBccyK NVNYJo2/KGmJk7vOSOFyA+hXwfaVFPp9YAlJiYmkHQDWYN34DufROPCZjW8Fwr+7NjOz R36/2Nfbq1a1v+jTAuq3sQ5tZhiRgbyYs5e/QTVhskgnlxM6McB7FZmzEe2AKGYsOZGb DWtXODKKMiavPqP2gIWq4uaXuX/BcHHWqx26UiYHgQzGjZKC/d35WvQNQXwb5VokYPNB Y07Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=HEWAyA3f; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a81si3993821pfj.195.2018.12.14.04.04.53; Fri, 14 Dec 2018 04:05:08 -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=@kernel.org header.s=default header.b=HEWAyA3f; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730240AbeLNMDJ (ORCPT + 99 others); Fri, 14 Dec 2018 07:03:09 -0500 Received: from mail.kernel.org ([198.145.29.99]:46352 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730210AbeLNMDH (ORCPT ); Fri, 14 Dec 2018 07:03:07 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id EC97A2145D; Fri, 14 Dec 2018 12:03:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1544788986; bh=v8XUgI5o8c1lU2DWjRU91qEZzbypVrHvmAz3mFz3u4I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HEWAyA3f9OSKKuBaxaZl3+cC0g5SHouM8hSmvqbW9y07DfsgS/A1q+WBhhrBzW00A eGAYsxjKxDI2XPjWjjRpXiCqJxCT8we6f27bL0RJoZ2yzbv1RACqRlKQXey9iAQ0tD 1fiqAIDi+TYSvnjUGrhtXzmt0ahFFPqP5/fLSHvg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Pavel Popa , Jason Wang , "David S. Miller" Subject: [PATCH 4.19 017/142] virtio-net: keep vnet header zeroed after processing XDP Date: Fri, 14 Dec 2018 12:58:22 +0100 Message-Id: <20181214115747.738748353@linuxfoundation.org> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20181214115747.053633987@linuxfoundation.org> References: <20181214115747.053633987@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.19-stable review patch. If anyone has any objections, please let me know. ------------------ From: Jason Wang [ Upstream commit 436c9453a1ac0944b82870ef2e0d9be956b396d9 ] We copy vnet header unconditionally in page_to_skb() this is wrong since XDP may modify the packet data. So let's keep a zeroed vnet header for not confusing the conversion between vnet header and skb metadata. In the future, we should able to detect whether or not the packet was modified and keep using the vnet header when packet was not touched. Fixes: f600b6905015 ("virtio_net: Add XDP support") Reported-by: Pavel Popa Signed-off-by: Jason Wang Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/virtio_net.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -365,7 +365,8 @@ static unsigned int mergeable_ctx_to_tru static struct sk_buff *page_to_skb(struct virtnet_info *vi, struct receive_queue *rq, struct page *page, unsigned int offset, - unsigned int len, unsigned int truesize) + unsigned int len, unsigned int truesize, + bool hdr_valid) { struct sk_buff *skb; struct virtio_net_hdr_mrg_rxbuf *hdr; @@ -387,7 +388,8 @@ static struct sk_buff *page_to_skb(struc else hdr_padded_len = sizeof(struct padded_vnet_hdr); - memcpy(hdr, p, hdr_len); + if (hdr_valid) + memcpy(hdr, p, hdr_len); len -= hdr_len; offset += hdr_padded_len; @@ -739,7 +741,8 @@ static struct sk_buff *receive_big(struc struct virtnet_rq_stats *stats) { struct page *page = buf; - struct sk_buff *skb = page_to_skb(vi, rq, page, 0, len, PAGE_SIZE); + struct sk_buff *skb = page_to_skb(vi, rq, page, 0, len, + PAGE_SIZE, true); stats->bytes += len - vi->hdr_len; if (unlikely(!skb)) @@ -842,7 +845,8 @@ static struct sk_buff *receive_mergeable rcu_read_unlock(); put_page(page); head_skb = page_to_skb(vi, rq, xdp_page, - offset, len, PAGE_SIZE); + offset, len, + PAGE_SIZE, false); return head_skb; } break; @@ -898,7 +902,7 @@ static struct sk_buff *receive_mergeable goto err_skb; } - head_skb = page_to_skb(vi, rq, page, offset, len, truesize); + head_skb = page_to_skb(vi, rq, page, offset, len, truesize, !xdp_prog); curr_skb = head_skb; if (unlikely(!curr_skb))