ALSA: firewire-lib: avoid NULL pointer dereference after closing MIDI port
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sun, 18 Oct 2015 13:58:37 +0000 (22:58 +0900)
committerTakashi Iwai <tiwai@suse.de>
Mon, 19 Oct 2015 09:58:21 +0000 (11:58 +0200)
When asynchronous MIDI port is closed before callbacked, the callback
function causes NULL pointer dereference to missing MIDI substream.

This commit fixes this bug.

Fixes: e8a40d9bcb23('ALSA: firewire-lib: schedule work again when MIDI substream has rest of MIDI messages')
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/lib.c

index edf1c8bd25a6600b67c3a3f3d697b3c1efb6c741..f80aafa44c89499ff92b0b3af0bc761ca49c0567 100644 (file)
@@ -74,7 +74,11 @@ static void async_midi_port_callback(struct fw_card *card, int rcode,
        struct snd_fw_async_midi_port *port = callback_data;
        struct snd_rawmidi_substream *substream = ACCESS_ONCE(port->substream);
 
-       if (rcode == RCODE_COMPLETE && substream != NULL)
+       /* This port is closed. */
+       if (substream == NULL)
+               return;
+
+       if (rcode == RCODE_COMPLETE)
                snd_rawmidi_transmit_ack(substream, port->consume_bytes);
        else if (!rcode_is_permanent_error(rcode))
                /* To start next transaction immediately for recovery. */
This page took 0.04018 seconds and 5 git commands to generate.