Hi Dan, Thank you for the patch. On Thu, Aug 04, 2022 at 05:32:39PM +0300, Dan Carpenter wrote: > There are two issues here: > > 1) The "len" variable needs to be checked before the very first write. > Otherwise if omap2_iommu_dump_ctx() with "bytes" less than 32 it is a > buffer overflow. > 2) The snprintf() function returns the number of bytes that *would* have > been copied if there were enough space. But we want to know the > number of bytes which were *actually* copied so use scnprintf() > instead. > > Fixes: bd4396f09a4a ("iommu/omap: Consolidate OMAP IOMMU modules") > Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> > --- > drivers/iommu/omap-iommu-debug.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/iommu/omap-iommu-debug.c b/drivers/iommu/omap-iommu-debug.c > index a99afb5d9011..259f65291d90 100644 > --- a/drivers/iommu/omap-iommu-debug.c > +++ b/drivers/iommu/omap-iommu-debug.c > @@ -32,12 +32,12 @@ static inline bool is_omap_iommu_detached(struct omap_iommu *obj) > ssize_t bytes; \ > const char *str = "%20s: %08x\n"; \ > const int maxcol = 32; \ > - bytes = snprintf(p, maxcol, str, __stringify(name), \ > + if (len < maxcol) \ > + goto out; \ > + bytes = scnprintf(p, maxcol, str, __stringify(name), \ > iommu_read_reg(obj, MMU_##name)); \ > p += bytes; \ > len -= bytes; \ > - if (len < maxcol) \ > - goto out; \ > } while (0) This could would really benefit from being rewritten using a static table of register name and offset and a loop that iterates over it. Still, this is a valid bug fix, so Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > static ssize_t -- Regards, Laurent Pinchart