浏览代码

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>
Takashi Sakamoto 6 年之前
父节点
当前提交
1064bc685d
共有 1 个文件被更改,包括 7 次插入0 次删除
  1. 7 0
      sound/firewire/oxfw/oxfw.c

+ 7 - 0
sound/firewire/oxfw/oxfw.c

@@ -208,6 +208,7 @@ static int detect_quirks(struct snd_oxfw *oxfw)
 static void do_registration(struct work_struct *work)
 static void do_registration(struct work_struct *work)
 {
 {
 	struct snd_oxfw *oxfw = container_of(work, struct snd_oxfw, dwork.work);
 	struct snd_oxfw *oxfw = container_of(work, struct snd_oxfw, dwork.work);
+	int i;
 	int err;
 	int err;
 
 
 	if (oxfw->registered)
 	if (oxfw->registered)
@@ -270,6 +271,12 @@ error:
 	snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->rx_stream);
 	snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->rx_stream);
 	if (oxfw->has_output)
 	if (oxfw->has_output)
 		snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->tx_stream);
 		snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->tx_stream);
+	for (i = 0; i < SND_OXFW_STREAM_FORMAT_ENTRIES; ++i) {
+		kfree(oxfw->tx_stream_formats[i]);
+		oxfw->tx_stream_formats[i] = NULL;
+		kfree(oxfw->rx_stream_formats[i]);
+		oxfw->rx_stream_formats[i] = NULL;
+	}
 	snd_card_free(oxfw->card);
 	snd_card_free(oxfw->card);
 	kfree(oxfw->spec);
 	kfree(oxfw->spec);
 	oxfw->spec = NULL;
 	oxfw->spec = NULL;