diff mbox series

ext4: Fix a test in ext4_decode_error()

Message ID 2c0edffd8557807c6cd6d55111482c5cad7c8f2f.1694275603.git.christophe.jaillet@wanadoo.fr
State Rejected
Headers show
Series ext4: Fix a test in ext4_decode_error() | expand

Commit Message

Christophe JAILLET Sept. 9, 2023, 4:07 p.m. UTC
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(-)

Comments

Theodore Ts'o Sept. 12, 2023, 1:49 a.m. UTC | #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
diff mbox series

Patch

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;