From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@barebox.org>,
Sohaib Mohamed <sohaib.amhmd@gmail.com>,
Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [PATCH v2025.09.y 11/49] range: fix corner cases when exclusive end is zero
Date: Fri, 19 Dec 2025 10:20:47 +0100 [thread overview]
Message-ID: <20251219101453.2806980-12-a.fatoum@pengutronix.de> (raw)
In-Reply-To: <20251219101453.2806980-1-a.fatoum@pengutronix.de>
From: Ahmad Fatoum <a.fatoum@barebox.org>
Unlike inclusive ranges, exclusive ranges can be empty and
region_overlap_end_exclusive() goes beyond that and checks that ranges
are neither empty nor does the end precede the start.
This is problematic for a range that stretches to the maximum value of a
type. Exclusive end in that case would be 0 and 0 comes before all
non-zero numbers, so the region_overlap_end_exclusive() would always
return false.
Fix this by normalizing end to be inclusive first thing in the function.
And for extra safety, enforce that the function may only be called with
arguments that are all of the same unsigned type.
This resolves a MMU hang on an STM32MP1 board with 1G RAM that had
memory stretching from 0xc00000000 to 0xffffffff inclusive as
remap_range_end_sans_text() would not detect the text area overlap and
then all of RAM, including where barebox is running from would be mapped
non-executable.
Fixes: 768fdb36f30e ("partition: define new region_overlap_end_exclusive helper")
Reported-by: Sohaib Mohamed <sohaib.amhmd@gmail.com>
Signed-off-by: Ahmad Fatoum <a.fatoum@barebox.org>
Link: https://lore.barebox.org/20251101105542.3830943-1-a.fatoum@barebox.org
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
(cherry picked from commit 3e2d06afabe166e575c66e3d9faa2070933ebb1c)
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
include/range.h | 31 +++++++++++++++++++++----------
1 file changed, 21 insertions(+), 10 deletions(-)
diff --git a/include/range.h b/include/range.h
index bb41dc78ac43..b5dc5cdb4d39 100644
--- a/include/range.h
+++ b/include/range.h
@@ -3,6 +3,8 @@
#define _RANGE_H__
#include <linux/types.h>
+#include <linux/compiler.h>
+#include <linux/build_bug.h>
/**
* region_overlap_end_inclusive - check whether a pair of [start, end] ranges overlap
@@ -29,17 +31,26 @@ static inline bool region_overlap_end_inclusive(u64 starta, u64 enda,
* @enda: end of the first range (exclusive)
* @startb: start of the second range
* @endb: end of the second range (exclusive)
+ *
+ * NOTE: end of zero is always interpreted to mean including the maximum
+ * value of the type.
*/
-static inline bool region_overlap_end_exclusive(u64 starta, u64 enda,
- u64 startb, u64 endb)
-{
- /* Empty ranges don't overlap */
- if (starta >= enda || startb >= endb)
- return false;
-
- return region_overlap_end_inclusive(starta, enda - 1,
- startb, endb - 1);
-}
+#define region_overlap_end_exclusive(starta, enda, startb, endb) \
+({ \
+ u64 __starta = (starta), __enda = (enda) - 1; \
+ u64 __startb = (startb), __endb = (endb) - 1; \
+ \
+ static_assert(__same_type((starta), (enda))); \
+ static_assert(__same_type((enda), (startb))); \
+ static_assert(__same_type((startb), (endb))); \
+ static_assert(((typeof(endb))-1) > 0); \
+ \
+ /* Empty ranges don't overlap */ \
+ (__starta <= __enda && __startb <= __endb) \
+ ? region_overlap_end_inclusive(__starta, __enda, \
+ __startb, __endb) \
+ : false; \
+})
/**
--
2.47.3
next prev parent reply other threads:[~2025-12-19 10:38 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-19 9:20 [PATCH v2025.09.y 00/49] Backports for v2025.09.1 Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 01/49] mci: sdhci: am654: Use sdhci_wait_idle() Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 02/49] clk: rockchip: rk3588: Add PLL rate for 1500 MHz Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 03/49] ARM: i.MX6: configure AIPS registers only if trusted Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 04/49] ARM: dts: rockchip: Set initial CPU frequencies for RK3588 Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 05/49] ARM: dts: rockchip: Set CPLL frequency " Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 06/49] scripts: rockchip: rkimage: reinstate OpenSSL 1.1 compatibility Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 07/49] ARM: dts: am62lx: fix secondary core startup Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 08/49] ARM: i.MX: Fix the iomux DSE defines for imx8mp Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 09/49] virtio: Stop spamming debug buffer Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 10/49] clk: clk_set_parent: skip any operation if current and new parents are equal Ahmad Fatoum
2025-12-19 9:20 ` Ahmad Fatoum [this message]
2025-12-19 9:20 ` [PATCH v2025.09.y 12/49] mtd: peb: mtd_peb_read(): move error message to caller Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 13/49] state: guard against empty variable set in DT Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 14/49] fs: nfs: drop PROG_NFS special casing Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 15/49] fs: nfs: do not read past packets Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 16/49] ARM: i.MX8M: romapi: skip zero_page_access() if MMU is disabled Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 17/49] ARM: mmu: have zero_page_remappable() check MMU status Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 18/49] ARM: mmu: fix hang when reserved memory at start of RAM Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 19/49] clk: rockchip rk3588: configure CPLL in driver Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 20/49] poller: activate POLLER_WARN_OVERTIME only on third strike Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 21/49] bootm: fix boot override inheritance Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 22/49] commands: truncate: fix multiple file handling with relative sizes Ahmad Fatoum
2025-12-19 9:20 ` [PATCH v2025.09.y 23/49] fs: qemu_fw_cfg: make use of the automount Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 24/49] fs: qemu_fw_cfg: handle non-existent opt/org.barebox.env key gracefully Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 25/49] boards: qemu-virt: drop fitimage-pubkey.dts Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 26/49] pci: pci-tegra: fix null pointer assignation Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 27/49] sandbox: fix race with .old_version removal Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 28/49] net: designware-imx: don't set txclk when mode is (r)mii Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 29/49] mci: am654-sdhci: correctly configure SLOTTYPE_EMBEDDED Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 30/49] scripts: imx: Makefile.mingw64: add _GNU_SOURCE Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 31/49] scripts: imx: add pread implementation for mingw target Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 32/49] net: arp: collect context into new struct pending_arp Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 33/49] net: reset pending ARP state when request is done Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 34/49] test: populate qemu_bin, even if missing features Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 35/49] ARM: i.MX8M: Fix the RAM size calculation for DDR3 Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 36/49] test: exit directly when invoking QEMU states on non-QEMU targets Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 37/49] tlv: register_device() error handling Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 38/49] fs: fix automount when last filename component is a automountpoint Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 39/49] ARM: K3: am62l: don't put sysfwdata into 1st stage image Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 40/49] ARM: k3: make some firmware files SoC specific Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 41/49] ARM: k3: am62l: Add dedicated config option for OP-TEE Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 42/49] ARM: k3: am62l: fix dependencies on k3img input files Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 43/49] lib: base64: Fix out-of-bounds potential by respecting dst_len Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 44/49] param: make setting a parameter to the same string value a no-op Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 45/49] i2c: omap: fix probe on am335x Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 46/49] net: 9p: fix variable name in BAREBOX_MAGICVAR Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 47/49] pmdomain: fix collision in names when registering Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 48/49] i2c: implement i2c_unregister_device() Ahmad Fatoum
2025-12-19 9:21 ` [PATCH v2025.09.y 49/49] eeprom: at24: unregister devices in error path Ahmad Fatoum
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251219101453.2806980-12-a.fatoum@pengutronix.de \
--to=a.fatoum@pengutronix.de \
--cc=a.fatoum@barebox.org \
--cc=barebox@lists.infradead.org \
--cc=sohaib.amhmd@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox