On 9/5/23 04:54, Christophe JAILLET wrote: > snprintf() returns the "number of characters which *would* be generated for > the given input", not the size *really* generated. > > In order to avoid too large values for 'o' (and potential negative values > for "sizeof(linebuf) o") use scnprintf() instead of snprintf(). > > Note that given the "w < 4" in the for loop, the buffer can NOT > overflow, but using the *right* function is always better. > > Signed-off-by: Christophe JAILLET <christophe.jaillet@xxxxxxxxxx> Doesn't this need Fixes and CC stable tags ? > --- > drivers/ata/sata_mv.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c > index d105db5c7d81..45e48d653c60 100644 > --- a/drivers/ata/sata_mv.c > +++ b/drivers/ata/sata_mv.c > @@ -1255,8 +1255,8 @@ static void mv_dump_mem(struct device *dev, void __iomem *start, unsigned bytes) > > for (b = 0; b < bytes; ) { > for (w = 0, o = 0; b < bytes && w < 4; w++) { > - o += snprintf(linebuf + o, sizeof(linebuf) - o, > - "%08x ", readl(start + b)); > + o += scnprintf(linebuf + o, sizeof(linebuf) - o, > + "%08x ", readl(start + b)); > b += sizeof(u32); > } > dev_dbg(dev, "%s: %p: %s\n", -- Damien Le Moal Western Digital Research