On Fri, Nov 29, 2024 at 09:15:12AM +0000, alucerop@xxxxxxx wrote: > From: Alejandro Lucero <alucerop@xxxxxxx> > > While resource_contains checks for IORESOURCE_UNSET flag for the > resources given, if r1 was initialized with 0 size, the function > returns a false positive. This is so because resource start and > end fields are unsigned with end initialised to size - 1 by current > resource macros. > > Make the function to check for the resource size for both resources > since r2 with size 0 should not be considered as valid for the function > purpose. > > Signed-off-by: Alejandro Lucero <alucerop@xxxxxxx> > Suggested-by: Alison Schofield <alison.schofield@xxxxxxxxx> Seems reasonable to me. FWIW, Acked-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> > --- > include/linux/ioport.h | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/include/linux/ioport.h b/include/linux/ioport.h > index 6e9fb667a1c5..6cb8a8494508 100644 > --- a/include/linux/ioport.h > +++ b/include/linux/ioport.h > @@ -264,6 +264,8 @@ static inline unsigned long resource_ext_type(const struct resource *res) > /* True iff r1 completely contains r2 */ > static inline bool resource_contains(const struct resource *r1, const struct resource *r2) > { > + if (!resource_size(r1) || !resource_size(r2)) > + return false; > if (resource_type(r1) != resource_type(r2)) > return false; > if (r1->flags & IORESOURCE_UNSET || r2->flags & IORESOURCE_UNSET) > -- > 2.17.1 >