diff mbox series

block: fix bd_holder_dir kobject_create_and_add() error handling

Message ID 20211104192959.2355827-1-mcgrof@kernel.org (mailing list archive)
State New, archived
Headers show
Series block: fix bd_holder_dir kobject_create_and_add() error handling | expand

Commit Message

Luis Chamberlain Nov. 4, 2021, 7:29 p.m. UTC
Commit 83cbce957446 ("block: add error handling for device_add_disk /
add_disk") added error handling to device_add_disk(), however the goto
label for the bd_holder_dir kobject_create_and_add() failure did not set
the return value correctly, and so we can end up in a situation where
kobject_create_and_add() fails but we report success.

Fixes: 83cbce957446 ("block: add error handling for device_add_disk / add_disk")
Reported-by: Wu Bo <wubo40@huawei.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 block/genhd.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Jens Axboe Nov. 4, 2021, 7:30 p.m. UTC | #1
On 11/4/21 1:29 PM, Luis Chamberlain wrote:
> Commit 83cbce957446 ("block: add error handling for device_add_disk /
> add_disk") added error handling to device_add_disk(), however the goto
> label for the bd_holder_dir kobject_create_and_add() failure did not set
> the return value correctly, and so we can end up in a situation where
> kobject_create_and_add() fails but we report success.

I'm just going to fold this one in, as it's top-of-tree.
Luis Chamberlain Nov. 4, 2021, 7:31 p.m. UTC | #2
On Thu, Nov 04, 2021 at 01:30:29PM -0600, Jens Axboe wrote:
> On 11/4/21 1:29 PM, Luis Chamberlain wrote:
> > Commit 83cbce957446 ("block: add error handling for device_add_disk /
> > add_disk") added error handling to device_add_disk(), however the goto
> > label for the bd_holder_dir kobject_create_and_add() failure did not set
> > the return value correctly, and so we can end up in a situation where
> > kobject_create_and_add() fails but we report success.
> 
> I'm just going to fold this one in, as it's top-of-tree.

Makes sense.

  Luis
diff mbox series

Patch

diff --git a/block/genhd.c b/block/genhd.c
index 2263f7862241..c5392cc24d37 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -472,8 +472,10 @@  int __must_check device_add_disk(struct device *parent, struct gendisk *disk,
 
 	disk->part0->bd_holder_dir =
 		kobject_create_and_add("holders", &ddev->kobj);
-	if (!disk->part0->bd_holder_dir)
+	if (!disk->part0->bd_holder_dir) {
+		ret = -ENOMEM;
 		goto out_del_integrity;
+	}
 	disk->slave_dir = kobject_create_and_add("slaves", &ddev->kobj);
 	if (!disk->slave_dir) {
 		ret = -ENOMEM;