1 From stable-bounces@linux.kernel.org Mon Feb 20 18:32:46 2006
2 Date: Mon, 20 Feb 2006 18:28:00 -0800
5 Cc: tiwai@suse.de, greg@kroah.com, jk@blackdown.de, stable@kernel.org, perex@suse.cz
6 Subject: [PATCH] Fix snd-usb-audio in 32-bit compat environment
8 From: Juergen Kreileder <jk@blackdown.de>
10 I'm getting oopses with snd-usb-audio in 32-bit compat environments:
11 control_compat.c:get_ctl_type() doesn't initialize 'info', so
12 'itemlist[uinfo->value.enumerated.item]' in
13 usbmixer.c:mixer_ctl_selector_info() might access random memory (The 'if
14 ((int)uinfo->value.enumerated.item >= cval->max)' doesn't fix all problems
15 because of the unsigned -> signed conversion.)
17 Signed-off-by: Juergen Kreileder <jk@blackdown.de>
18 Cc: Jaroslav Kysela <perex@suse.cz>
19 Acked-by: Takashi Iwai <tiwai@suse.de>
20 Signed-off-by: Andrew Morton <akpm@osdl.org>
21 Signed-off-by: Chris Wright <chrisw@sous-sol.org>
22 Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
25 sound/core/control_compat.c | 16 +++++++++++-----
26 1 files changed, 11 insertions(+), 5 deletions(-)
28 --- linux-2.6.15.4.orig/sound/core/control_compat.c
29 +++ linux-2.6.15.4/sound/core/control_compat.c
30 @@ -164,7 +164,7 @@ struct sndrv_ctl_elem_value32 {
31 static int get_ctl_type(snd_card_t *card, snd_ctl_elem_id_t *id, int *countp)
34 - snd_ctl_elem_info_t info;
35 + snd_ctl_elem_info_t *info;
38 down_read(&card->controls_rwsem);
39 @@ -173,13 +173,19 @@ static int get_ctl_type(snd_card_t *card
40 up_read(&card->controls_rwsem);
44 - err = kctl->info(kctl, &info);
45 + info = kzalloc(sizeof(*info), GFP_KERNEL);
47 + up_read(&card->controls_rwsem);
51 + err = kctl->info(kctl, info);
52 up_read(&card->controls_rwsem);
55 - *countp = info.count;
57 + *countp = info->count;