• Jiri Olsa's avatar
    bpftool: Fix prog dump by tag · 1da961de
    Jiri Olsa authored
    [ Upstream commit 752bcf80 ]
    
    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: default avatarLance Digby <ldigby@redhat.com>
    Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
    Reviewed-by: default avatarQuentin Monnet <quentin.monnet@netronome.com>
    Acked-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    1da961de
prog.c 22.2 KB