misc: hmc6352: fix potential Spectre v1
commit de916736aa
upstream.
val is 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:
drivers/misc/hmc6352.c:54 compass_store() warn: potential spectre issue
'map' [r]
Fix this by sanitizing val before using it to index map
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
Cc: stable@vger.kernel.org
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
c527796fdb
commit
68fe884e7b
@ -27,6 +27,7 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/sysfs.h>
|
#include <linux/sysfs.h>
|
||||||
|
#include <linux/nospec.h>
|
||||||
|
|
||||||
static DEFINE_MUTEX(compass_mutex);
|
static DEFINE_MUTEX(compass_mutex);
|
||||||
|
|
||||||
@ -50,6 +51,7 @@ static int compass_store(struct device *dev, const char *buf, size_t count,
|
|||||||
return ret;
|
return ret;
|
||||||
if (val >= strlen(map))
|
if (val >= strlen(map))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
val = array_index_nospec(val, strlen(map));
|
||||||
mutex_lock(&compass_mutex);
|
mutex_lock(&compass_mutex);
|
||||||
ret = compass_command(c, map[val]);
|
ret = compass_command(c, map[val]);
|
||||||
mutex_unlock(&compass_mutex);
|
mutex_unlock(&compass_mutex);
|
||||||
|
Reference in New Issue
Block a user