objtool: check: give big enough buffer for pv_ops
authorSergei Trofimovich <slyich@gmail.com>
Thu, 20 Jan 2022 23:37:48 +0000 (23:37 +0000)
committerSalvatore Bonaccorso <carnil@debian.org>
Wed, 9 Feb 2022 08:35:55 +0000 (08:35 +0000)
Origin: https://lore.kernel.org/lkml/20220120233748.2062559-1-slyich@gmail.com/
Bug-Debian: https://bugs.debian.org/1004495

On gcc-12 build fails flagging possible buffer overflow:

    check.c: In function 'validate_call':
    check.c:2865:58: error: '%d' directive output may be truncated writing between 1 and 10 bytes into a region of size 9 [-Werror=format-truncation=]
     2865 |                 snprintf(pvname, sizeof(pvname), "pv_ops[%d]", idx);
          |                                                          ^~

I think it's a valid warning:

    static char pvname[16];
    int idx;
    ...
    idx = (rel->addend / sizeof(void *));
    snprintf(pvname, sizeof(pvname), "pv_ops[%d]", idx);

we have only 7 chars for %d while it could take up to 9.

CC: Josh Poimboeuf <jpoimboe@redhat.com>
CC: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Sergei Trofimovich <slyich@gmail.com>
Gbp-Pq: Topic bugfix/all
Gbp-Pq: Name objtool-check-give-big-enough-buffer-for-pv_ops.patch

tools/objtool/check.c

index 21735829b860cac3e197a0564a14a992b12e2289..a4883a5e4eb156372d643a62bc8c6eeeeb23a4f8 100644 (file)
@@ -2823,7 +2823,7 @@ static inline bool func_uaccess_safe(struct symbol *func)
 
 static inline const char *call_dest_name(struct instruction *insn)
 {
-       static char pvname[16];
+       static char pvname[32];
        struct reloc *rel;
        int idx;