• Youlin Li's avatar
    bpf: Fix wrong reg type conversion in release_reference() · f1db2081
    Youlin Li authored
    Some helper functions will allocate memory. To avoid memory leaks, the
    verifier requires the eBPF program to release these memories by calling
    the corresponding helper functions.
    
    When a resource is released, all pointer registers corresponding to the
    resource should be invalidated. The verifier use release_references() to
    do this job, by apply  __mark_reg_unknown() to each relevant register.
    
    It will give these registers the type of SCALAR_VALUE. A register that
    will contain a pointer value at runtime, but of type SCALAR_VALUE, which
    may allow the unprivileged user to get a kernel pointer by storing this
    register into a map.
    
    Using __mark_reg_not_init() while NOT allow_ptr_leaks can mitigate this
    problem.
    
    Fixes: fd978bf7 ("bpf: Add reference tracking to verifier")
    Signed-off-by: default avatarYoulin Li <liulin063@gmail.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20221103093440.3161-1-liulin063@gmail.com
    f1db2081
verifier.c 438 KB