Re: [PATCH bpf-next v3 0/3] bpf: allow void* cast using bpf_rdonly_cast()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jun 25, 2025 at 11:24 AM Eduard Zingerman <eddyz87@xxxxxxxxx> wrote:
>
> Currently, pointers returned by `bpf_rdonly_cast()` have a type of
> "pointer to btf id", and only casts to structure types are allowed.
> Access to memory pointed to by these pointers is done through
> `BPF_PROBE_{MEM,MEMSX}` instructions and does not produce errors on
> invalid memory access.
>
> This patch set extends `bpf_rdonly_cast()` to allow casts to an
> equivalent of 'void *', effectively replacing
> `bpf_probe_read_kernel()` calls in situations where access to
> individual bytes or integers is necessary.
>
> The mechanism was suggested and explored by Andrii Nakryiko in [1].
>
> To help with detecting support for this feature, an
> `enum bpf_features` is added with intended usage as follows:
>
>   if (bpf_core_enum_value_exists(enum bpf_features,
>                                  BPF_FEAT_RDONLY_CAST_TO_VOID))
>     ...
>
> [1] https://github.com/anakryiko/linux/tree/bpf-mem-cast
>
> Changelog:
>
> v2: https://lore.kernel.org/bpf/20250625000520.2700423-1-eddyz87@xxxxxxxxx/
> v2 -> v3:
> - dropped direct numbering for __MAX_BPF_FEAT.
>
> v1: https://lore.kernel.org/bpf/20250624191009.902874-1-eddyz87@xxxxxxxxx/
> v1 -> v2:
> - renamed BPF_FEAT_TOTAL to __MAX_BPF_FEAT and moved patch introducing
>   bpf_features enum to the start of the series (Alexei);
> - dropped patch #3 allowing optout from CAP_SYS_ADMIN drop in
>   prog_tests/verifier.c, use a separate runner in prog_tests/*
>   instead.
>
> Eduard Zingerman (3):
>   bpf: add bpf_features enum
>   bpf: allow void* cast using bpf_rdonly_cast()
>   selftests/bpf: check operations on untrusted ro pointers to mem
>

As I mentioned on patch #3, we are lacking demonstration of another
critical property: ability to dereference the pointer as 1/2/4/8 byte
pointers. Other than that, lgtm.

Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx>

>  kernel/bpf/verifier.c                         |  79 ++++++++--
>  .../bpf/prog_tests/mem_rdonly_untrusted.c     |   9 ++
>  .../bpf/progs/mem_rdonly_untrusted.c          | 136 ++++++++++++++++++
>  3 files changed, 212 insertions(+), 12 deletions(-)
>  create mode 100644 tools/testing/selftests/bpf/prog_tests/mem_rdonly_untrusted.c
>  create mode 100644 tools/testing/selftests/bpf/progs/mem_rdonly_untrusted.c
>
> --
> 2.47.1
>





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux