Skip to content

Commit

Permalink
mfd: Fix twl-core oops while calling twl_i2c_* for unbound driver
Browse files Browse the repository at this point in the history
Check inuse variable before trying to access twl_map to prevent
dereferencing of uninitialized variable.

Signed-off-by: Ilya Yanok <yanok@emcraft.com>
Cc: stable@kernel.org
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
  • Loading branch information
Ilya Yanok authored and Samuel Ortiz committed Dec 20, 2011
1 parent 858a630 commit 8653be1
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions drivers/mfd/twl-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -363,13 +363,13 @@ int twl_i2c_write(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes)
pr_err("%s: invalid module number %d\n", DRIVER_NAME, mod_no);
return -EPERM;
}
sid = twl_map[mod_no].sid;
twl = &twl_modules[sid];

if (unlikely(!inuse)) {
pr_err("%s: client %d is not initialized\n", DRIVER_NAME, sid);
pr_err("%s: not initialized\n", DRIVER_NAME);
return -EPERM;
}
sid = twl_map[mod_no].sid;
twl = &twl_modules[sid];

mutex_lock(&twl->xfer_lock);
/*
* [MSG1]: fill the register address data
Expand Down Expand Up @@ -420,13 +420,13 @@ int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes)
pr_err("%s: invalid module number %d\n", DRIVER_NAME, mod_no);
return -EPERM;
}
sid = twl_map[mod_no].sid;
twl = &twl_modules[sid];

if (unlikely(!inuse)) {
pr_err("%s: client %d is not initialized\n", DRIVER_NAME, sid);
pr_err("%s: not initialized\n", DRIVER_NAME);
return -EPERM;
}
sid = twl_map[mod_no].sid;
twl = &twl_modules[sid];

mutex_lock(&twl->xfer_lock);
/* [MSG1] fill the register address data */
msg = &twl->xfer_msg[0];
Expand Down

0 comments on commit 8653be1

Please sign in to comment.