Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1010801yba; Thu, 4 Apr 2019 02:21:58 -0700 (PDT) X-Google-Smtp-Source: APXvYqziiZy3XAczsIwPoQuPZhz9XLre0PkhMCtbG9X2bjQfzYkpRhEqA674ps0LpTTLIDxx4W4x X-Received: by 2002:a63:c61:: with SMTP id 33mr4351132pgm.293.1554369718553; Thu, 04 Apr 2019 02:21:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554369718; cv=none; d=google.com; s=arc-20160816; b=hMmltYvkKD9CqZyfR951xIJQhfW1WZZF99CWkRKGOaYpf+/pBNP89g7zMyxXp85esY dtbf0CqgDrxUOj30knzPUTaIyfRxHzNVQb/JdGF+Nv1oPdc29F/Kxbd8E8gaRqv9nSZF yoGce4tC5OmZugJxLL3fYAbQgfpEFa4hMmfjEUYStRWQLwqdQSrYhIa0UvwYkW/2LtOF xGrGDLD4WhJHcJA/xAGTEzpZA8IUXaDEmPRQn5Re2Pe/N/CM6836dcv5wF7Jobx7KVae ZuJQI40QfYo2ARgthsl512agFbUqUY1mWn2sTPbgUvQUVy/6HSpt8pW6rMoS5tpgfgLp VUKA== 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=MDqUonMmzPJs5kp6K4m5epDu46OtlTgORDYn12tvBQA=; b=i0JeIo6bC7820+NCNkoXrIXwFu8L0XdGzCRYYZ7I+hYtMwWLdc8RODhmmhDBt5KbmX YUDCiXTUnVXi4AEQQfOM+RmsrmOlKGxLUzIwygM6F8zFbB0CjbRNV8OAUY65LTct/dBh 9kMb1EplZBwI7WkszHbOo/LuV5/NCb2B+nrYT9JidmCq/ZrtkduHZarrab3tACpFfH6M 8NCClatzujzOTjCZmcq7rxMVJtVM+QTU2+Gq5ati9kAjiTcUZGGeq8x5lyDDXxE2RqGk 0HDomRLHBOC3CxFCl9oyN5QNt2trYzAGFHfab6e/jPzuUMvhXzUpRs4mSv3quiyXXnma xp2Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=KawoVEHD; 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 c141si15947615pfc.169.2019.04.04.02.21.43; Thu, 04 Apr 2019 02:21:58 -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=KawoVEHD; 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 S2388171AbfDDJRO (ORCPT + 99 others); Thu, 4 Apr 2019 05:17:14 -0400 Received: from mail.kernel.org ([198.145.29.99]:58784 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388164AbfDDJRM (ORCPT ); Thu, 4 Apr 2019 05:17:12 -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 5BC382054F; Thu, 4 Apr 2019 09:17:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1554369430; bh=GSjLLwd8NFKNyuTNNfe/iarO+ZkzZzJmUgfTTXZaQy4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KawoVEHDIf7q+WJYQ01Ck/hdkQ1GGY/PLGgZUwJ+xO+4zOIHrzPQeSbBtAQN1NP5b fpsuTVaKpzmcmPh6yD2X5wt90o7EZN6X+thMvQkcNXcgDvMaaPhrcSYxPNaN7mheMq 1xPqE8tWhrifX9Hr7/MPPh6mUEF84HG43bCn3L7Y= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Timo Alho , Jon Hunter , Thierry Reding , Sasha Levin Subject: [PATCH 5.0 205/246] soc/tegra: fuse: Fix illegal free of IO base address Date: Thu, 4 Apr 2019 10:48:25 +0200 Message-Id: <20190404084626.368093628@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190404084619.236418459@linuxfoundation.org> References: <20190404084619.236418459@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 5.0-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit 51294bf6b9e897d595466dcda5a3f2751906a200 ] On cases where device tree entries for fuse and clock provider are in different order, fuse driver needs to defer probing. This leads to freeing incorrect IO base address as the fuse->base variable gets overwritten once during first probe invocation. This leads to the following spew during boot: [ 3.082285] Trying to vfree() nonexistent vm area (00000000cfe8fd94) [ 3.082308] WARNING: CPU: 5 PID: 126 at /hdd/l4t/kernel/stable/mm/vmalloc.c:1511 __vunmap+0xcc/0xd8 [ 3.082318] Modules linked in: [ 3.082330] CPU: 5 PID: 126 Comm: kworker/5:1 Tainted: G S 4.19.7-tegra-gce119d3 #1 [ 3.082340] Hardware name: quill (DT) [ 3.082353] Workqueue: events deferred_probe_work_func [ 3.082364] pstate: 40000005 (nZcv daif -PAN -UAO) [ 3.082372] pc : __vunmap+0xcc/0xd8 [ 3.082379] lr : __vunmap+0xcc/0xd8 [ 3.082385] sp : ffff00000a1d3b60 [ 3.082391] x29: ffff00000a1d3b60 x28: 0000000000000000 [ 3.082402] x27: 0000000000000000 x26: ffff000008e8b610 [ 3.082413] x25: 0000000000000000 x24: 0000000000000009 [ 3.082423] x23: ffff000009221a90 x22: ffff000009f6d000 [ 3.082432] x21: 0000000000000000 x20: 0000000000000000 [ 3.082442] x19: ffff000009f6d000 x18: ffffffffffffffff [ 3.082452] x17: 0000000000000000 x16: 0000000000000000 [ 3.082462] x15: ffff0000091396c8 x14: 0720072007200720 [ 3.082471] x13: 0720072007200720 x12: 0720072907340739 [ 3.082481] x11: 0764076607380765 x10: 0766076307300730 [ 3.082491] x9 : 0730073007300730 x8 : 0730073007280720 [ 3.082501] x7 : 0761076507720761 x6 : 0000000000000102 [ 3.082510] x5 : 0000000000000000 x4 : 0000000000000000 [ 3.082519] x3 : ffffffffffffffff x2 : ffff000009150ff8 [ 3.082528] x1 : 3d95b1429fff5200 x0 : 0000000000000000 [ 3.082538] Call trace: [ 3.082545] __vunmap+0xcc/0xd8 [ 3.082552] vunmap+0x24/0x30 [ 3.082561] __iounmap+0x2c/0x38 [ 3.082569] tegra_fuse_probe+0xc8/0x118 [ 3.082577] platform_drv_probe+0x50/0xa0 [ 3.082585] really_probe+0x1b0/0x288 [ 3.082593] driver_probe_device+0x58/0x100 [ 3.082601] __device_attach_driver+0x98/0xf0 [ 3.082609] bus_for_each_drv+0x64/0xc8 [ 3.082616] __device_attach+0xd8/0x130 [ 3.082624] device_initial_probe+0x10/0x18 [ 3.082631] bus_probe_device+0x90/0x98 [ 3.082638] deferred_probe_work_func+0x74/0xb0 [ 3.082649] process_one_work+0x1e0/0x318 [ 3.082656] worker_thread+0x228/0x450 [ 3.082664] kthread+0x128/0x130 [ 3.082672] ret_from_fork+0x10/0x18 [ 3.082678] ---[ end trace 0810fe6ba772c1c7 ]--- Fix this by retaining the value of fuse->base until driver has successfully probed. Signed-off-by: Timo Alho Acked-by: Jon Hunter Signed-off-by: Thierry Reding Signed-off-by: Sasha Levin --- drivers/soc/tegra/fuse/fuse-tegra.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/soc/tegra/fuse/fuse-tegra.c b/drivers/soc/tegra/fuse/fuse-tegra.c index a33ee8ef8b6b..51625703399e 100644 --- a/drivers/soc/tegra/fuse/fuse-tegra.c +++ b/drivers/soc/tegra/fuse/fuse-tegra.c @@ -137,13 +137,17 @@ static int tegra_fuse_probe(struct platform_device *pdev) res = platform_get_resource(pdev, IORESOURCE_MEM, 0); fuse->phys = res->start; fuse->base = devm_ioremap_resource(&pdev->dev, res); - if (IS_ERR(fuse->base)) - return PTR_ERR(fuse->base); + if (IS_ERR(fuse->base)) { + err = PTR_ERR(fuse->base); + fuse->base = base; + return err; + } fuse->clk = devm_clk_get(&pdev->dev, "fuse"); if (IS_ERR(fuse->clk)) { dev_err(&pdev->dev, "failed to get FUSE clock: %ld", PTR_ERR(fuse->clk)); + fuse->base = base; return PTR_ERR(fuse->clk); } @@ -152,8 +156,10 @@ static int tegra_fuse_probe(struct platform_device *pdev) if (fuse->soc->probe) { err = fuse->soc->probe(fuse); - if (err < 0) + if (err < 0) { + fuse->base = base; return err; + } } if (tegra_fuse_create_sysfs(&pdev->dev, fuse->soc->info->size, -- 2.19.1