Reviewed-By: Matt Ranostay <matt.ranostay@xxxxxxxxx> On Thu, Mar 17, 2016 at 9:32 AM, Daniel Baluta <daniel.baluta@xxxxxxxxx> wrote: > When using ACPI, id is NULL and the current code automatically > defaults name to NULL and chip id to 0. We should instead use > the data provided in the ACPI device table. > > Fixes: c816d9e7a57b ("iio: imu: mpu6050: fix possible NULL dereferences") > Signed-off-by: Daniel Baluta <daniel.baluta@xxxxxxxxx> > --- > drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c | 29 ++++++++++++++++++++++++++--- > 1 file changed, 26 insertions(+), 3 deletions(-) > > diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c > index d0c0e20..5ee4e0d 100644 > --- a/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c > +++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c > @@ -104,6 +104,19 @@ static int inv_mpu6050_deselect_bypass(struct i2c_adapter *adap, > return 0; > } > > +static const char *inv_mpu_match_acpi_device(struct device *dev, int *chip_id) > +{ > + const struct acpi_device_id *id; > + > + id = acpi_match_device(dev->driver->acpi_match_table, dev); > + if (!id) > + return NULL; > + > + *chip_id = (int)id->driver_data; > + > + return dev_name(dev); > +} > + > /** > * inv_mpu_probe() - probe function. > * @client: i2c client. > @@ -115,15 +128,25 @@ static int inv_mpu_probe(struct i2c_client *client, > const struct i2c_device_id *id) > { > struct inv_mpu6050_state *st; > - int result; > - const char *name = id ? id->name : NULL; > - const int chip_type = id ? id->driver_data : 0; > + int result, chip_type; > struct regmap *regmap; > + const char *name; > > if (!i2c_check_functionality(client->adapter, > I2C_FUNC_SMBUS_I2C_BLOCK)) > return -EOPNOTSUPP; > > + if (id) { > + chip_type = (int)id->driver_data; > + name = id->name; > + } else if (ACPI_HANDLE(&client->dev)) { > + name = inv_mpu_match_acpi_device(&client->dev, &chip_type); > + if (!name) > + return -ENODEV; > + } else { > + return -ENOSYS; > + } > + > regmap = devm_regmap_init_i2c(client, &inv_mpu_regmap_config); > if (IS_ERR(regmap)) { > dev_err(&client->dev, "Failed to register i2c regmap %d\n", > -- > 2.5.0 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-iio" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html