Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp165817pxb; Mon, 2 Nov 2020 17:29:47 -0800 (PST) X-Google-Smtp-Source: ABdhPJwovFkuoh+WLPbbnmGpInDNRxwEfODJmv+pDe1PIbFOAO4BOkSi0cJPhxPvrlHsohk3hvfO X-Received: by 2002:a17:906:2548:: with SMTP id j8mr17562693ejb.140.1604366987069; Mon, 02 Nov 2020 17:29:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604366987; cv=none; d=google.com; s=arc-20160816; b=pMKow6w1W50qjp9pwYqFt8zKNc2vXpjV5yIo60S+f9PCEKoiOLw8+lzhzmoymuU+kq 8tIBGIRuRXyLICh5kMTNDgZD1a0eZ+GPHIsromcOugtqaB63Jwos6Vl8p8YO1QYNQfW7 bOLK4hR0YkmYq6EVsyDJDUgBXMEvSQbp951SJJQmA3eVnc8yfYq+AjQ01W2FoMjXGUeA wSf7cR8fKsvKH6UzvyDP+7MLte/feafNO7k4pSZkX+yrTe6600ZvBVzw1ryQfcGE3QIB QO8AON7tfq/cPHgrEMJIzw4xLdXDsBl0yWb24bZPlgdOFmk70q79RScBV1lkYUxwkbsw PuEw== 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=oGDRJI9+weoTVEC7Ece4ni8XwDrfuqQlJpNlRwYQyHM=; b=BtZeH2SY3YDEC4NpzMvZu8sdiDwB7MRJFgJ9/irzJVapkxZQA4tsenv9zB18pIPK6X Koh3FW0yNAXD6E1/TeVweFjZktxyEbIvcc5jK5MihzQmePXzW+zTL02KJx3ID/JRGWle paMwgfx9l2VvqtbplidxEZRjFiMGZNBkAdNa2jyh9jjDaFXMR4/McPIvc64BG1uOOQKs PceWc9xXrp6un51W1csnBPCIc1ADTNfmJMQta+WspQYX9QXjhYxu1UF1rx/qOtAeDp80 WpvCs+7mKXN/XgH8B1KmauyLIcXa57ZjXAIJIbJ5zZqAd7afgl0bm7W1WPrYLHdKGR3y Rs/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1q9ZFlOF; 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 qu17si3529900ejb.266.2020.11.02.17.29.24; Mon, 02 Nov 2020 17:29:47 -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=1q9ZFlOF; 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 S1727415AbgKCB2L (ORCPT + 99 others); Mon, 2 Nov 2020 20:28:11 -0500 Received: from mail.kernel.org ([198.145.29.99]:60454 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727371AbgKCBSz (ORCPT ); Mon, 2 Nov 2020 20:18:55 -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 454EA223AB; Tue, 3 Nov 2020 01:18:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604366334; bh=8LngFopYzFeGa/jZrFWBu9RFqdYmR0lINC0f9D8B8wk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=1q9ZFlOFJi4wBi5eW8ukiilI+S7twI1WUptnoXQ5zDrx3dMTMvuemnu3KrrCOwTHo cOHNJiepDlBYVDyrv89N5s/uPtUQu37cO17Dl9dsXWsf5OgninJRo38tQ1L4wk8GeV z6gw0IftR21tc0gfXLbqyfXACHjEECpHr7C9WN5w= 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 5.9 10/35] of: Fix reserved-memory overlap detection Date: Mon, 2 Nov 2020 20:18:15 -0500 Message-Id: <20201103011840.182814-10-sashal@kernel.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201103011840.182814-1-sashal@kernel.org> References: <20201103011840.182814-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 46b9371c8a332..6530b8b9160f1 100644 --- a/drivers/of/of_reserved_mem.c +++ b/drivers/of/of_reserved_mem.c @@ -200,6 +200,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; } @@ -217,8 +227,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