rtc: abx80x: solve race condition
There is a race condition that can happen if abx80x_probe() fails after the rtc registration succeeded. Solve that by moving the registration at the end of the probe function. Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
This commit is contained in:
parent
9360a6a818
commit
9da32ba64d
|
@ -620,10 +620,6 @@ static int abx80x_probe(struct i2c_client *client,
|
||||||
|
|
||||||
rtc->ops = &abx80x_rtc_ops;
|
rtc->ops = &abx80x_rtc_ops;
|
||||||
|
|
||||||
err = rtc_register_device(rtc);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
i2c_set_clientdata(client, rtc);
|
i2c_set_clientdata(client, rtc);
|
||||||
|
|
||||||
if (client->irq > 0) {
|
if (client->irq > 0) {
|
||||||
|
@ -650,10 +646,14 @@ static int abx80x_probe(struct i2c_client *client,
|
||||||
err = devm_add_action_or_reset(&client->dev,
|
err = devm_add_action_or_reset(&client->dev,
|
||||||
rtc_calib_remove_sysfs_group,
|
rtc_calib_remove_sysfs_group,
|
||||||
&client->dev);
|
&client->dev);
|
||||||
if (err)
|
if (err) {
|
||||||
dev_err(&client->dev,
|
dev_err(&client->dev,
|
||||||
"Failed to add sysfs cleanup action: %d\n",
|
"Failed to add sysfs cleanup action: %d\n",
|
||||||
err);
|
err);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = rtc_register_device(rtc);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue