aboutsummaryrefslogtreecommitdiffstats
path: root/sound/core
diff options
context:
space:
mode:
authorWei Yongjun <yongjun_wei@trendmicro.com.cn>2012-09-02 10:10:27 -0400
committerTakashi Iwai <tiwai@suse.de>2012-09-03 04:08:28 -0400
commit1f3b14072bacc80d62597ed7798e3daf7615dcc6 (patch)
treea848225ed17cd84c6c3eecb0c16e7d4e12bb457f /sound/core
parenta03e4a66c71b2bb33dc795eb6451a3d2ad1398bb (diff)
ALSA: fix possible memory leak in snd_mixer_oss_build_input()
uinfo has been allocated in this function and should be freed before leaving from the error handling cases. spatch with a semantic match is used to found this problem. (http://coccinelle.lip6.fr/) Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/core')
-rw-r--r--sound/core/oss/mixer_oss.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sound/core/oss/mixer_oss.c b/sound/core/oss/mixer_oss.c
index 18297f7f2c55..29f6ded02555 100644
--- a/sound/core/oss/mixer_oss.c
+++ b/sound/core/oss/mixer_oss.c
@@ -1046,6 +1046,7 @@ static int snd_mixer_oss_build_input(struct snd_mixer_oss *mixer, struct snd_mix
1046 1046
1047 if (kctl->info(kctl, uinfo)) { 1047 if (kctl->info(kctl, uinfo)) {
1048 up_read(&mixer->card->controls_rwsem); 1048 up_read(&mixer->card->controls_rwsem);
1049 kfree(uinfo);
1049 return 0; 1050 return 0;
1050 } 1051 }
1051 strcpy(str, ptr->name); 1052 strcpy(str, ptr->name);
@@ -1061,6 +1062,7 @@ static int snd_mixer_oss_build_input(struct snd_mixer_oss *mixer, struct snd_mix
1061 uinfo->value.enumerated.item = slot.capture_item; 1062 uinfo->value.enumerated.item = slot.capture_item;
1062 if (kctl->info(kctl, uinfo)) { 1063 if (kctl->info(kctl, uinfo)) {
1063 up_read(&mixer->card->controls_rwsem); 1064 up_read(&mixer->card->controls_rwsem);
1065 kfree(uinfo);
1064 return 0; 1066 return 0;
1065 } 1067 }
1066 if (!strcmp(uinfo->value.enumerated.name, str)) { 1068 if (!strcmp(uinfo->value.enumerated.name, str)) {