]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
rtc: abx80x: solve race condition
authorAlexandre Belloni <alexandre.belloni@free-electrons.com>
Thu, 12 Oct 2017 22:04:47 +0000 (00:04 +0200)
committerAlexandre Belloni <alexandre.belloni@free-electrons.com>
Thu, 12 Oct 2017 22:10:12 +0000 (00:10 +0200)
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>
drivers/rtc/rtc-abx80x.c

index 442e62a3c9a991224708fa478627e01b4b63f33b..b033bc556f5d29b4d803ff6506685c3dc940aee1 100644 (file)
@@ -620,10 +620,6 @@ static int abx80x_probe(struct i2c_client *client,
 
        rtc->ops = &abx80x_rtc_ops;
 
-       err = rtc_register_device(rtc);
-       if (err)
-               return err;
-
        i2c_set_clientdata(client, rtc);
 
        if (client->irq > 0) {
@@ -650,10 +646,14 @@ static int abx80x_probe(struct i2c_client *client,
        err = devm_add_action_or_reset(&client->dev,
                                       rtc_calib_remove_sysfs_group,
                                       &client->dev);
-       if (err)
+       if (err) {
                dev_err(&client->dev,
                        "Failed to add sysfs cleanup action: %d\n",
                        err);
+               return err;
+       }
+
+       err = rtc_register_device(rtc);
 
        return err;
 }