ALSA: oxfw: fix memory leak of discovered stream formats at error path
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 17 Sep 2018 08:26:20 +0000 (17:26 +0900)
committerTakashi Iwai <tiwai@suse.de>
Mon, 17 Sep 2018 11:40:47 +0000 (13:40 +0200)
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>
sound/firewire/oxfw/oxfw.c

index 75c6ba2fe3dc7eaa23bcdf2df36bd77c2b32a5f8..2ea8be6c858460dfb7c2b55fd380ca313d69c652 100644 (file)
@@ -208,6 +208,7 @@ static int detect_quirks(struct snd_oxfw *oxfw)
 static void do_registration(struct work_struct *work)
 {
        struct snd_oxfw *oxfw = container_of(work, struct snd_oxfw, dwork.work);
+       int i;
        int err;
 
        if (oxfw->registered)
@@ -270,6 +271,12 @@ error:
        snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->rx_stream);
        if (oxfw->has_output)
                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);
        kfree(oxfw->spec);
        oxfw->spec = NULL;