From: Kui-Feng Lee <sinquersw@gmail.com>
To: Eduard Zingerman <eddyz87@gmail.com>,
Kui-Feng Lee <thinker.li@gmail.com>,
bpf@vger.kernel.org, ast@kernel.org, martin.lau@linux.dev,
song@kernel.org, kernel-team@meta.com, andrii@kernel.org
Cc: kuifeng@meta.com
Subject: Re: [PATCH bpf-next 07/11] bpf: check_map_access() with the knowledge of arrays.
Date: Fri, 12 Apr 2024 09:32:27 -0700 [thread overview]
Message-ID: <edea9980-f29f-4589-9a39-d92a715822ce@gmail.com> (raw)
In-Reply-To: <c89a020a219dd2d6e781dce9986d46cbafd6499c.camel@gmail.com>
On 4/11/24 15:14, Eduard Zingerman wrote:
> On Tue, 2024-04-09 at 17:41 -0700, Kui-Feng Lee wrote:
> [...]
>
>> Any access to elements other than the first one would be rejected.
>
> I'm not sure this is true, could you please point me to a specific
> check in the code that enforces access to go to the first element?
> The check added in this patch only enforces correct alignment with
> array element start.
I mean accessing to elements other than the first one would be rejected
if we don't have this patch.
Before the change, it enforces correct alignment with the start of the
whole array. Once the array feature is enabled, the "size" of struct
btf_field will be the size of entire array. In another word, accessing
to later elements, other than the first one, doesn't align with the
beginning of entire array, and will be rejected.
>
> Other than this, the patch looks good to me.
>
> [...]
>
>> @@ -5448,7 +5448,10 @@ static int check_map_access(struct bpf_verifier_env *env, u32 regno,
>> verbose(env, "kptr access cannot have variable offset\n");
>> return -EACCES;
>> }
>> - if (p != off + reg->var_off.value) {
Here "p" is the start of the entire array. If access any elements other
than the first one, it should return -EACCES.
>> + var_p = off + reg->var_off.value;
>> + elem_size = field->size / field->nelems;
>> + if (var_p < p || var_p >= p + field->size ||
>> + (var_p - p) % elem_size) {
>> verbose(env, "kptr access misaligned expected=%u off=%llu\n",
>> p, off + reg->var_off.value);
>> return -EACCES;
>
>
next prev parent reply other threads:[~2024-04-12 16:32 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-10 0:41 [PATCH bpf-next 00/11] Enable BPF programs to declare arrays of kptr, bpf_rb_root, and bpf_list_head Kui-Feng Lee
2024-04-10 0:41 ` [PATCH bpf-next 01/11] bpf: Remove unnecessary checks on the offset of btf_field Kui-Feng Lee
2024-04-11 22:12 ` Eduard Zingerman
2024-04-10 0:41 ` [PATCH bpf-next 02/11] bpf: Remove unnecessary call to btf_field_type_size() Kui-Feng Lee
2024-04-11 22:12 ` Eduard Zingerman
2024-04-10 0:41 ` [PATCH bpf-next 03/11] bpf: Add nelems to struct btf_field_info and btf_field Kui-Feng Lee
2024-04-10 0:41 ` [PATCH bpf-next 04/11] bpf: check_map_kptr_access() compute the offset from the reg state Kui-Feng Lee
2024-04-11 22:13 ` Eduard Zingerman
2024-04-12 4:00 ` Kui-Feng Lee
2024-04-10 0:41 ` [PATCH bpf-next 05/11] bpf: initialize/free array of btf_field(s) Kui-Feng Lee
2024-04-11 22:13 ` Eduard Zingerman
2024-04-12 3:56 ` Kui-Feng Lee
2024-04-12 15:32 ` Eduard Zingerman
2024-04-12 17:00 ` Kui-Feng Lee
2024-04-10 0:41 ` [PATCH bpf-next 06/11] bpf: Find btf_field with the knowledge of arrays Kui-Feng Lee
2024-04-11 22:14 ` Eduard Zingerman
2024-04-12 2:00 ` Kui-Feng Lee
2024-04-10 0:41 ` [PATCH bpf-next 07/11] bpf: check_map_access() " Kui-Feng Lee
2024-04-11 22:14 ` Eduard Zingerman
2024-04-12 16:32 ` Kui-Feng Lee [this message]
2024-04-12 19:08 ` Eduard Zingerman
2024-04-12 19:29 ` Kui-Feng Lee
2024-04-12 19:50 ` Eduard Zingerman
2024-04-10 0:41 ` [PATCH bpf-next 08/11] bpf: Enable and verify btf_field arrays Kui-Feng Lee
2024-04-10 0:41 ` [PATCH bpf-next 09/11] selftests/bpf: Test global kptr arrays Kui-Feng Lee
2024-04-10 0:41 ` [PATCH bpf-next 10/11] selftests/bpf: Test global bpf_rb_root arrays Kui-Feng Lee
2024-04-10 0:41 ` [PATCH bpf-next 11/11] selftests/bpf: Test global bpf_list_head arrays Kui-Feng Lee
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=edea9980-f29f-4589-9a39-d92a715822ce@gmail.com \
--to=sinquersw@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=eddyz87@gmail.com \
--cc=kernel-team@meta.com \
--cc=kuifeng@meta.com \
--cc=martin.lau@linux.dev \
--cc=song@kernel.org \
--cc=thinker.li@gmail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox