Skip to content

Commit 80d98a3

Browse files
committed
ipmi:ipmb: Don't call ipmi_unregister_smi() on a register failure
The data structure won't be set up to be unregistered, and it can result in crashes if the register fails. Signed-off-by: Corey Minyard <minyard@acm.org>
1 parent ba5829c commit 80d98a3

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

drivers/char/ipmi/ipmi_ipmb.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -424,10 +424,8 @@ static void ipmi_ipmb_request_events(void *send_info)
424424
/* We don't fetch events here. */
425425
}
426426

427-
static int ipmi_ipmb_remove(struct i2c_client *client)
427+
static void ipmi_ipmb_cleanup(struct ipmi_ipmb_dev *iidev)
428428
{
429-
struct ipmi_ipmb_dev *iidev = i2c_get_clientdata(client);
430-
431429
if (iidev->slave) {
432430
i2c_slave_unregister(iidev->slave);
433431
if (iidev->slave != iidev->client)
@@ -436,7 +434,13 @@ static int ipmi_ipmb_remove(struct i2c_client *client)
436434
iidev->slave = NULL;
437435
iidev->client = NULL;
438436
ipmi_ipmb_stop_thread(iidev);
437+
}
438+
439+
static int ipmi_ipmb_remove(struct i2c_client *client)
440+
{
441+
struct ipmi_ipmb_dev *iidev = i2c_get_clientdata(client);
439442

443+
ipmi_ipmb_cleanup(iidev);
440444
ipmi_unregister_smi(iidev->intf);
441445

442446
return 0;
@@ -544,7 +548,7 @@ static int ipmi_ipmb_probe(struct i2c_client *client)
544548
out_err:
545549
if (slave && slave != client)
546550
i2c_unregister_device(slave);
547-
ipmi_ipmb_remove(client);
551+
ipmi_ipmb_cleanup(iidev);
548552
return rv;
549553
}
550554

0 commit comments

Comments
 (0)