* [PATCH] ext4: fix transposition typo in format string
@ 2015-02-20 14:11 Rasmus Villemoes
2015-03-02 9:55 ` Rasmus Villemoes
2015-04-02 20:47 ` Theodore Ts'o
0 siblings, 2 replies; 3+ messages in thread
From: Rasmus Villemoes @ 2015-02-20 14:11 UTC (permalink / raw)
To: Theodore Ts'o, Andreas Dilger
Cc: Rasmus Villemoes, linux-ext4, linux-kernel
According to C99, %*.s means the same as %*.0s, in other words, print
as many spaces as the field width argument says and effectively ignore
the string argument. That is certainly not what was meant here. The
kernel's printf implementation, however, treats it as if the . was not
there, i.e. as %*s. I don't know if de->name is nul-terminated or not,
but in any case I'm guessing the intention was to use de->name_len as
precision instead of field width.
Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
---
If de->name is not guaranteed to be nul-terminated, I suppose this is
even -stable material.
fs/ext4/inline.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
index 4b143febf21f..8b64d715e476 100644
--- a/fs/ext4/inline.c
+++ b/fs/ext4/inline.c
@@ -972,7 +972,7 @@ void ext4_show_inline_dir(struct inode *dir, struct buffer_head *bh,
offset = 0;
while ((void *)de < dlimit) {
de_len = ext4_rec_len_from_disk(de->rec_len, inline_size);
- trace_printk("de: off %u rlen %u name %*.s nlen %u ino %u\n",
+ trace_printk("de: off %u rlen %u name %.*s nlen %u ino %u\n",
offset, de_len, de->name_len, de->name,
de->name_len, le32_to_cpu(de->inode));
if (ext4_check_dir_entry(dir, NULL, de, bh,
--
2.1.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] ext4: fix transposition typo in format string
2015-02-20 14:11 [PATCH] ext4: fix transposition typo in format string Rasmus Villemoes
@ 2015-03-02 9:55 ` Rasmus Villemoes
2015-04-02 20:47 ` Theodore Ts'o
1 sibling, 0 replies; 3+ messages in thread
From: Rasmus Villemoes @ 2015-03-02 9:55 UTC (permalink / raw)
To: Theodore Ts'o; +Cc: Andreas Dilger, linux-ext4, linux-kernel
Ping... (maybe I should have used a more dramatic subject - I do think
this is a real bug, but if not, I'd still like to get an explicit NAK.)
On Fri, Feb 20 2015, Rasmus Villemoes <linux@rasmusvillemoes.dk> wrote:
> According to C99, %*.s means the same as %*.0s, in other words, print
> as many spaces as the field width argument says and effectively ignore
> the string argument. That is certainly not what was meant here. The
> kernel's printf implementation, however, treats it as if the . was not
> there, i.e. as %*s. I don't know if de->name is nul-terminated or not,
> but in any case I'm guessing the intention was to use de->name_len as
> precision instead of field width.
>
> Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
> ---
> If de->name is not guaranteed to be nul-terminated, I suppose this is
> even -stable material.
>
> fs/ext4/inline.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
> index 4b143febf21f..8b64d715e476 100644
> --- a/fs/ext4/inline.c
> +++ b/fs/ext4/inline.c
> @@ -972,7 +972,7 @@ void ext4_show_inline_dir(struct inode *dir, struct buffer_head *bh,
> offset = 0;
> while ((void *)de < dlimit) {
> de_len = ext4_rec_len_from_disk(de->rec_len, inline_size);
> - trace_printk("de: off %u rlen %u name %*.s nlen %u ino %u\n",
> + trace_printk("de: off %u rlen %u name %.*s nlen %u ino %u\n",
> offset, de_len, de->name_len, de->name,
> de->name_len, le32_to_cpu(de->inode));
> if (ext4_check_dir_entry(dir, NULL, de, bh,
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] ext4: fix transposition typo in format string
2015-02-20 14:11 [PATCH] ext4: fix transposition typo in format string Rasmus Villemoes
2015-03-02 9:55 ` Rasmus Villemoes
@ 2015-04-02 20:47 ` Theodore Ts'o
1 sibling, 0 replies; 3+ messages in thread
From: Theodore Ts'o @ 2015-04-02 20:47 UTC (permalink / raw)
To: Rasmus Villemoes; +Cc: Andreas Dilger, linux-ext4, linux-kernel
On Fri, Feb 20, 2015 at 03:11:35PM +0100, Rasmus Villemoes wrote:
> According to C99, %*.s means the same as %*.0s, in other words, print
> as many spaces as the field width argument says and effectively ignore
> the string argument. That is certainly not what was meant here. The
> kernel's printf implementation, however, treats it as if the . was not
> there, i.e. as %*s. I don't know if de->name is nul-terminated or not,
> but in any case I'm guessing the intention was to use de->name_len as
> precision instead of field width.
Applied, sorry for the delay.
(Note: the code is explicitly #ifdef'ed out so the only way the bug
would show up is if a developer explicitly modified the source to
#define INLINE_DIR_DEBUG, so it's not -stable material.)
- Ted
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-04-02 20:47 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-20 14:11 [PATCH] ext4: fix transposition typo in format string Rasmus Villemoes
2015-03-02 9:55 ` Rasmus Villemoes
2015-04-02 20:47 ` Theodore Ts'o
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).