ALSA: rawmidi - Fix possible race in open

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Linux Kernel Mailing List
Date: Thursday, March 26, 2009 - 12:04 pm

Gitweb:     http://git.kernel.org/linus/f9d202833d0beac09ef1c6a41305151da4fe5d4c
Commit:     f9d202833d0beac09ef1c6a41305151da4fe5d4c
Parent:     fec6c6fec3e20637bee5d276fb61dd8b49a3f9cc
Author:     Takashi Iwai <tiwai@suse.de>
AuthorDate: Wed Feb 11 14:55:59 2009 +0100
Committer:  Takashi Iwai <tiwai@suse.de>
CommitDate: Mon Mar 9 15:17:21 2009 +0100

    ALSA: rawmidi - Fix possible race in open
    
    The module refcount should be handled in the register_mutex to avoid
    possible races with module unloading.
    
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/core/rawmidi.c |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c
index 002777b..60f33e9 100644
--- a/sound/core/rawmidi.c
+++ b/sound/core/rawmidi.c
@@ -237,15 +237,16 @@ int snd_rawmidi_kernel_open(struct snd_card *card, int device, int subdevice,
 		rfile->input = rfile->output = NULL;
 	mutex_lock(&register_mutex);
 	rmidi = snd_rawmidi_search(card, device);
-	mutex_unlock(&register_mutex);
 	if (rmidi == NULL) {
-		err = -ENODEV;
-		goto __error1;
+		mutex_unlock(&register_mutex);
+		return -ENODEV;
 	}
 	if (!try_module_get(rmidi->card->module)) {
-		err = -EFAULT;
-		goto __error1;
+		mutex_unlock(&register_mutex);
+		return -ENXIO;
 	}
+	mutex_unlock(&register_mutex);
+
 	if (!(mode & SNDRV_RAWMIDI_LFLG_NOOPENLOCK))
 		mutex_lock(&rmidi->open_mutex);
 	if (mode & SNDRV_RAWMIDI_LFLG_INPUT) {
@@ -370,10 +371,9 @@ int snd_rawmidi_kernel_open(struct snd_card *card, int device, int subdevice,
 		snd_rawmidi_runtime_free(sinput);
 	if (output != NULL)
 		snd_rawmidi_runtime_free(soutput);
-	module_put(rmidi->card->module);
 	if (!(mode & SNDRV_RAWMIDI_LFLG_NOOPENLOCK))
 		mutex_unlock(&rmidi->open_mutex);
-      __error1:
+	module_put(rmidi->card->module);
 	return err;
 }
 
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
ALSA: rawmidi - Fix possible race in open, Linux Kernel Mailing ..., (Thu Mar 26, 12:04 pm)