ext4: fix transposition typo in format string
authorRasmus Villemoes <linux@rasmusvillemoes.dk>
Thu, 2 Apr 2015 20:42:43 +0000 (16:42 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 2 Apr 2015 20:42:43 +0000 (16:42 -0400)
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.

[ Note: this is debugging code which is commented out, so this is not
  security issue; a developer would have to explicitly enable
  INLINE_DIR_DEBUG before this would be an issue. ]

Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/inline.c

index 4b143febf21f98d782892279b11731a50af5f359..8b64d715e476091b103a1df8d037d0cea761ff24 100644 (file)
@@ -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,