|
@@ -21,6 +21,7 @@
|
|
|
|
|
|
#include <linux/slab.h>
|
|
|
#include <linux/export.h>
|
|
|
+#include <linux/nospec.h>
|
|
|
#include <sound/opl3.h>
|
|
|
#include <sound/asound_fm.h>
|
|
|
|
|
@@ -448,7 +449,7 @@ static int snd_opl3_set_voice(struct snd_opl3 * opl3, struct snd_dm_fm_voice * v
|
|
|
{
|
|
|
unsigned short reg_side;
|
|
|
unsigned char op_offset;
|
|
|
- unsigned char voice_offset;
|
|
|
+ unsigned char voice_offset, voice_op;
|
|
|
|
|
|
unsigned short opl3_reg;
|
|
|
unsigned char reg_val;
|
|
@@ -473,7 +474,9 @@ static int snd_opl3_set_voice(struct snd_opl3 * opl3, struct snd_dm_fm_voice * v
|
|
|
voice_offset = voice->voice - MAX_OPL2_VOICES;
|
|
|
}
|
|
|
/* Get register offset of operator */
|
|
|
- op_offset = snd_opl3_regmap[voice_offset][voice->op];
|
|
|
+ voice_offset = array_index_nospec(voice_offset, MAX_OPL2_VOICES);
|
|
|
+ voice_op = array_index_nospec(voice->op, 4);
|
|
|
+ op_offset = snd_opl3_regmap[voice_offset][voice_op];
|
|
|
|
|
|
reg_val = 0x00;
|
|
|
/* Set amplitude modulation (tremolo) effect */
|