Commit 57220bc1 authored by Dan Carpenter's avatar Dan Carpenter Committed by Takashi Iwai

sound: sequencer: cap array index in seq_chn_common_event()

"chn" here is a number between 0 and 255, but ->chn_info[] only has
16 elements so there is a potential write beyond the end of the
array.

If the seq_mode isn't SEQ_2 then we let the individual drivers
(either opl3.c or midi_synth.c) handle it.  Those functions all
do a bounds check on "chn" so I haven't changed anything here.
The opl3.c driver has up to 18 channels and not 16.
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent b714a710
...@@ -545,6 +545,9 @@ static void seq_chn_common_event(unsigned char *event_rec) ...@@ -545,6 +545,9 @@ static void seq_chn_common_event(unsigned char *event_rec)
case MIDI_PGM_CHANGE: case MIDI_PGM_CHANGE:
if (seq_mode == SEQ_2) if (seq_mode == SEQ_2)
{ {
if (chn > 15)
break;
synth_devs[dev]->chn_info[chn].pgm_num = p1; synth_devs[dev]->chn_info[chn].pgm_num = p1;
if ((int) dev >= num_synths) if ((int) dev >= num_synths)
synth_devs[dev]->set_instr(dev, chn, p1); synth_devs[dev]->set_instr(dev, chn, p1);
...@@ -596,6 +599,9 @@ static void seq_chn_common_event(unsigned char *event_rec) ...@@ -596,6 +599,9 @@ static void seq_chn_common_event(unsigned char *event_rec)
case MIDI_PITCH_BEND: case MIDI_PITCH_BEND:
if (seq_mode == SEQ_2) if (seq_mode == SEQ_2)
{ {
if (chn > 15)
break;
synth_devs[dev]->chn_info[chn].bender_value = w14; synth_devs[dev]->chn_info[chn].bender_value = w14;
if ((int) dev < num_synths) if ((int) dev < num_synths)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment