Browse Source

Merge tag 'hwmon-for-linus-v4.6-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging

Pull hwmon fix from Guenter Roeck:
 "Fix crash due to NULL pointer access in max1111 driver"

* tag 'hwmon-for-linus-v4.6-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
  hwmon: (max1111) Return -ENODEV from max1111_read_channel if not instantiated
Linus Torvalds 9 năm trước cách đây
mục cha
commit
8b8c877feb
1 tập tin đã thay đổi với 6 bổ sung0 xóa
  1. 6 0
      drivers/hwmon/max1111.c

+ 6 - 0
drivers/hwmon/max1111.c

@@ -85,6 +85,9 @@ static struct max1111_data *the_max1111;
 
 
 int max1111_read_channel(int channel)
 int max1111_read_channel(int channel)
 {
 {
+	if (!the_max1111 || !the_max1111->spi)
+		return -ENODEV;
+
 	return max1111_read(&the_max1111->spi->dev, channel);
 	return max1111_read(&the_max1111->spi->dev, channel);
 }
 }
 EXPORT_SYMBOL(max1111_read_channel);
 EXPORT_SYMBOL(max1111_read_channel);
@@ -258,6 +261,9 @@ static int max1111_remove(struct spi_device *spi)
 {
 {
 	struct max1111_data *data = spi_get_drvdata(spi);
 	struct max1111_data *data = spi_get_drvdata(spi);
 
 
+#ifdef CONFIG_SHARPSL_PM
+	the_max1111 = NULL;
+#endif
 	hwmon_device_unregister(data->hwmon_dev);
 	hwmon_device_unregister(data->hwmon_dev);
 	sysfs_remove_group(&spi->dev.kobj, &max1110_attr_group);
 	sysfs_remove_group(&spi->dev.kobj, &max1110_attr_group);
 	sysfs_remove_group(&spi->dev.kobj, &max1111_attr_group);
 	sysfs_remove_group(&spi->dev.kobj, &max1111_attr_group);