• J
    bpftool: Fix prog dump by tag · 8da69a36
    Jiri Olsa 提交于
    mainline inclusion
    from mainline-5.0
    commit 752bcf80f554
    category: bugfix
    bugzilla: 9484
    CVE: NA
    
    -------------------------------------------------
    
    Lance reported an issue with bpftool not being able to
    dump program if there are more programs loaded and you
    want to dump any but the first program, like:
    
      # bpftool prog
      28: kprobe  name trace_req_start  tag 1dfc28ba8b3dd597  gpl
      	loaded_at 2019-01-18T17:02:40+1100  uid 0
      	xlated 112B  jited 109B  memlock 4096B  map_ids 13
      29: kprobe  name trace_req_compl  tag 5b6a5ecc6030a683  gpl
      	loaded_at 2019-01-18T17:02:40+1100  uid 0
      	xlated 928B  jited 575B  memlock 4096B  map_ids 13,14
      #  bpftool prog dum jited tag 1dfc28ba8b3dd597
       0:	push   %rbp
       1:	mov    %rsp,%rbp
      ...
    
      #  bpftool prog dum jited tag 5b6a5ecc6030a683
      Error: can't get prog info (29): Bad address
    
    The problem is in the prog_fd_by_tag function not cleaning
    the struct bpf_prog_info before another request, so the
    previous program length is still in there and kernel assumes
    it needs to dump the program, which fails because there's no
    user pointer set.
    
    Moving the struct bpf_prog_info declaration into the loop,
    so it gets cleaned before each query.
    
    Fixes: 71bb428f ("tools: bpf: add bpftool")
    Reported-by: NLance Digby <ldigby@redhat.com>
    Signed-off-by: NJiri Olsa <jolsa@kernel.org>
    Reviewed-by: NQuentin Monnet <quentin.monnet@netronome.com>
    Acked-by: NJakub Kicinski <jakub.kicinski@netronome.com>
    Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: NCheng Jian <cj.chengjian@huawei.com>
    Reviewed-by: NHanjun Guo <guohanjun@huawei.com>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    8da69a36
prog.c 22.2 KB