• Jiri Olsa's avatar
    x86/syscall: Include asm/ptrace.h in syscall_wrapper header · 9440c429
    Jiri Olsa authored
    With just the forward declaration of the 'struct pt_regs' in
    syscall_wrapper.h, the syscall stub functions:
    
      __[x64|ia32]_sys_*(struct pt_regs *regs)
    
    will have different definition of 'regs' argument in BTF data
    based on which object file they are defined in.
    
    If the syscall's object includes 'struct pt_regs' definition,
    the BTF argument data will point to a 'struct pt_regs' record,
    like:
    
      [226] STRUCT 'pt_regs' size=168 vlen=21
             'r15' type_id=1 bits_offset=0
             'r14' type_id=1 bits_offset=64
             'r13' type_id=1 bits_offset=128
      ...
    
    If not, it will point to a fwd declaration record:
    
      [15439] FWD 'pt_regs' fwd_kind=struct
    
    and make bpf tracing program hooking on those functions unable
    to access fields from 'struct pt_regs'.
    
    Include asm/ptrace.h directly in syscall_wrapper.h to make sure all
    syscalls see 'struct pt_regs' definition. This then results in BTF for
    '__*_sys_*(struct pt_regs *regs)' functions to point to the actual
    struct, not just the forward declaration.
    
      [ bp: No Fixes tag as this is not really a bug fix but "adjustment" so
        that BTF is happy. ]
    Reported-by: default avatarAkihiro HARAI <jharai0815@gmail.com>
    Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Acked-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Cc: <stable@vger.kernel.org> # this is needed only for BTF so kernels >= 5.15
    Link: https://lore.kernel.org/r/20221018122708.823792-1-jolsa@kernel.org
    9440c429
syscall_wrapper.h 9.14 KB