diff options
author | Jesper Juhl <jj@chaosbits.net> | 2010-10-29 14:40:23 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2010-11-01 05:23:39 -0400 |
commit | 8a8d56b2a2f9aa423c3d8b6b1e2792c0492059ed (patch) | |
tree | 03fa96d09560dcc68a059318a4100157d37da806 /sound/usb/pcm.c | |
parent | 89e1e66d6be8a520cdcd26043cda2cc870a34015 (diff) |
ALSA: usb - driver neglects kmalloc return value check and may deref NULL
sound/usb/pcm.c::snd_usb_pcm_check_knot() fails to check the return value
from kmalloc() and may end up dereferencing a null pointer.
The patch below (compile tested only) should take care of that little
problem.
Signed-off-by: Jesper Juhl <jj@chaosbits.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb/pcm.c')
-rw-r--r-- | sound/usb/pcm.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c index cff3a3c465d7..4132522ac90f 100644 --- a/sound/usb/pcm.c +++ b/sound/usb/pcm.c | |||
@@ -676,8 +676,10 @@ static int snd_usb_pcm_check_knot(struct snd_pcm_runtime *runtime, | |||
676 | if (!needs_knot) | 676 | if (!needs_knot) |
677 | return 0; | 677 | return 0; |
678 | 678 | ||
679 | subs->rate_list.count = count; | ||
680 | subs->rate_list.list = kmalloc(sizeof(int) * count, GFP_KERNEL); | 679 | subs->rate_list.list = kmalloc(sizeof(int) * count, GFP_KERNEL); |
680 | if (!subs->rate_list.list) | ||
681 | return -ENOMEM; | ||
682 | subs->rate_list.count = count; | ||
681 | subs->rate_list.mask = 0; | 683 | subs->rate_list.mask = 0; |
682 | count = 0; | 684 | count = 0; |
683 | list_for_each_entry(fp, &subs->fmt_list, list) { | 685 | list_for_each_entry(fp, &subs->fmt_list, list) { |