summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Brownell <david-b@pacbell.net>2008-07-14 22:38:24 +0200
committerJean Delvare <khali@mahadeva.delvare>2008-07-14 22:38:24 +0200
commit6ea438ec8da4ec56bf415f5ea360e6b0cb59c6c3 (patch)
treebfaca562cfa95e71f7e7efe44d67f245d59b32f6
parenti2c: Kerneldoc for most I/O calls (diff)
downloadlinux-6ea438ec8da4ec56bf415f5ea360e6b0cb59c6c3.tar.xz
linux-6ea438ec8da4ec56bf415f5ea360e6b0cb59c6c3.zip
i2c: i2c_use_client() defends against NULL
Defend the i2c refcount calls against NULL pointers, as is important (and conventional) for such calls. Note that none of the current callers of i2c_use_client() use its return value. [JD: I hate this but apparently all the other subsystems do it so...] Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Jean Delvare <khali@linux-fr.org>
-rw-r--r--drivers/i2c/i2c-core.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 527d51319f3c..b995502400b8 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -866,8 +866,9 @@ EXPORT_SYMBOL(i2c_detach_client);
*/
struct i2c_client *i2c_use_client(struct i2c_client *client)
{
- get_device(&client->dev);
- return client;
+ if (client && get_device(&client->dev))
+ return client;
+ return NULL;
}
EXPORT_SYMBOL(i2c_use_client);
@@ -879,7 +880,8 @@ EXPORT_SYMBOL(i2c_use_client);
*/
void i2c_release_client(struct i2c_client *client)
{
- put_device(&client->dev);
+ if (client)
+ put_device(&client->dev);
}
EXPORT_SYMBOL(i2c_release_client);