]> git.baikalelectronics.ru Git - kernel.git/commit
rbd: avoid use-after-free in do_rbd_add() when rbd_dev_create() fails
authorIlya Dryomov <idryomov@gmail.com>
Fri, 24 Feb 2023 17:48:54 +0000 (18:48 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 11 Mar 2023 15:44:04 +0000 (16:44 +0100)
commiteda64db673b8bf3011ddc0ee17545a7a1759981c
treebeae021b3d474ac86f23612bae01d0e34973c0c5
parentc4fb1c3ae5037a7878257f2355263dce8d920f2c
rbd: avoid use-after-free in do_rbd_add() when rbd_dev_create() fails

commit f7c4d9b133c7a04ca619355574e96b6abf209fba upstream.

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: 087799997010 ("rbd: introduce a per-device ordered workqueue")
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/block/rbd.c