2022-01-12 09:29:30

by Martin Liška

[permalink] [raw]
Subject: [PATCH] objtool: Fix -Wformat-truncation seen with GCC 12.

The patch fixes the following warning that seems reasonable:

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

Signed-off-by: Martin Liška <[email protected]>
---
tools/objtool/check.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/objtool/check.c b/tools/objtool/check.c
index a9a1f7259d62..9555f7ad57cd 100644
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -2852,7 +2852,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[20];
struct reloc *rel;
int idx;

--
2.34.1



2022-01-12 09:38:44

by David Laight

[permalink] [raw]
Subject: RE: [PATCH] objtool: Fix -Wformat-truncation seen with GCC 12.

From: Martin Liška
> Sent: 12 January 2022 09:29
>
> The patch fixes the following warning that seems reasonable:
>
> check.c:2836:58: error: '%d' directive output may be truncated writing between 1 and 10 bytes into a
> region of size 9 [-Werror=format-truncation=]
> 2836 | snprintf(pvname, sizeof(pvname), "pv_ops[%d]", idx);

Looks pretty unreasonable to me :-)
The domain of 'idx' is much smaller than that of 'int'.
Indeed the overflow can only actually happen if it is negative.
By then all sorts of other things will have gone wrong.

OTOH changing 16 to 60 is one way to STFU.

David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

2022-01-12 09:41:35

by Miroslav Benes

[permalink] [raw]
Subject: Re: [PATCH] objtool: Fix -Wformat-truncation seen with GCC 12.

Hi,

On Wed, 12 Jan 2022, Martin Liška wrote:

> The patch fixes the following warning that seems reasonable:
>
> check.c:2836:58: error: '%d' directive output may be truncated writing between
> 1 and 10 bytes into a region of size 9 [-Werror=format-truncation=]
> 2836 | snprintf(pvname, sizeof(pvname), "pv_ops[%d]", idx);
>
> Signed-off-by: Martin Liška <[email protected]>
> ---
> tools/objtool/check.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/objtool/check.c b/tools/objtool/check.c
> index a9a1f7259d62..9555f7ad57cd 100644
> --- a/tools/objtool/check.c
> +++ b/tools/objtool/check.c
> @@ -2852,7 +2852,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[20];
> struct reloc *rel;
> int idx;

a similar patch has already been posted (not merged yet though).

https://lore.kernel.org/all/[email protected]/

Thanks

Miroslav