Skip to contentSkip to conversation

ipmi_ssif: Fix locking on probe error path

PATCH In review Dan Carpenter 2 participants 2 messages Aug 24, 2019

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ipmi_ssif: Fix locking on probe error path

If the allocations failed then we returned with the lock held. This patch moves the allocations infront of the locking.

Fixes 714acbc6cc39 ("ipmi_ssif: avoid registering duplicate ssif interface")
---
 drivers/char/ipmi/ipmi_ssif.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/char/ipmi/ipmi_ssif.c +2 -1
index 205726926bd3..9cf2efd33f19 100644
@@ -1683,7 +1683,6 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)
 	u8		  slave_addr = 0;
 	struct ssif_addr_info *addr_info = NULL;
 
-	mutex_lock(&ssif_infos_mutex);
 	resp = kmalloc(IPMI_MAX_MSG_LENGTH, GFP_KERNEL);
 	if (!resp)
 		return -ENOMEM;
@@ -1694,6 +1693,8 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)
 		return -ENOMEM;
 	}
 
+	mutex_lock(&ssif_infos_mutex);
+
 	if (!check_acpi(ssif_info, &client->dev)) {
 		addr_info = ssif_info_find(client->addr, client->adapter->name,
 					   true);
Signature · 1 line
2.20.1
#1 lore raw
Quoted 2 lines · Dan Carpenter

If the allocations failed then we returned with the lock held. This patch moves the allocations infront of the locking.

This had already been fixed, but thanks for the heads up.

-corey

Quoted 31 lines
Fixes 714acbc6cc39 ("ipmi_ssif: avoid registering duplicate ssif interface")
---
 drivers/char/ipmi/ipmi_ssif.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/char/ipmi/ipmi_ssif.c +2 -1
index 205726926bd3..9cf2efd33f19 100644
@@ -1683,7 +1683,6 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)
 	u8		  slave_addr = 0;
 	struct ssif_addr_info *addr_info = NULL;
 
-	mutex_lock(&ssif_infos_mutex);
 	resp = kmalloc(IPMI_MAX_MSG_LENGTH, GFP_KERNEL);
 	if (!resp)
 		return -ENOMEM;
@@ -1694,6 +1693,8 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)
 		return -ENOMEM;
 	}
 
+	mutex_lock(&ssif_infos_mutex);
+
 	if (!check_acpi(ssif_info, &client->dev)) {
 		addr_info = ssif_info_find(client->addr, client->adapter->name,
 					   true);
Signature · 1 line
2.20.1