[PATCH] bpftool: Fix incorrect format specifier for var

Luo Yifan posted 1 patch 1 year, 1 month ago
tools/bpf/bpftool/btf.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] bpftool: Fix incorrect format specifier for var
Posted by Luo Yifan 1 year, 1 month ago
In cases where the SIGNED condition is met, the variable var is still
used as an unsigned long long. Therefore, the %llu format specifier
should be used to avoid incorrect data print. This patch fixes it.

Signed-off-by: Luo Yifan <luoyifan@cmss.chinamobile.com>
---
 tools/bpf/bpftool/btf.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/bpf/bpftool/btf.c b/tools/bpf/bpftool/btf.c
index 7d2af1ff3..ff58ff85e 100644
--- a/tools/bpf/bpftool/btf.c
+++ b/tools/bpf/bpftool/btf.c
@@ -283,7 +283,7 @@ static int dump_btf_type(const struct btf *btf, __u32 id,
 				jsonw_end_object(w);
 			} else {
 				if (btf_kflag(t))
-					printf("\n\t'%s' val=%lldLL", name,
+					printf("\n\t'%s' val=%lluLL", name,
 					       (unsigned long long)val);
 				else
 					printf("\n\t'%s' val=%lluULL", name,
-- 
2.27.0
Re: [PATCH] bpftool: Fix incorrect format specifier for var
Posted by Andrii Nakryiko 1 year, 1 month ago
On Sun, Nov 10, 2024 at 6:48 PM Luo Yifan <luoyifan@cmss.chinamobile.com> wrote:
>
> In cases where the SIGNED condition is met, the variable var is still
> used as an unsigned long long. Therefore, the %llu format specifier
> should be used to avoid incorrect data print. This patch fixes it.
>
> Signed-off-by: Luo Yifan <luoyifan@cmss.chinamobile.com>
> ---
>  tools/bpf/bpftool/btf.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/bpf/bpftool/btf.c b/tools/bpf/bpftool/btf.c
> index 7d2af1ff3..ff58ff85e 100644
> --- a/tools/bpf/bpftool/btf.c
> +++ b/tools/bpf/bpftool/btf.c
> @@ -283,7 +283,7 @@ static int dump_btf_type(const struct btf *btf, __u32 id,
>                                 jsonw_end_object(w);
>                         } else {
>                                 if (btf_kflag(t))
> -                                       printf("\n\t'%s' val=%lldLL", name,
> +                                       printf("\n\t'%s' val=%lluLL", name,
>                                                (unsigned long long)val);

the fix should be casting to (long long) instead

pw-bot: cr

>                                 else
>                                         printf("\n\t'%s' val=%lluULL", name,
> --
> 2.27.0
>
>
>
[PATCH] bpftool: Cast variable `var` to long long
Posted by Luo Yifan 1 year, 1 month ago
When the SIGNED condition is met, the variable `var` should be cast to
`long long` instead of `unsigned long long`.

Signed-off-by: Luo Yifan <luoyifan@cmss.chinamobile.com>
---
 tools/bpf/bpftool/btf.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/bpf/bpftool/btf.c b/tools/bpf/bpftool/btf.c
index 547c1ccdc..d005e4fd6 100644
--- a/tools/bpf/bpftool/btf.c
+++ b/tools/bpf/bpftool/btf.c
@@ -289,7 +289,7 @@ static int dump_btf_type(const struct btf *btf, __u32 id,
 			} else {
 				if (btf_kflag(t))
 					printf("\n\t'%s' val=%lldLL", name,
-					       (unsigned long long)val);
+					       (long long)val);
 				else
 					printf("\n\t'%s' val=%lluULL", name,
 					       (unsigned long long)val);
-- 
2.27.0
Re: [PATCH] bpftool: Cast variable `var` to long long
Posted by Quentin Monnet 1 year, 1 month ago
2024-11-12 15:37 UTC+0800 ~ Luo Yifan <luoyifan@cmss.chinamobile.com>
> When the SIGNED condition is met, the variable `var` should be cast to
> `long long` instead of `unsigned long long`.
> 
> Signed-off-by: Luo Yifan <luoyifan@cmss.chinamobile.com>

Looks good this time, thank you!

Reviewed-by: Quentin Monnet <qmo@kernel.org>
Re: [PATCH] bpftool: Fix incorrect format specifier for var
Posted by Quentin Monnet 1 year, 1 month ago
2024-11-11 10:48 UTC+0800 ~ Luo Yifan <luoyifan@cmss.chinamobile.com>
> In cases where the SIGNED condition is met, the variable var is still
> used as an unsigned long long. Therefore, the %llu format specifier
> should be used to avoid incorrect data print. This patch fixes it.
> 
> Signed-off-by: Luo Yifan <luoyifan@cmss.chinamobile.com>
> ---
>  tools/bpf/bpftool/btf.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/bpf/bpftool/btf.c b/tools/bpf/bpftool/btf.c
> index 7d2af1ff3..ff58ff85e 100644
> --- a/tools/bpf/bpftool/btf.c
> +++ b/tools/bpf/bpftool/btf.c
> @@ -283,7 +283,7 @@ static int dump_btf_type(const struct btf *btf, __u32 id,
>  				jsonw_end_object(w);
>  			} else {
>  				if (btf_kflag(t))
> -					printf("\n\t'%s' val=%lldLL", name,
> +					printf("\n\t'%s' val=%lluLL", name,
>  					       (unsigned long long)val);
>  				else
>  					printf("\n\t'%s' val=%lluULL", name,


Hi, I don't think your change is correct, it seems to me that we do want
to make the distinction between the signed and unsigned version here (as
for all the other enum cases in the function). What are you trying to
address, did you find a bug in the output or a warning during compilation?

Quentin
Re: [PATCH] bpftool: Fix incorrect format specifier for var
Posted by Luo Yifan 1 year, 1 month ago
Hello, this is not a bug, but a minor change to eliminate a static checker warning. Since the var parameter has been cast to unsigned long long, the corresponding format specifier should be %llu instead of %lld.