diff options
author | Wei Yongjun <yongjun_wei@trendmicro.com.cn> | 2012-09-02 10:10:27 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2012-09-03 04:08:28 -0400 |
commit | 1f3b14072bacc80d62597ed7798e3daf7615dcc6 (patch) | |
tree | a848225ed17cd84c6c3eecb0c16e7d4e12bb457f /sound/core | |
parent | a03e4a66c71b2bb33dc795eb6451a3d2ad1398bb (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.c | 2 |
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)) { |