• Daniel Borkmann's avatar
    ebpf: fix fd refcount leaks related to maps in bpf syscall · 592867bf
    Daniel Borkmann authored
    We may already have gotten a proper fd struct through fdget(), so
    whenever we return at the end of an map operation, we need to call
    fdput(). However, each map operation from syscall side first probes
    CHECK_ATTR() to verify that unused fields in the bpf_attr union are
    zero.
    
    In case of malformed input, we return with error, but the lookup to
    the map_fd was already performed at that time, so that we return
    without an corresponding fdput(). Fix it by performing an fdget()
    only right before bpf_map_get(). The fdget() invocation on maps in
    the verifier is not affected.
    
    Fixes: db20fd2b ("bpf: add lookup/update/delete/iterate methods to BPF maps")
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarAlexei Starovoitov <ast@plumgrid.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    592867bf
syscall.c 14.3 KB