• Naveen N. Rao's avatar
    powerpc/bpf: Fix use of user_pt_regs in uapi · b21bd5a4
    Naveen N. Rao authored
    Trying to build a .c file that includes <linux/bpf_perf_event.h>:
      $ cat test_bpf_headers.c
      #include <linux/bpf_perf_event.h>
    
    throws the below error:
      /usr/include/linux/bpf_perf_event.h:14:28: error: field ‘regs’ has incomplete type
         14 |         bpf_user_pt_regs_t regs;
    	|                            ^~~~
    
    This is because we typedef bpf_user_pt_regs_t to 'struct user_pt_regs'
    in arch/powerpc/include/uaps/asm/bpf_perf_event.h, but 'struct
    user_pt_regs' is not exposed to userspace.
    
    Powerpc has both pt_regs and user_pt_regs structures. However, unlike
    arm64 and s390, we expose user_pt_regs to userspace as just 'pt_regs'.
    As such, we should typedef bpf_user_pt_regs_t to 'struct pt_regs' for
    userspace.
    
    Within the kernel though, we want to typedef bpf_user_pt_regs_t to
    'struct user_pt_regs'.
    
    Remove arch/powerpc/include/uapi/asm/bpf_perf_event.h so that the
    uapi/asm-generic version of the header is exposed to userspace.
    Introduce arch/powerpc/include/asm/bpf_perf_event.h so that we can
    typedef bpf_user_pt_regs_t to 'struct user_pt_regs' for use within the
    kernel.
    
    Note that this was not showing up with the bpf selftest build since
    tools/include/uapi/asm/bpf_perf_event.h didn't include the powerpc
    variant.
    
    Fixes: a6460b03 ("powerpc/bpf: Fix broken uapi for BPF_PROG_TYPE_PERF_EVENT")
    Cc: stable@vger.kernel.org # v4.20+
    Signed-off-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
    [mpe: Use typical naming for header include guard]
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20220627191119.142867-1-naveen.n.rao@linux.vnet.ibm.com
    b21bd5a4
bpf_perf_event.h 233 Bytes