Received: by 2002:ac0:aed5:0:0:0:0:0 with SMTP id t21csp5897497imb; Fri, 8 Mar 2019 05:02:11 -0800 (PST) X-Google-Smtp-Source: APXvYqwL9sbyjrW6lEF1pMNvwsQxNXdmKAaJ0nIprNK6uEa3TBNp1q6fm4ZhcWY3WN/BFCMoRrvn X-Received: by 2002:a17:902:b707:: with SMTP id d7mr1031231pls.91.1552050131505; Fri, 08 Mar 2019 05:02:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1552050131; cv=none; d=google.com; s=arc-20160816; b=T8UD+OMbF1LnVfQ+2UYafjO1w7o+pzEITZCcZNbCwcUweo9GYooyjbJYSH+gorfS0T AJ++Js8WPSc7RUzVkXm/kXRwJVtCT3+bCC6QPrcNlMw9QPB1KIsMDhSPtqtSZDLwhaKE 5gYzJTBvdl6RanhXOBvigeXaW0KN7YJyb7ZH6QAITs5RbrFlpldK6mFSAFtrmop1oSy8 8Hh3F+/r7OwjY4hGqiIaL82qf/G1fHbSdngkAU5pt4OPs+9Ty4+Wvh3mCL+S76u8fAwr 3hUOvk9PMyHszlHxXPzYH4L0SaDUw+n/xvUCYFHWipWnszlFDonX5vJ/hz8NaBt/3U5A CZhw== 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=8RD2LEGMGMkHqexQFANR+gXfjR8jhkfMkWPq5yQwPxM=; b=vO1L+SaAPn5JyQiHCRnoOdh0abg9Y43jPKqeskL1xAbOwAJH1kpmaGVSTe9LiXpcqT bP2eGota+FkeNeB/mbolOC8NkAOJIJGuigqAbFidAYWJ4BvOec/UaE0ef7by/hOL9lAy ZM3CpDAWW7gF3b6ahH0QZYTpwmHwQ8Em4dnmrBcaPQMq5CC9cC2wGVExSZ2wLNqS2N6Y Gte2rSGTFL0mY9N1Pdc9IB45Xdk0/DLp3impLZWVw1j+uisX3NhUyFce4B1sZb4KUOvF uaoXnPGRhINYN+2pMBR5coprBT3LPO+XgDB3ls4o06OnWWxrX3mqy+OykZtRKY1q/jBT WRFg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=kw5qWeF6; 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 f23si7567439pfa.228.2019.03.08.05.01.53; Fri, 08 Mar 2019 05:02:11 -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=kw5qWeF6; 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 S1728054AbfCHNAw (ORCPT + 99 others); Fri, 8 Mar 2019 08:00:52 -0500 Received: from mail.kernel.org ([198.145.29.99]:37982 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727836AbfCHNAt (ORCPT ); Fri, 8 Mar 2019 08:00:49 -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 52C6D20811; Fri, 8 Mar 2019 13:00:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1552050048; bh=Khce1pU30hEsZ2REZ9D2V4qsQ0V9OVppO/gDTVneOMY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kw5qWeF6Q2Go1Xa6ouCRQo6dCV6fZL/nrIpon43SSzVs9YxMqtSyI885+R3cN/Sfp 2Ruca1W4c+y8Vhrnw5EbuC1X7sdcA7wHmU2zGWCVTRKciKI0REGIYU6NCMpPHehYYy c/VGa5zIIpOGb5U5uIi51okxULj8FJ+8Us6gF3mA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Paul Durrant , Igor Druzhinin , Wei Liu , "David S. Miller" Subject: [PATCH 4.19 40/68] xen-netback: fix occasional leak of grant ref mappings under memory pressure Date: Fri, 8 Mar 2019 13:50:10 +0100 Message-Id: <20190308124912.688213501@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190308124910.696595153@linuxfoundation.org> References: <20190308124910.696595153@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: Igor Druzhinin [ Upstream commit 99e87f56b48f490fb16b6e0f74691c1e664dea95 ] Zero-copy callback flag is not yet set on frag list skb at the moment xenvif_handle_frag_list() returns -ENOMEM. This eventually results in leaking grant ref mappings since xenvif_zerocopy_callback() is never called for these fragments. Those eventually build up and cause Xen to kill Dom0 as the slots get reused for new mappings: "d0v0 Attempt to implicitly unmap a granted PTE c010000329fce005" That behavior is observed under certain workloads where sudden spikes of page cache writes coexist with active atomic skb allocations from network traffic. Additionally, rework the logic to deal with frag_list deallocation in a single place. Signed-off-by: Paul Durrant Signed-off-by: Igor Druzhinin Acked-by: Wei Liu Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/xen-netback/netback.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --- a/drivers/net/xen-netback/netback.c +++ b/drivers/net/xen-netback/netback.c @@ -1072,11 +1072,6 @@ static int xenvif_handle_frag_list(struc skb_frag_size_set(&frags[i], len); } - /* Copied all the bits from the frag list -- free it. */ - skb_frag_list_init(skb); - xenvif_skb_zerocopy_prepare(queue, nskb); - kfree_skb(nskb); - /* Release all the original (foreign) frags. */ for (f = 0; f < skb_shinfo(skb)->nr_frags; f++) skb_frag_unref(skb, f); @@ -1145,6 +1140,8 @@ static int xenvif_tx_submit(struct xenvi xenvif_fill_frags(queue, skb); if (unlikely(skb_has_frag_list(skb))) { + struct sk_buff *nskb = skb_shinfo(skb)->frag_list; + xenvif_skb_zerocopy_prepare(queue, nskb); if (xenvif_handle_frag_list(queue, skb)) { if (net_ratelimit()) netdev_err(queue->vif->dev, @@ -1153,6 +1150,9 @@ static int xenvif_tx_submit(struct xenvi kfree_skb(skb); continue; } + /* Copied all the bits from the frag list -- free it. */ + skb_frag_list_init(skb); + kfree_skb(nskb); } skb->dev = queue->vif->dev;