• Martin KaFai Lau's avatar
    bpf: Improve the info.func_info and info.func_info_rec_size behavior · 7337224f
    Martin KaFai Lau authored
    1) When bpf_dump_raw_ok() == false and the kernel can provide >=1
       func_info to the userspace, the current behavior is setting
       the info.func_info_cnt to 0 instead of setting info.func_info
       to 0.
    
       It is different from the behavior in jited_func_lens/nr_jited_func_lens,
       jited_ksyms/nr_jited_ksyms...etc.
    
       This patch fixes it. (i.e. set func_info to 0 instead of
       func_info_cnt to 0 when bpf_dump_raw_ok() == false).
    
    2) When the userspace passed in info.func_info_cnt == 0, the kernel
       will set the expected func_info size back to the
       info.func_info_rec_size.  It is a way for the userspace to learn
       the kernel expected func_info_rec_size introduced in
       commit 838e9690 ("bpf: Introduce bpf_func_info").
    
       An exception is the kernel expected size is not set when
       func_info is not available for a bpf_prog.  This makes the
       returned info.func_info_rec_size has different values
       depending on the returned value of info.func_info_cnt.
    
       This patch sets the kernel expected size to info.func_info_rec_size
       independent of the info.func_info_cnt.
    
    3) The current logic only rejects invalid func_info_rec_size if
       func_info_cnt is non zero.  This patch also rejects invalid
       nonzero info.func_info_rec_size and not equal to the kernel
       expected size.
    
    4) Set info.btf_id as long as prog->aux->btf != NULL.  That will
       setup the later copy_to_user() codes look the same as others
       which then easier to understand and maintain.
    
       prog->aux->btf is not NULL only if prog->aux->func_info_cnt > 0.
    
       Breaking up info.btf_id from prog->aux->func_info_cnt is needed
       for the later line info patch anyway.
    
       A similar change is made to bpf_get_prog_name().
    
    Fixes: 838e9690 ("bpf: Introduce bpf_func_info")
    Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Acked-by: default avatarYonghong Song <yhs@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    7337224f
syscall.c 59.6 KB