Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp3208394pxb; Mon, 9 Nov 2020 05:38:10 -0800 (PST) X-Google-Smtp-Source: ABdhPJxrSQuS6AvBaXBDf47/tzwf2lQoQOYvEiW1KarK8a+YIsTM/CK0kvgtd8qWlxqRANRQpSxD X-Received: by 2002:a17:906:3a8d:: with SMTP id y13mr15482490ejd.460.1604929090535; Mon, 09 Nov 2020 05:38:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604929090; cv=none; d=google.com; s=arc-20160816; b=U8zZnmCfXRrzre/hR4OhRvGXjcIu8R53cFccHWkVyLaaJfNvqMD4UUU2gV34ed7EJQ K1+NNUaZH+Lj1Yc6pZlOOmhImidW5P+2j2NS9RYbPsBeWjU9F5f+g95vrG1uoRg68W5z bC2l1pKC4HFE7EavLDri0Rs61iVVNm0ZltTc3TvPAOdTGNRrcVO5UwRt/V5GutEapBYL QX4wMvGji9kdd6nxEVcvwsmW1KIJ9k9eGm55+RYb2SYCh9ThsDFJ1b6US2dqkhpJ8Vh6 HmebfqagmisSFPjjxBg82dAvzs9hedpUAkPpp3ogduBLtphSC4xBB5xgN50zH7mcsJEF VOfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=ltQjawMK48nYUWxE2GE374GLtisKjDmulasHfFF/Ks8=; b=gVwlyD4JGGg8mXzSm6QnwEYbuE4hyBWSgjMMV67DE8CQFsISULX4YOC4SrrGekXmcV JsbDEr1YnrfL/1kH0Hc5rw7vMj+YmTAl49YSwLXmBWc+C8unZfP1EGec4y+6/qDd/ukJ nz8gZvH2CsDiD1gEkHM0mBiUTb+oXLjMz7m2uUywFJQwQUj/Gvsbc2AXgF8Y/LWyjU5E fGIziR7tUHsvTiI9R1XOfhHBFK6dJT9S8faRea0jtPQSlcJH1JyKONj33DlhZhkTMVLK oLJKYKwrhNMfqjqcm63IzIc/vo4+b/zcD99LLJkGt3ZyrcViPAKXDSYW9/E6YrmmDPoE cSVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=wOYuH1yu; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a13si6581047edk.386.2020.11.09.05.37.47; Mon, 09 Nov 2020 05:38:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=wOYuH1yu; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731727AbgKINgb (ORCPT + 99 others); Mon, 9 Nov 2020 08:36:31 -0500 Received: from mail.kernel.org ([198.145.29.99]:57614 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730481AbgKINEo (ORCPT ); Mon, 9 Nov 2020 08:04:44 -0500 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (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 67FDF221F9; Mon, 9 Nov 2020 13:04:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604927082; bh=NSGbzGVScaKQrT4fRL0SVDPkXhHp/jQGXACAcHuiIAg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wOYuH1yuNeakbPtQykwh5Kv8CJTAnYZ+0COqgFyqpYe/8wCwXU5KUEGnpDeGKzGXW gHi7C3EOfsjVrxp1vdEQ+mEElMc9OectCaHmVCXKIl1/sRftNYAGjUciSZSeWCHsSn R5EtGYXdx6L2wHvA/dv8D9LCI9o03nsLh0PD6QEc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vincent Whitchurch , Rob Herring , Sasha Levin Subject: [PATCH 4.9 104/117] of: Fix reserved-memory overlap detection Date: Mon, 9 Nov 2020 13:55:30 +0100 Message-Id: <20201109125030.634579716@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201109125025.630721781@linuxfoundation.org> References: <20201109125025.630721781@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Vincent Whitchurch [ Upstream commit ca05f33316559a04867295dd49f85aeedbfd6bfd ] The reserved-memory overlap detection code fails to detect overlaps if either of the regions starts at address 0x0. The code explicitly checks for and ignores such regions, apparently in order to ignore dynamically allocated regions which have an address of 0x0 at this point. These dynamically allocated regions also have a size of 0x0 at this point, so fix this by removing the check and sorting the dynamically allocated regions ahead of any static regions at address 0x0. For example, there are two overlaps in this case but they are not currently reported: foo@0 { reg = <0x0 0x2000>; }; bar@0 { reg = <0x0 0x1000>; }; baz@1000 { reg = <0x1000 0x1000>; }; quux { size = <0x1000>; }; but they are after this patch: OF: reserved mem: OVERLAP DETECTED! bar@0 (0x00000000--0x00001000) overlaps with foo@0 (0x00000000--0x00002000) OF: reserved mem: OVERLAP DETECTED! foo@0 (0x00000000--0x00002000) overlaps with baz@1000 (0x00001000--0x00002000) Signed-off-by: Vincent Whitchurch Link: https://lore.kernel.org/r/ded6fd6b47b58741aabdcc6967f73eca6a3f311e.1603273666.git-series.vincent.whitchurch@axis.com Signed-off-by: Rob Herring Signed-off-by: Sasha Levin --- drivers/of/of_reserved_mem.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c index 366d8c3c79893..f15bb936dfd84 100644 --- a/drivers/of/of_reserved_mem.c +++ b/drivers/of/of_reserved_mem.c @@ -222,6 +222,16 @@ static int __init __rmem_cmp(const void *a, const void *b) if (ra->base > rb->base) return 1; + /* + * Put the dynamic allocations (address == 0, size == 0) before static + * allocations at address 0x0 so that overlap detection works + * correctly. + */ + if (ra->size < rb->size) + return -1; + if (ra->size > rb->size) + return 1; + return 0; } @@ -239,8 +249,7 @@ static void __init __rmem_check_for_overlap(void) this = &reserved_mem[i]; next = &reserved_mem[i + 1]; - if (!(this->base && next->base)) - continue; + if (this->base + this->size > next->base) { phys_addr_t this_end, next_end; -- 2.27.0