bcachefs: fix possible null-ptr-deref in __bch2_ec_stripe_head_get()
authorGaosheng Cui <cuigaosheng1@huawei.com>
Sat, 26 Oct 2024 10:26:58 +0000 (18:26 +0800)
committerKent Overstreet <kent.overstreet@linux.dev>
Tue, 29 Oct 2024 10:34:10 +0000 (06:34 -0400)
The function ec_new_stripe_head_alloc() returns nullptr if kzalloc()
fails. It is crucial to verify its return value before dereferencing
it to avoid a potential nullptr dereference.

Fixes: 035d72f72c91 ("bcachefs: bch2_ec_stripe_head_get() now checks for change in rw devices")
Signed-off-by: Gaosheng Cui <cuigaosheng1@huawei.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/ec.c
fs/bcachefs/errcode.h

index a0aa5bb..749dcf3 100644 (file)
@@ -1870,6 +1870,10 @@ __bch2_ec_stripe_head_get(struct btree_trans *trans,
                }
 
        h = ec_new_stripe_head_alloc(c, disk_label, algo, redundancy, watermark);
+       if (!h) {
+               h = ERR_PTR(-BCH_ERR_ENOMEM_stripe_head_alloc);
+               goto err;
+       }
 found:
        if (h->rw_devs_change_count != c->rw_devs_change_count)
                ec_stripe_head_devs_update(c, h);
index b6cbd71..a1bc6c7 100644 (file)
@@ -83,6 +83,7 @@
        x(ENOMEM,                       ENOMEM_fs_other_alloc)                  \
        x(ENOMEM,                       ENOMEM_dev_alloc)                       \
        x(ENOMEM,                       ENOMEM_disk_accounting)                 \
+       x(ENOMEM,                       ENOMEM_stripe_head_alloc)               \
        x(ENOSPC,                       ENOSPC_disk_reservation)                \
        x(ENOSPC,                       ENOSPC_bucket_alloc)                    \
        x(ENOSPC,                       ENOSPC_disk_label_add)                  \