fs/ext4/super.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
The doc of snprintf() states that "If the return is greater than or equal
to @size, the resulting string is truncated".
So in order to "Check for truncated error codes...", we must check that the
returned value is < 16.
Fixes: ac27a0ec112a ("[PATCH] ext4: initial copy of files from ext3")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
---
fs/ext4/super.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 38217422f938..f58fc7cc6f81 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -941,7 +941,7 @@ const char *ext4_decode_error(struct super_block *sb, int errno,
* NULL. */
if (nbuf) {
/* Check for truncated error codes... */
- if (snprintf(nbuf, 16, "error %d", -errno) >= 0)
+ if (snprintf(nbuf, 16, "error %d", -errno) < 16)
errstr = nbuf;
}
break;
--
2.34.1
On Sat, Sep 09, 2023 at 06:07:02PM +0200, Christophe JAILLET wrote:
> The doc of snprintf() states that "If the return is greater than or equal
> to @size, the resulting string is truncated".
>
> So in order to "Check for truncated error codes...", we must check that the
> returned value is < 16.
>
> Fixes: ac27a0ec112a ("[PATCH] ext4: initial copy of files from ext3")
> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
This patch is not needed. It's fine if snprintf truncates the string,
since it will still be null terminated. This was checking for the
case where snprintf() returns an error, and the comment was
misleading.
Looking that the current implementation of the kernel snprintf, it
will never return a negative number, and nbuf is always passed in from
the callers, so it could be changed to
snprintf(nbuf, 16, "error %d", -errno);
errstr = nbuf;
But what is currently there is certainly valid.
- Ted
© 2016 - 2025 Red Hat, Inc.