Re: [PATCH bpf-next v7] bpf: Support 64-bit pointers to kfuncs

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

 



On Thu, Apr 13, 2023 at 12:14 PM Jiri Olsa <olsajiri@xxxxxxxxx> wrote:
>
> On Thu, Apr 13, 2023 at 01:06:32AM +0200, Ilya Leoshkevich wrote:
> > test_ksyms_module fails to emit a kfunc call targeting a module on
> > s390x, because the verifier stores the difference between kfunc
> > address and __bpf_call_base in bpf_insn.imm, which is s32, and modules
> > are roughly (1 << 42) bytes away from the kernel on s390x.
> >
> > Fix by keeping BTF id in bpf_insn.imm for BPF_PSEUDO_KFUNC_CALLs,
> > and storing the absolute address in bpf_kfunc_desc.
> >
> > Introduce bpf_jit_supports_far_kfunc_call() in order to limit this new
> > behavior to the s390x JIT. Otherwise other JITs need to be modified,
> > which is not desired.
> >
> > Introduce bpf_get_kfunc_addr() instead of exposing both
> > find_kfunc_desc() and struct bpf_kfunc_desc.
> >
> > In addition to sorting kfuncs by imm, also sort them by offset, in
> > order to handle conflicting imms from different modules. Do this on
> > all architectures in order to simplify code.
> >
> > Factor out resolving specialized kfuncs (XPD and dynptr) from
> > fixup_kfunc_call(). This was required in the first place, because
> > fixup_kfunc_call() uses find_kfunc_desc(), which returns a const
> > pointer, so it's not possible to modify kfunc addr without stripping
> > const, which is not nice. It also removes repetition of code like:
> >
> >       if (bpf_jit_supports_far_kfunc_call())
> >               desc->addr = func;
> >       else
> >               insn->imm = BPF_CALL_IMM(func);
> >
> > and separates kfunc_desc_tab fixups from kfunc_call fixups.
> >
> > Suggested-by: Jiri Olsa <olsajiri@xxxxxxxxx>
> > Signed-off-by: Ilya Leoshkevich <iii@xxxxxxxxxxxxx>
>
> Acked-by: Jiri Olsa <jolsa@xxxxxxxxxx>

Applied.
Should be able to delete a few entries from DENYLIST.s390x, right?




[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