mirror of
https://github.com/torvalds/linux.git
synced 2026-09-12 12:34:02 +02:00
hwmon: Ensure that 'dev' passed to hwmon_notify_event() is a hwmon device
The device parameter of hwmon_notify_event() must be a hardware monitoring device. Since this is easy to get wrong, and since passing a non-hwmon device may result in a crash, generate a warning traceback and abort if a wrong device class is passed as parameter. Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
8afc94bfb0
commit
2bf98a6af1
|
|
@ -318,6 +318,11 @@ static int hwmon_attr_base(enum hwmon_sensor_types type)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static bool is_hwmon_device(struct device *dev)
|
||||
{
|
||||
return dev->class == &hwmon_class;
|
||||
}
|
||||
|
||||
#if IS_REACHABLE(CONFIG_I2C)
|
||||
|
||||
/*
|
||||
|
|
@ -338,7 +343,7 @@ static int hwmon_attr_base(enum hwmon_sensor_types type)
|
|||
|
||||
static int hwmon_match_device(struct device *dev, const void *data)
|
||||
{
|
||||
return dev->class == &hwmon_class;
|
||||
return is_hwmon_device(dev);
|
||||
}
|
||||
|
||||
static ssize_t pec_show(struct device *dev, const struct device_attribute *dummy,
|
||||
|
|
@ -781,6 +786,9 @@ int hwmon_notify_event(struct device *dev, enum hwmon_sensor_types type,
|
|||
const char *template;
|
||||
int base;
|
||||
|
||||
if (WARN(!is_hwmon_device(dev), "%s is not a hardware monitoring device\n",
|
||||
dev_name(dev)))
|
||||
return -EINVAL;
|
||||
if (type >= ARRAY_SIZE(__templates))
|
||||
return -EINVAL;
|
||||
if (attr >= __templates_size[type])
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user