• Ilya Dryomov's avatar
    rbd: avoid use-after-free in do_rbd_add() when rbd_dev_create() fails · f7c4d9b1
    Ilya Dryomov authored
    If getting an ID or setting up a work queue in rbd_dev_create() fails,
    use-after-free on rbd_dev->rbd_client, rbd_dev->spec and rbd_dev->opts
    is triggered in do_rbd_add().  The root cause is that the ownership of
    these structures is transfered to rbd_dev prematurely and they all end
    up getting freed when rbd_dev_create() calls rbd_dev_free() prior to
    returning to do_rbd_add().
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE, an
    incomplete patch submitted by Natalia Petrova <n.petrova@fintech.ru>.
    
    Cc: stable@vger.kernel.org
    Fixes: 1643dfa4 ("rbd: introduce a per-device ordered workqueue")
    Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
    f7c4d9b1
rbd.c 183 KB