Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp476249yba; Wed, 15 May 2019 04:49:32 -0700 (PDT) X-Google-Smtp-Source: APXvYqwT5HKf7QIh2oX8h+l0SZtYZqS5BLFpcrOQjV9zqhmTxd/PBV5G9WcBlLHf1INmV5wgi8E1 X-Received: by 2002:a65:5647:: with SMTP id m7mr42958090pgs.348.1557920971996; Wed, 15 May 2019 04:49:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557920971; cv=none; d=google.com; s=arc-20160816; b=CQ81we/iOpFKMyCC4ChwpRc85YGAP6svAlWrUWCLowiR7YSwXsOREwkKPA+zo43+Z/ 2eMVKlrisiEFW1ywj/ytTSUMphNSPzNFceFzDGRU97xnZ5TT7a8Nm5WWEI5cO9O8WbfM n9XBIiInyG+1rRvzV9niQySvLRvtl1BIkiDn5bmLEb/7ZHKGvweS3AgjNeRHuIXeZpUa RkiFmnnljOVHxsXST6EQrl+Z8+IsMwu1IslUmk4OZDPif6VMZkTk4Z3/wqzgdRTvDB98 +QFKEvXbI1OmLGqFFEOj1YXHuve1kt4S/9ZiPSNVttcEujUKJQh3YBhT6JbW67jv7PLT AL4g== 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=XiZaiM1ocIt4hQpkYafZmOGOjLHW+SrQc33uI3uMpA0=; b=kLKNWFgRCaOSkxVmivk+C8K6yLDqK63b3kFzrUNdGWvbZaHrQE6TkZlkXl5wvwiX2T cwhBfIFdo/Kqnza3Kh+9R6IPHJKmyXPJL1e+hAUk/fgcAKV8qZop0kaD+yqDwM/it4yS qIvJKfAr1qAz/TsVd8kg6+RGQ9iiPEpRJIF+fo8EN/FgbZi8DEaG90mGBfpMVTPn39dw n1POk/kp92pw9SM8DOUidWHOQcl53ozURwPVgQ61xdC00nW6Zp07LiV+c5a1ZDK6+m07 7/ewjq7KA4mnzUc+6Ipuo6kjAbdV7rQDWRX6nLtnhDFY8rkgnIusuIDEpgiEw22isUIV 56mg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=hEDdYn8b; 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 d20si1113901pgv.102.2019.05.15.04.49.17; Wed, 15 May 2019 04:49:31 -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=@kernel.org header.s=default header.b=hEDdYn8b; 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 S1731933AbfEOLsL (ORCPT + 99 others); Wed, 15 May 2019 07:48:11 -0400 Received: from mail.kernel.org ([198.145.29.99]:34698 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731765AbfEOLYK (ORCPT ); Wed, 15 May 2019 07:24:10 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.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 68F29206BF; Wed, 15 May 2019 11:24:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1557919448; bh=CH0+JtbkQNQLC85ldheuVY08kzo49DZ/3EggvHzvjv0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hEDdYn8bEqRqRjshNy93z4ZYe4qPt3knqM3PuD5R9HfqmHKrkr1w5rU34udQ701ZS R8OQWk0OpcOEVrz8A7Squ2lsNmxrdspI/CXAYYzQl5TUmDtxdg2yEFC8g9OgT2qg3Z 34AsIDLZtpZuryUOvz37UtJiaMcCaDf+vTwSGC88= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jakub Kicinski , Dirk van der Merwe , Eric Dumazet , "David S. Miller" , Sasha Levin Subject: [PATCH 4.19 078/113] net: strparser: partially revert "strparser: Call skb_unclone conditionally" Date: Wed, 15 May 2019 12:56:09 +0200 Message-Id: <20190515090659.530462851@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190515090652.640988966@linuxfoundation.org> References: <20190515090652.640988966@linuxfoundation.org> User-Agent: quilt/0.66 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 [ Upstream commit 4a9c2e3746e6151fd5d077259d79ce9ca86d47d7 ] This reverts the first part of commit 4e485d06bb8c ("strparser: Call skb_unclone conditionally"). To build a message with multiple fragments we need our own root of frag_list. We can't simply use the frag_list of orig_skb, because it will lead to linking all orig_skbs together creating very long frag chains, and causing stack overflow on kfree_skb() (which is called recursively on the frag_lists). BUG: stack guard page was hit at 00000000d40fad41 (stack is 0000000029dde9f4..000000008cce03d5) kernel stack overflow (double-fault): 0000 [#1] PREEMPT SMP RIP: 0010:free_one_page+0x2b/0x490 Call Trace: __free_pages_ok+0x143/0x2c0 skb_release_data+0x8e/0x140 ? skb_release_data+0xad/0x140 kfree_skb+0x32/0xb0 [...] skb_release_data+0xad/0x140 ? skb_release_data+0xad/0x140 kfree_skb+0x32/0xb0 skb_release_data+0xad/0x140 ? skb_release_data+0xad/0x140 kfree_skb+0x32/0xb0 skb_release_data+0xad/0x140 ? skb_release_data+0xad/0x140 kfree_skb+0x32/0xb0 skb_release_data+0xad/0x140 ? skb_release_data+0xad/0x140 kfree_skb+0x32/0xb0 skb_release_data+0xad/0x140 __kfree_skb+0xe/0x20 tcp_disconnect+0xd6/0x4d0 tcp_close+0xf4/0x430 ? tcp_check_oom+0xf0/0xf0 tls_sk_proto_close+0xe4/0x1e0 [tls] inet_release+0x36/0x60 __sock_release+0x37/0xa0 sock_close+0x11/0x20 __fput+0xa2/0x1d0 task_work_run+0x89/0xb0 exit_to_usermode_loop+0x9a/0xa0 do_syscall_64+0xc0/0xf0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 Let's leave the second unclone conditional, as I'm not entirely sure what is its purpose :) Fixes: 4e485d06bb8c ("strparser: Call skb_unclone conditionally") Signed-off-by: Jakub Kicinski Reviewed-by: Dirk van der Merwe Reviewed-by: Eric Dumazet Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- net/strparser/strparser.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/net/strparser/strparser.c b/net/strparser/strparser.c index da1a676860cad..0f4e427928781 100644 --- a/net/strparser/strparser.c +++ b/net/strparser/strparser.c @@ -140,13 +140,11 @@ static int __strp_recv(read_descriptor_t *desc, struct sk_buff *orig_skb, /* We are going to append to the frags_list of head. * Need to unshare the frag_list. */ - if (skb_has_frag_list(head)) { - err = skb_unclone(head, GFP_ATOMIC); - if (err) { - STRP_STATS_INCR(strp->stats.mem_fail); - desc->error = err; - return 0; - } + err = skb_unclone(head, GFP_ATOMIC); + if (err) { + STRP_STATS_INCR(strp->stats.mem_fail); + desc->error = err; + return 0; } if (unlikely(skb_shinfo(head)->frag_list)) { -- 2.20.1