diff options
author | Julia Lawall <julia@diku.dk> | 2009-09-22 16:46:29 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-23 07:39:45 -0700 |
commit | 72445af880dbcd41cffd0d7b78a8c74da093e9eb (patch) | |
tree | 48bd4c2c98bda4d548b931482e4b000e13b88a4e /drivers | |
parent | d3c7a3f71a103abb7af5bdaf1adf6f693913a4a9 (diff) | |
download | linux-72445af880dbcd41cffd0d7b78a8c74da093e9eb.tar.gz linux-72445af880dbcd41cffd0d7b78a8c74da093e9eb.tar.bz2 linux-72445af880dbcd41cffd0d7b78a8c74da093e9eb.zip |
drivers/rtc: correct error-handling code
This code is not executed before ds1307->rtc has been successfully
initialized to the result of calling rtc_device_register. Thus the test
that ds1307->rtc is not NULL is always true.
A simplified version of the semantic match that finds this problem is as
follows: (http://coccinelle.lip6.fr/)
// <smpl>
@match exists@
expression x, E;
statement S1, S2;
@@
x = rtc_device_register(...)
... when != x = E
(
* if (x == NULL || ...) S1 else S2
|
* if (x == NULL && ...) S1 else S2
)
// </smpl>
Signed-off-by: Julia Lawall <julia@diku.dk>
Acked-by: Wolfram Sang <w.sang@pengutronix.de>
Cc: David Brownell <david-b@pacbell.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/rtc/rtc-ds1307.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c index 47a93c022d91..eb99ee4fa0f5 100644 --- a/drivers/rtc/rtc-ds1307.c +++ b/drivers/rtc/rtc-ds1307.c @@ -896,8 +896,7 @@ read_rtc: return 0; exit_irq: - if (ds1307->rtc) - rtc_device_unregister(ds1307->rtc); + rtc_device_unregister(ds1307->rtc); exit_free: kfree(ds1307); return err; |