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

Martin Liška posted 1 patch 4 years, 5 months ago
tools/objtool/check.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] objtool: Fix -Wformat-truncation seen with GCC 12.
Posted by Martin Liška 4 years, 5 months ago
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 <mliska@suse.cz>
---
  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

RE: [PATCH] objtool: Fix -Wformat-truncation seen with GCC 12.
Posted by David Laight 4 years, 5 months ago
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)
Re: [PATCH] objtool: Fix -Wformat-truncation seen with GCC 12.
Posted by Miroslav Benes 4 years, 5 months ago
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 <mliska@suse.cz>
> ---
>  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/20211223182707.42590-1-kilobyte@angband.pl/

Thanks

Miroslav