|
Hannes Reinecke |
b1f324 |
From: Sagi Grimberg <sagi@grimberg.me>
|
|
Hannes Reinecke |
b1f324 |
Date: Wed, 1 Apr 2020 16:16:27 -0700
|
|
Hannes Reinecke |
b1f324 |
Subject: [PATCH] nvmet: fix NULL dereference when removing a referral
|
|
Hannes Reinecke |
b1f324 |
Git-commit: f0e656e4f253120eb871a53ffab7664530c1d9f4
|
|
Michal Kubecek |
66e035 |
Patch-mainline: v5.7-rc1
|
|
Hannes Reinecke |
b1f324 |
References: bsc#1169045
|
|
Hannes Reinecke |
b1f324 |
|
|
Hannes Reinecke |
b1f324 |
When item release is called, the parent is already null. We need the
|
|
Hannes Reinecke |
b1f324 |
parent to pass to nvmet_referral_disable so hook it up to
|
|
Hannes Reinecke |
b1f324 |
->disconnect_notify.
|
|
Hannes Reinecke |
b1f324 |
|
|
Hannes Reinecke |
b1f324 |
Reported-by: Tony Asleson <tasleson@redhat.com>
|
|
Hannes Reinecke |
b1f324 |
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
|
|
Hannes Reinecke |
b1f324 |
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
|
|
Hannes Reinecke |
b1f324 |
Signed-off-by: Christoph Hellwig <hch@lst.de>
|
|
Hannes Reinecke |
b1f324 |
Acked-by: Hannes Reinecke <hare@suse.com>
|
|
Hannes Reinecke |
b1f324 |
---
|
|
Hannes Reinecke |
b1f324 |
drivers/nvme/target/configfs.c | 10 +++++++++-
|
|
Hannes Reinecke |
b1f324 |
1 file changed, 9 insertions(+), 1 deletion(-)
|
|
Hannes Reinecke |
b1f324 |
|
|
Hannes Reinecke |
b1f324 |
diff --git a/drivers/nvme/target/configfs.c b/drivers/nvme/target/configfs.c
|
|
Hannes Reinecke |
b1f324 |
index 7aa10788b7c8..58cabd7b6fc5 100644
|
|
Hannes Reinecke |
b1f324 |
--- a/drivers/nvme/target/configfs.c
|
|
Hannes Reinecke |
b1f324 |
+++ b/drivers/nvme/target/configfs.c
|
|
Hannes Reinecke |
b1f324 |
@@ -1098,12 +1098,19 @@ static struct configfs_attribute *nvmet_referral_attrs[] = {
|
|
Hannes Reinecke |
b1f324 |
NULL,
|
|
Hannes Reinecke |
b1f324 |
};
|
|
Hannes Reinecke |
b1f324 |
|
|
Hannes Reinecke |
b1f324 |
-static void nvmet_referral_release(struct config_item *item)
|
|
Hannes Reinecke |
b1f324 |
+static void nvmet_referral_notify(struct config_group *group,
|
|
Hannes Reinecke |
b1f324 |
+ struct config_item *item)
|
|
Hannes Reinecke |
b1f324 |
{
|
|
Hannes Reinecke |
b1f324 |
struct nvmet_port *parent = to_nvmet_port(item->ci_parent->ci_parent);
|
|
Hannes Reinecke |
b1f324 |
struct nvmet_port *port = to_nvmet_port(item);
|
|
Hannes Reinecke |
b1f324 |
|
|
Hannes Reinecke |
b1f324 |
nvmet_referral_disable(parent, port);
|
|
Hannes Reinecke |
b1f324 |
+}
|
|
Hannes Reinecke |
b1f324 |
+
|
|
Hannes Reinecke |
b1f324 |
+static void nvmet_referral_release(struct config_item *item)
|
|
Hannes Reinecke |
b1f324 |
+{
|
|
Hannes Reinecke |
b1f324 |
+ struct nvmet_port *port = to_nvmet_port(item);
|
|
Hannes Reinecke |
b1f324 |
+
|
|
Hannes Reinecke |
b1f324 |
kfree(port);
|
|
Hannes Reinecke |
b1f324 |
}
|
|
Hannes Reinecke |
b1f324 |
|
|
Hannes Reinecke |
b1f324 |
@@ -1134,6 +1141,7 @@ static struct config_group *nvmet_referral_make(
|
|
Hannes Reinecke |
b1f324 |
|
|
Hannes Reinecke |
b1f324 |
static struct configfs_group_operations nvmet_referral_group_ops = {
|
|
Hannes Reinecke |
b1f324 |
.make_group = nvmet_referral_make,
|
|
Hannes Reinecke |
b1f324 |
+ .disconnect_notify = nvmet_referral_notify,
|
|
Hannes Reinecke |
b1f324 |
};
|
|
Hannes Reinecke |
b1f324 |
|
|
Hannes Reinecke |
b1f324 |
static const struct config_item_type nvmet_referrals_type = {
|
|
Hannes Reinecke |
b1f324 |
--
|
|
Hannes Reinecke |
b1f324 |
2.16.4
|
|
Hannes Reinecke |
b1f324 |
|