On Wed, Jan 8, 2025 at 8:04 AM Basharath Hussain Khaja <bashar...@couthit.com> wrote: > > Hi, > > >> Thomas Weißschuh <thomas.weisssc...@linutronix.de> writes: > >> > The members "start" and "end" of struct resource are of type > >> > "resource_size_t" which can be 32bit wide. > >> > Values read from OF however are always 64bit wide. > >> > > >> > Refactor the diff overflow checks into a helper function. > >> > Also extend the checks to validate each calculation step. > >> > > >> > Signed-off-by: Thomas Weißschuh <thomas.weisssc...@linutronix.de> > >> > --- > >> > drivers/of/address.c | 45 ++++++++++++++++++++++++++------------------- > >> > 1 file changed, 26 insertions(+), 19 deletions(-) > >> > > >> > diff --git a/drivers/of/address.c b/drivers/of/address.c > >> > index 7e59283a4472..df854bb427ce 100644 > >> > --- a/drivers/of/address.c > >> > +++ b/drivers/of/address.c > >> > @@ -198,6 +198,25 @@ static u64 of_bus_pci_map(__be32 *addr, const > >> > __be32 *range, int na, int ns, > >> > > >> > #endif /* CONFIG_PCI */ > >> > > >> > +static int __of_address_resource_bounds(struct resource *r, u64 start, > >> > u64 size) > >> > +{ > >> > + u64 end = start; > >> > + > >> > + if (overflows_type(start, r->start)) > >> > + return -EOVERFLOW; > >> > + if (size == 0) > >> > + return -EOVERFLOW; > >> > + if (check_add_overflow(end, size - 1, &end)) > >> > + return -EOVERFLOW; > >> > + if (overflows_type(end, r->end)) > >> > + return -EOVERFLOW; > >> > >> This breaks PCI on powerpc qemu. Part of the PCI probe reads a resource > >> that's zero sized, which used to succeed but now fails due to the size > >> check above. > >> > >> The diff below fixes it for me. > > > > I fixed it up with your change. > > > This commit is breaking Ethernet functionality on the TI AM57xx platform due > to zero byte SRAM block size allocation during initialization. Prior to this > patch, zero byte block sizes were handled properly.
What driver and where exactly? Rob