Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp164470pxb; Mon, 2 Nov 2020 17:26:52 -0800 (PST) X-Google-Smtp-Source: ABdhPJwCyqoEKuEDS+oRiGts9lJ5rhrnpHjCtrkIYACNLrTREv4w0TpD3HPNocYbrTr0ZUgjepAQ X-Received: by 2002:aa7:d1c6:: with SMTP id g6mr1779748edp.130.1604366812350; Mon, 02 Nov 2020 17:26:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604366812; cv=none; d=google.com; s=arc-20160816; b=Kt+2joCJYq7IwzkJbYIakAJIBVrT3msvX05zV8KpPxEgsK5Z6uE/tqoji/KCiil/xO 7W5nHSuLVSaG9WB2MFhnTyOMsjyQVSTUTxxKzt3KcdMSDBnMA9z1NqRqyS0u2UGu6OSr uaqPVFpQ62mM4+ct9mdlLiAwgAKSfYvOwZjOMA1zW5iUVNKaM7a3BxZqDd5NYtNsitKf o16lDAOr6FqnSXa2sMdqfPj4J9C/ePSuSqEWWqV+WQ8OPKsh3XSA6abGk07ahPLjbjcX RaIxWNC1c7tBi/wYBTmCkx4zpQl+kxFltcJ46TBdYxfGqFmoWSQF4+LffIXqzh8wa7s5 Dwvg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=9aRC/7kcabSV7VcWuxArfN2qJSNU9249bs613F/N7Sw=; b=uOR/AMQgizgvkoRpvWYpnxjItb77TmugYfAV4R7+2k6yafGk+HcxD4xYknm69n/nVe PIcCzTUTIxAYZWmLYU2suq/myC8r79e+ji6UWoJzX9RY/r2jXOcUnejNLcMzC7yzNoXX tKakCwdEkhkbwnudWsPAHn3aaj0c3AJgmAkKqKhjDWUI5Xv7T9eFlnKtN2YFjVpI8L1u 6Yl8E/8U09PTMYP3MkeJ7RJxrhyj7mjME6cVpPMT9ySRuxXl56c+f6Yh7NcadBNVOLp6 DAFNgI9pgo36Jw9fFVAk+IVyW3Po4RZISX8lM96uuRG3prAyzOD6Lvjpff4uxKx20x1Z OnLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="o4y/P6pi"; 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=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y11si12406898ejd.682.2020.11.02.17.26.29; Mon, 02 Nov 2020 17:26:52 -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="o4y/P6pi"; 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=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728226AbgKCBUs (ORCPT + 99 others); Mon, 2 Nov 2020 20:20:48 -0500 Received: from mail.kernel.org ([198.145.29.99]:35848 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728209AbgKCBUp (ORCPT ); Mon, 2 Nov 2020 20:20:45 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 795E524102; Tue, 3 Nov 2020 01:20:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604366445; bh=8KhMVkXuO9IWRIf9J//Ux4aNr+Cp/aodlSkrxiF5tx0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o4y/P6pisjw5Lpxr+z2/O/RBwh9DEEsoaxWGucBiI6zsI7Pgki0Q5o7+V9kYEw18d gp6UNyl/jDLxbZT980GnETJb+piYUnVBoIkknmwXrY+tA4lg2NfK9PpAsuRturHaPq OV2mW8akSDkPn3ooLn2XStzwgKW1J2kjbVI8ck7E= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Vincent Whitchurch , Rob Herring , Sasha Levin , devicetree@vger.kernel.org Subject: [PATCH AUTOSEL 4.19 04/11] of: Fix reserved-memory overlap detection Date: Mon, 2 Nov 2020 20:20:32 -0500 Message-Id: <20201103012039.183672-4-sashal@kernel.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201103012039.183672-1-sashal@kernel.org> References: <20201103012039.183672-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore 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 895c83e0c7b6c..19f95552da4d8 100644 --- a/drivers/of/of_reserved_mem.c +++ b/drivers/of/of_reserved_mem.c @@ -218,6 +218,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; } @@ -235,8 +245,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