sound: rawmidi: fix checking of O_APPEND when opening MIDI device
authorClemens Ladisch <clemens@ladisch.de>
Wed, 21 Oct 2009 07:10:16 +0000 (09:10 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 10 Nov 2009 15:21:30 +0000 (16:21 +0100)
Commit 9a1b64caac82aa02cb74587ffc798e6f42c6170a in 2.6.30 dropped the
check that a substream must already have been opened with O_APPEND to be
able to open it a second time.

This would make it possible for a substream to be switched to append
mode, which would mean that non-atomic writes would fail unexpectedly.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Cc: <stable@kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/rawmidi.c

index 3071e6f5801e24ef6c12a062bde725d80df1b002..091405385e158fc6b9475d07c0bba1fa0161374b 100644 (file)
@@ -248,7 +248,8 @@ static int assign_substream(struct snd_rawmidi *rmidi, int subdevice,
        list_for_each_entry(substream, &s->substreams, list) {
                if (substream->opened) {
                        if (stream == SNDRV_RAWMIDI_STREAM_INPUT ||
-                           !(mode & SNDRV_RAWMIDI_LFLG_APPEND))
+                           !(mode & SNDRV_RAWMIDI_LFLG_APPEND) ||
+                           !substream->append)
                                continue;
                }
                if (subdevice < 0 || subdevice == substream->number) {