All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cupertino Miranda <cupertino.miranda@oracle.com>
To: Eduard Zingerman <eddyz87@gmail.com>
Cc: bpf@vger.kernel.org, Yonghong Song <yonghong.song@linux.dev>,
	Alexei Starovoitov <alexei.starovoitov@gmail.com>,
	David Faust <david.faust@oracle.com>,
	"Jose Marchesi" <jose.marchesi@oracle.com>,
	Elena Zannoni <elena.zannoni@oracle.com>,
	Andrii Nakryiko <andrii.nakryiko@gmail.com>
Subject: Re: [PATCH bpf-next v4 2/7] bpf/verifier: refactor checks for range computation
Date: Tue, 30 Apr 2024 08:17:42 +0100	[thread overview]
Message-ID: <87y18vl3op.fsf@oracle.com> (raw)
In-Reply-To: <65e3b41c78870a563136109e26ab84cd880154c5.camel@gmail.com>


Eduard Zingerman writes:

> [...]
>
>> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
>> index 6fe641c8ae33..1777ab00068b 100644
>> --- a/kernel/bpf/verifier.c
>> +++ b/kernel/bpf/verifier.c
>> @@ -13695,6 +13695,77 @@ static void scalar_min_max_arsh(struct bpf_reg_state *dst_reg,
>>  	__update_reg_bounds(dst_reg);
>>  }
>>
>> +static bool is_const_reg_and_valid(const struct bpf_reg_state *reg, bool alu32,
>> +				   bool *valid)
>> +{
>> +	s64 smin_val = reg->smin_value;
>> +	s64 smax_val = reg->smax_value;
>> +	u64 umin_val = reg->umin_value;
>> +	u64 umax_val = reg->umax_value;
>> +	s32 s32_min_val = reg->s32_min_value;
>> +	s32 s32_max_val = reg->s32_max_value;
>> +	u32 u32_min_val = reg->u32_min_value;
>> +	u32 u32_max_val = reg->u32_max_value;
>> +	bool is_const = alu32 ? tnum_subreg_is_const(reg->var_off) :
>> +				tnum_is_const(reg->var_off);
>> +
>
> Nit:
> Sorry for missing this earlier, should we initialize 'valid' here? e.g.:
>
> 	*valid = true;
>
> I understand that it is initialized upper in the stack,
> but setting it here seems better.
>

With the last patch and the suggestions of Andrii this code gets
removed.
Should we we keep having this small changes? :-)

Also the function was left like this on purpose since the original idea
was that it could be used multiple times for different registers and only
verified once, after calling for both src and dst.
It was in the context to verify that either the src or dst in MUL was a
const. That was further relaxed and aagain with the last patch it
removes the argument completelly.

Hope that it is Ok.


>> +	if (alu32) {
>> +		if ((is_const &&
>> +		     (s32_min_val != s32_max_val || u32_min_val != u32_max_val)) ||
>> +		      s32_min_val > s32_max_val || u32_min_val > u32_max_val)
>> +			*valid = false;
>> +	} else {
>> +		if ((is_const &&
>> +		     (smin_val != smax_val || umin_val != umax_val)) ||
>> +		    smin_val > smax_val || umin_val > umax_val)
>> +			*valid = false;
>> +	}
>> +
>> +	return is_const;
>> +}
>
> [...]

  reply	other threads:[~2024-04-30  7:17 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-29 21:22 [PATCH bpf-next v4 0/7] bpf/verifier: range computation improvements Cupertino Miranda
2024-04-29 21:22 ` [PATCH bpf-next v4 1/7] bpf/verifier: replace calls to mark_reg_unknown Cupertino Miranda
2024-04-29 21:22 ` [PATCH bpf-next v4 2/7] bpf/verifier: refactor checks for range computation Cupertino Miranda
2024-04-29 23:18   ` Eduard Zingerman
2024-04-30  7:17     ` Cupertino Miranda [this message]
2024-04-30 14:52       ` Alexei Starovoitov
2024-04-29 21:22 ` [PATCH bpf-next v4 3/7] bpf/verifier: improve XOR and OR " Cupertino Miranda
2024-04-29 21:22 ` [PATCH bpf-next v4 4/7] selftests/bpf: XOR and OR range computation tests Cupertino Miranda
2024-04-29 21:22 ` [PATCH bpf-next v4 5/7] bpf/verifier: relax MUL range computation check Cupertino Miranda
2024-04-29 21:22 ` [PATCH bpf-next v4 6/7] selftests/bpf: MUL range computation tests Cupertino Miranda
2024-04-29 21:22 ` [PATCH bpf-next v4 7/7] bpf/verifier: improve code after range computation recent changes Cupertino Miranda
2024-04-29 23:16   ` Eduard Zingerman
2024-04-29 23:29     ` Eduard Zingerman
2024-04-30 16:48       ` Eduard Zingerman
2024-05-03 14:14 ` [PATCH bpf-next v4 0/7] bpf/verifier: range computation improvements Cupertino Miranda
2024-05-03 16:20   ` Alexei Starovoitov
2024-05-03 16:42     ` Cupertino Miranda
2024-05-03 18:18       ` Eduard Zingerman
2024-05-03 19:33         ` Cupertino Miranda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y18vl3op.fsf@oracle.com \
    --to=cupertino.miranda@oracle.com \
    --cc=alexei.starovoitov@gmail.com \
    --cc=andrii.nakryiko@gmail.com \
    --cc=bpf@vger.kernel.org \
    --cc=david.faust@oracle.com \
    --cc=eddyz87@gmail.com \
    --cc=elena.zannoni@oracle.com \
    --cc=jose.marchesi@oracle.com \
    --cc=yonghong.song@linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.