From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753439AbZKPQq4 (ORCPT ); Mon, 16 Nov 2009 11:46:56 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752779AbZKPQq4 (ORCPT ); Mon, 16 Nov 2009 11:46:56 -0500 Received: from cantor2.suse.de ([195.135.220.15]:43523 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751331AbZKPQqz (ORCPT ); Mon, 16 Nov 2009 11:46:55 -0500 Date: Mon, 16 Nov 2009 17:46:56 +0100 Message-ID: From: Takashi Iwai To: Roel Kluin Cc: Jaroslav Kysela , alsa-devel@alsa-project.org, Andrew Morton , LKML Subject: Re: [PATCH] OSS: keep index within bounds of midi_devs[] In-Reply-To: <4B01782E.80802@gmail.com> References: <4B01782E.80802@gmail.com> User-Agent: Wanderlust/2.15.6 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.7 Emacs/23.1 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org At Mon, 16 Nov 2009 17:05:02 +0100, Roel Kluin wrote: > > When the {orig,midi}_dev equals num_midis, that's one too > large already. > > Signed-off-by: Roel Kluin > --- > In MIDIbuf_open() sound/oss/midibuf.c:166 > > if (num_midis > MAX_MIDI_DEV) > { > printk(KERN_ERR "midi: Too many midi interfaces\n"); > num_midis = MAX_MIDI_DEV; > } > > num_midis is at most MAX_MIDI_DEV. > > `git grep -n MAX_MIDI_DEV' and note that when the index equals > num_midis this causes reads/writes outside array bounds for > midi_devs, midi2synth, dev_conf and others (below check in patch). The fix looks correct to me. Applied now. Thanks. Takashi > > sound/oss/midi_synth.c | 2 +- > sound/oss/mpu401.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/sound/oss/midi_synth.c b/sound/oss/midi_synth.c > index 9e45098..3bc7104 100644 > --- a/sound/oss/midi_synth.c > +++ b/sound/oss/midi_synth.c > @@ -426,7 +426,7 @@ midi_synth_open(int dev, int mode) > int err; > struct midi_input_info *inc; > > - if (orig_dev < 0 || orig_dev > num_midis || midi_devs[orig_dev] == NULL) > + if (orig_dev < 0 || orig_dev >= num_midis || midi_devs[orig_dev] == NULL) > return -ENXIO; > > midi2synth[orig_dev] = dev; > diff --git a/sound/oss/mpu401.c b/sound/oss/mpu401.c > index 734b8f9..0af9d24 100644 > --- a/sound/oss/mpu401.c > +++ b/sound/oss/mpu401.c > @@ -770,7 +770,7 @@ static int mpu_synth_ioctl(int dev, unsigned int cmd, void __user *arg) > > midi_dev = synth_devs[dev]->midi_dev; > > - if (midi_dev < 0 || midi_dev > num_midis || midi_devs[midi_dev] == NULL) > + if (midi_dev < 0 || midi_dev >= num_midis || midi_devs[midi_dev] == NULL) > return -ENXIO; > > devc = &dev_conf[midi_dev]; >