diff mbox series

bpf: clean up unnecessary conditional judgments

Message ID 20211222131005.1380289-1-liu.yun@linux.dev (mailing list archive)
State Rejected
Delegated to: BPF
Headers show
Series bpf: clean up unnecessary conditional judgments | expand

Checks

Context Check Description
bpf/vmtest-bpf fail VM_Test
bpf/vmtest-bpf-PR fail PR summary
netdev/tree_selection success Guessing tree name failed - patch did not apply

Commit Message

Jackie Liu Dec. 22, 2021, 1:10 p.m. UTC
From: Jackie Liu <liuyun01@kylinos.cn>

s32 is always true regardless of the values of its operands. let's
cleanup.

Fixes: e572ff80f05c ("bpf: Make 32->64 bounds propagation slightly more	robust")
Reported-by: k2ci <kernel-bot@kylinos.cn>
Signed-off-by: Jackie Liu <liuyun01@kylinos.cn>
---
 kernel/bpf/verifier.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

Comments

Yonghong Song Dec. 22, 2021, 4:04 p.m. UTC | #1
On 12/22/21 5:10 AM, Jackie Liu wrote:
> From: Jackie Liu <liuyun01@kylinos.cn>
> 
> s32 is always true regardless of the values of its operands. let's
> cleanup.
> 
> Fixes: e572ff80f05c ("bpf: Make 32->64 bounds propagation slightly more	robust")
> Reported-by: k2ci <kernel-bot@kylinos.cn>
> Signed-off-by: Jackie Liu <liuyun01@kylinos.cn>
> ---
>   kernel/bpf/verifier.c | 8 +-------
>   1 file changed, 1 insertion(+), 7 deletions(-)
> 
> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
> index b532f1058d35..43812ee58304 100644
> --- a/kernel/bpf/verifier.c
> +++ b/kernel/bpf/verifier.c
> @@ -1366,11 +1366,6 @@ static void __reg_bound_offset(struct bpf_reg_state *reg)
>   	reg->var_off = tnum_or(tnum_clear_subreg(var64_off), var32_off);
>   }
>   
> -static bool __reg32_bound_s64(s32 a)
> -{
> -	return a >= 0 && a <= S32_MAX;
> -}

The following bpf tree commit triggered the above change:

commit e572ff80f05c33cd0cb4860f864f5c9c044280b6
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Wed Dec 15 22:28:48 2021 +0000

     bpf: Make 32->64 bounds propagation slightly more robust

There is no need to fix bpf tree since as this patch just a cleanup
patch and there is no functionality change.

Maybe wait for the above patch available in bpf-next and submit
this patch again? Daniel, do you have any suggestions for this patch?

> -
>   static void __reg_assign_32_into_64(struct bpf_reg_state *reg)
>   {
>   	reg->umin_value = reg->u32_min_value;
> @@ -1380,8 +1375,7 @@ static void __reg_assign_32_into_64(struct bpf_reg_state *reg)
>   	 * be positive otherwise set to worse case bounds and refine later
>   	 * from tnum.
>   	 */
> -	if (__reg32_bound_s64(reg->s32_min_value) &&
> -	    __reg32_bound_s64(reg->s32_max_value)) {
> +	if (reg->s32_min_value >= 0 && reg->s32_max_value >= 0) {
>   		reg->smin_value = reg->s32_min_value;
>   		reg->smax_value = reg->s32_max_value;
>   	} else {
Alexei Starovoitov Dec. 23, 2021, 4:43 a.m. UTC | #2
On Wed, Dec 22, 2021 at 5:10 AM Jackie Liu <liu.yun@linux.dev> wrote:
>
> From: Jackie Liu <liuyun01@kylinos.cn>
>
> s32 is always true regardless of the values of its operands. let's
> cleanup.
>
> Fixes: e572ff80f05c ("bpf: Make 32->64 bounds propagation slightly more robust")
> Reported-by: k2ci <kernel-bot@kylinos.cn>
> Signed-off-by: Jackie Liu <liuyun01@kylinos.cn>
> ---
>  kernel/bpf/verifier.c | 8 +-------
>  1 file changed, 1 insertion(+), 7 deletions(-)
>
> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
> index b532f1058d35..43812ee58304 100644
> --- a/kernel/bpf/verifier.c
> +++ b/kernel/bpf/verifier.c
> @@ -1366,11 +1366,6 @@ static void __reg_bound_offset(struct bpf_reg_state *reg)
>         reg->var_off = tnum_or(tnum_clear_subreg(var64_off), var32_off);
>  }
>
> -static bool __reg32_bound_s64(s32 a)
> -{
> -       return a >= 0 && a <= S32_MAX;
> -}
> -

The code is the best documentation.
Here it clearly describes the intent.
Please ignore compiler warnings.
diff mbox series

Patch

diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index b532f1058d35..43812ee58304 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -1366,11 +1366,6 @@  static void __reg_bound_offset(struct bpf_reg_state *reg)
 	reg->var_off = tnum_or(tnum_clear_subreg(var64_off), var32_off);
 }
 
-static bool __reg32_bound_s64(s32 a)
-{
-	return a >= 0 && a <= S32_MAX;
-}
-
 static void __reg_assign_32_into_64(struct bpf_reg_state *reg)
 {
 	reg->umin_value = reg->u32_min_value;
@@ -1380,8 +1375,7 @@  static void __reg_assign_32_into_64(struct bpf_reg_state *reg)
 	 * be positive otherwise set to worse case bounds and refine later
 	 * from tnum.
 	 */
-	if (__reg32_bound_s64(reg->s32_min_value) &&
-	    __reg32_bound_s64(reg->s32_max_value)) {
+	if (reg->s32_min_value >= 0 && reg->s32_max_value >= 0) {
 		reg->smin_value = reg->s32_min_value;
 		reg->smax_value = reg->s32_max_value;
 	} else {