On Wed, May 27, 2026 at 11:29:11AM +0800, Wandun Chen wrote: > From: Wandun Chen <[email protected]> > > Prepare for storing /memreserve/ entries in the reserved_mem array. > alloc_reserved_mem_array is skipped if the device tree lacks a > /reserved-memory node, pointer 'reserved_mem' continues to reference > the reserved_mem_array which lives in __initdata, storing > /memreserve/ entries into reserved_mem_array would result in metadata > loss, and an out-of-bounds memory access will occur if the device > tree contains more than MAX_RESERVED_REGIONS /memreserve/ entries. > > So split alloc_reserved_mem_array() from fdt_scan_reserved_mem_late(), > and call alloc_reserved_mem_array() whether or not there is a > /reserved-memory node. > > No functional change. > The actual /memreserve/ population is added in a follow-up patch. > > Signed-off-by: Wandun Chen <[email protected]> > --- > drivers/of/fdt.c | 7 +++++-- > drivers/of/of_private.h | 1 + > drivers/of/of_reserved_mem.c | 6 +----- > 3 files changed, 7 insertions(+), 7 deletions(-) > > diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c > index 82f7327c59ea..83a2a474831e 100644 > --- a/drivers/of/fdt.c > +++ b/drivers/of/fdt.c > @@ -1284,8 +1284,11 @@ void __init unflatten_device_tree(void) > { > void *fdt = initial_boot_params; > > - /* Save the statically-placed regions in the reserved_mem array */ > - fdt_scan_reserved_mem_late(); > + /* Attempt dynamic allocation of a new reserved_mem array */ > + if (fdt && alloc_reserved_mem_array()) { > + /* Save the statically-placed regions in the reserved_mem array > */ > + fdt_scan_reserved_mem_late();
Can we make this just: alloc_reserved_mem_array(); fdt_scan_reserved_mem_late(); We already check !fdt in fdt_scan_reserved_mem_late(). Rob
