• Yonghong Song's avatar
    bpf: Add a kfunc for generic type cast · a35b9af4
    Yonghong Song authored
    Implement bpf_rdonly_cast() which tries to cast the object
    to a specified type. This tries to support use case like below:
      #define skb_shinfo(SKB) ((struct skb_shared_info *)(skb_end_pointer(SKB)))
    where skb_end_pointer(SKB) is a 'unsigned char *' and needs to
    be casted to 'struct skb_shared_info *'.
    
    The signature of bpf_rdonly_cast() looks like
       void *bpf_rdonly_cast(void *obj, __u32 btf_id)
    The function returns the same 'obj' but with PTR_TO_BTF_ID with
    btf_id. The verifier will ensure btf_id being a struct type.
    
    Since the supported type cast may not reflect what the 'obj'
    represents, the returned btf_id is marked as PTR_UNTRUSTED, so
    the return value and subsequent pointer chasing cannot be
    used as helper/kfunc arguments.
    Signed-off-by: default avatarYonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/r/20221120195437.3114585-1-yhs@fb.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    a35b9af4
verifier.c 483 KB