• Mikulas Patocka's avatar
    bcachefs: fix NULL pointer dereference in try_alloc_bucket · 954ed17e
    Mikulas Patocka authored
    On Mon, 29 May 2023, Mikulas Patocka wrote:
    
    > The oops happens in set_btree_iter_dontneed and it is caused by the fact
    > that iter->path is NULL. The code in try_alloc_bucket is buggy because it
    > sets "struct btree_iter iter = { NULL };" and then jumps to the "err"
    > label that tries to dereference values in "iter".
    
    Here I'm sending a patch for it.
    
    From: Mikulas Patocka <mpatocka@redhat.com>
    
    The function try_alloc_bucket sets the variable "iter" to NULL and then
    (on various error conditions) jumps to the label "err". On the "err"
    label, it calls "set_btree_iter_dontneed" that tries to dereference
    "iter->trans" and "iter->path".
    
    So, we get an oops on error condition.
    
    This patch fixes the crash by testing that iter.trans and iter.path is
    non-zero before calling set_btree_iter_dontneed.
    Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
    954ed17e
alloc_foreground.c 37.3 KB