aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>2018-09-17 04:26:20 -0400
committerTakashi Iwai <tiwai@suse.de>2018-09-17 07:40:47 -0400
commit1064bc685d359f549f91c2d5f111965a9284f328 (patch)
tree3652ab2b6550eae8d284924338bd67c84891339b
parentce925f088b979537f22f9e05eb923ef9822ca139 (diff)
ALSA: oxfw: fix memory leak of discovered stream formats at error path
After finishing discover of stream formats, ALSA OXFW driver has memory leak of allocated memory object at error path. This commit releases the memory object at the error path. Fixes: 6c29230e2a5f ('ALSA: oxfw: delayed registration of sound card') Cc: <stable@vger.kernel.org> # v4.7+ Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/firewire/oxfw/oxfw.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/sound/firewire/oxfw/oxfw.c b/sound/firewire/oxfw/oxfw.c
index 75c6ba2fe3dc..2ea8be6c8584 100644
--- a/sound/firewire/oxfw/oxfw.c
+++ b/sound/firewire/oxfw/oxfw.c
@@ -208,6 +208,7 @@ static int detect_quirks(struct snd_oxfw *oxfw)
208static void do_registration(struct work_struct *work) 208static void do_registration(struct work_struct *work)
209{ 209{
210 struct snd_oxfw *oxfw = container_of(work, struct snd_oxfw, dwork.work); 210 struct snd_oxfw *oxfw = container_of(work, struct snd_oxfw, dwork.work);
211 int i;
211 int err; 212 int err;
212 213
213 if (oxfw->registered) 214 if (oxfw->registered)
@@ -270,6 +271,12 @@ error:
270 snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->rx_stream); 271 snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->rx_stream);
271 if (oxfw->has_output) 272 if (oxfw->has_output)
272 snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->tx_stream); 273 snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->tx_stream);
274 for (i = 0; i < SND_OXFW_STREAM_FORMAT_ENTRIES; ++i) {
275 kfree(oxfw->tx_stream_formats[i]);
276 oxfw->tx_stream_formats[i] = NULL;
277 kfree(oxfw->rx_stream_formats[i]);
278 oxfw->rx_stream_formats[i] = NULL;
279 }
273 snd_card_free(oxfw->card); 280 snd_card_free(oxfw->card);
274 kfree(oxfw->spec); 281 kfree(oxfw->spec);
275 oxfw->spec = NULL; 282 oxfw->spec = NULL;