Skip to content

Commit

Permalink
sound/oss/opl3: validate voice and channel indexes
Browse files Browse the repository at this point in the history
User-controllable indexes for voice and channel values may cause reading
and writing beyond the bounds of their respective arrays, leading to
potentially exploitable memory corruption.  Validate these indexes.

Signed-off-by: Dan Rosenberg <[email protected]>
Cc: [email protected]
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
Dan Rosenberg authored and tiwai committed Mar 23, 2011
1 parent b769f49 commit 4d00135
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions sound/oss/opl3.c
Original file line number Diff line number Diff line change
Expand Up @@ -845,6 +845,10 @@ static int opl3_load_patch(int dev, int format, const char __user *addr,

static void opl3_panning(int dev, int voice, int value)
{

if (voice < 0 || voice >= devc->nr_voice)
return;

devc->voc[voice].panning = value;
}

Expand Down Expand Up @@ -1062,8 +1066,15 @@ static int opl3_alloc_voice(int dev, int chn, int note, struct voice_alloc_info

static void opl3_setup_voice(int dev, int voice, int chn)
{
struct channel_info *info =
&synth_devs[dev]->chn_info[chn];
struct channel_info *info;

if (voice < 0 || voice >= devc->nr_voice)
return;

if (chn < 0 || chn > 15)
return;

info = &synth_devs[dev]->chn_info[chn];

opl3_set_instr(dev, voice, info->pgm_num);

Expand Down

0 comments on commit 4d00135

Please sign in to comment.