forked from luck/tmp_suning_uos_patched
ALSA: emu10k1: Fix potential Spectre v1 vulnerabilities
ipcm->substream 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: sound/pci/emu10k1/emufx.c:1031 snd_emu10k1_ipcm_poke() warn: potential spectre issue 'emu->fx8010.pcm' [r] (local cap) sound/pci/emu10k1/emufx.c:1075 snd_emu10k1_ipcm_peek() warn: potential spectre issue 'emu->fx8010.pcm' [r] (local cap) Fix this by sanitizing ipcm->substream before using it to index emu->fx8010.pcm 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: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
0b84304ef5
commit
5ae4f61f01
|
@ -36,6 +36,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/nospec.h>
|
||||
|
||||
#include <sound/core.h>
|
||||
#include <sound/tlv.h>
|
||||
|
@ -1026,6 +1027,8 @@ static int snd_emu10k1_ipcm_poke(struct snd_emu10k1 *emu,
|
|||
|
||||
if (ipcm->substream >= EMU10K1_FX8010_PCM_COUNT)
|
||||
return -EINVAL;
|
||||
ipcm->substream = array_index_nospec(ipcm->substream,
|
||||
EMU10K1_FX8010_PCM_COUNT);
|
||||
if (ipcm->channels > 32)
|
||||
return -EINVAL;
|
||||
pcm = &emu->fx8010.pcm[ipcm->substream];
|
||||
|
@ -1072,6 +1075,8 @@ static int snd_emu10k1_ipcm_peek(struct snd_emu10k1 *emu,
|
|||
|
||||
if (ipcm->substream >= EMU10K1_FX8010_PCM_COUNT)
|
||||
return -EINVAL;
|
||||
ipcm->substream = array_index_nospec(ipcm->substream,
|
||||
EMU10K1_FX8010_PCM_COUNT);
|
||||
pcm = &emu->fx8010.pcm[ipcm->substream];
|
||||
mutex_lock(&emu->fx8010.lock);
|
||||
spin_lock_irq(&emu->reg_lock);
|
||||
|
|
Loading…
Reference in New Issue
Block a user