hwmon: (nct6775) Fix potential Spectre v1
PATCH 1/1 hwmon: (nct6775) Fix potential Spectre v1
val can be indirectly controlled by user-space, hence leading to a potential exploitation of the Spectre variant 1 vulnerability.
This issue was detected with the help of Smatch:
vers/hwmon/nct6775.c:2698 store_pwm_weight_temp_sel() warn: potential spectre issue 'data->temp_src' [r]
Fix this by sanitizing val before using it to index data->temp_src
Notice that given that speculation windows are large, the policy is to kill the speculation on the first load and not worry if it can be completed with a dependent load/store [1].
[1] https://marc.info/?l=linux-kernel&m=152449131114778&w=2
--- drivers/hwmon/nct6775.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/hwmon/nct6775.c +2 -0
@@ -63,6 +63,7 @@#include <linux/bitops.h> #include <linux/dmi.h> #include <linux/io.h> +#include <linux/nospec.h> #include "lm75.h" #define USE_ALTERNATE
@@ -2689,6 +2690,7 @@ store_pwm_weight_temp_sel(struct device *dev, struct device_attribute *attr,return err;if (val >NUM_TEMP )return -EINVAL ; + val =array_index_nospec (val,NUM_TEMP +1 );if (val && (!(data->have_temp &BIT (val -1 )) || !data->temp_src[val -1 ]))return -EINVAL ;
Signature · 1 line
2.7.4
Quoted 10 lines · Gustavo A. R. Silva
val can be indirectly controlled by user-space, hence leading to a potential exploitation of the Spectre variant 1 vulnerability.
This issue was detected with the help of Smatch:
vers/hwmon/nct6775.c:2698store_pwm_weight_temp_sel()warn: potential spectre issue 'data->temp_src' [r]Fix this by sanitizing val before using it to index
data->temp_src
Quoted 8 lines
Notice that given that speculation windows are large, the policy is to kill the speculation on the first load and not worry if it can be completed with a dependent load/store [1].
[1] https://marc.info/?l=linux-kernel&m=152449131114778&w=2
Signed-off-by Gustavo A. R. Silva <[email protected]>
Applied.
Thanks,
Guenter
Quoted 27 lines
--- drivers/hwmon/nct6775.c | 2 ++ 1 file changed, 2 insertions(+)drivers/hwmon/nct6775.c +2
-0@@ -63,6 +63,7 @@#include <linux/bitops.h> #include <linux/dmi.h> #include <linux/io.h> +#include <linux/nospec.h> #include "lm75.h" #define USE_ALTERNATE @@ -2689,6 +2690,7 @@ store_pwm_weight_temp_sel(struct device *dev, struct device_attribute *attr,return err;if (val >NUM_TEMP )return -EINVAL ; + val =array_index_nospec (val,NUM_TEMP +1 );if (val && (!(data->have_temp &BIT (val -1 )) || !data->temp_src[val -1 ]))return -EINVAL ;Signature · 1 line
2.7.4