• Jiri Olsa's avatar
    bpf: Allow access to int pointer arguments in tracing programs · bb6728d7
    Jiri Olsa authored
    Adding support to access arguments with int pointer arguments
    in tracing programs.
    
    Currently we allow tracing programs to access only pointers to
    string (char pointer), void pointers and pointers to structs.
    
    If we try to access argument which is pointer to int, verifier
    will fail to load the program with;
    
      R1 type=ctx expected=fp
      ; int BPF_PROG(fmod_ret_test, int _a, __u64 _b, int _ret)
      0: (bf) r6 = r1
      ; int BPF_PROG(fmod_ret_test, int _a, __u64 _b, int _ret)
      1: (79) r9 = *(u64 *)(r6 +8)
      func 'bpf_modify_return_test' arg1 type INT is not a struct
    
    There is no harm for the program to access int pointer argument.
    We are already doing that for string pointer, which is pointer
    to int with 1 byte size.
    
    Changing the is_string_ptr to generic integer check and renaming
    it to btf_type_is_int.
    Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20211208193245.172141-2-jolsa@kernel.org
    bb6728d7
btf.c 174 KB