aboutsummaryrefslogtreecommitdiffstats
path: root/sound/core/rawmidi.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/core/rawmidi.c')
-rw-r--r--sound/core/rawmidi.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c
index eb68326c37d4..cbbed0db9e56 100644
--- a/sound/core/rawmidi.c
+++ b/sound/core/rawmidi.c
@@ -535,13 +535,15 @@ static int snd_rawmidi_release(struct inode *inode, struct file *file)
535{ 535{
536 struct snd_rawmidi_file *rfile; 536 struct snd_rawmidi_file *rfile;
537 struct snd_rawmidi *rmidi; 537 struct snd_rawmidi *rmidi;
538 struct module *module;
538 539
539 rfile = file->private_data; 540 rfile = file->private_data;
540 rmidi = rfile->rmidi; 541 rmidi = rfile->rmidi;
541 rawmidi_release_priv(rfile); 542 rawmidi_release_priv(rfile);
542 kfree(rfile); 543 kfree(rfile);
544 module = rmidi->card->module;
543 snd_card_file_remove(rmidi->card, file); 545 snd_card_file_remove(rmidi->card, file);
544 module_put(rmidi->card->module); 546 module_put(module);
545 return 0; 547 return 0;
546} 548}
547 549
@@ -829,6 +831,8 @@ static int snd_rawmidi_control_ioctl(struct snd_card *card,
829 831
830 if (get_user(device, (int __user *)argp)) 832 if (get_user(device, (int __user *)argp))
831 return -EFAULT; 833 return -EFAULT;
834 if (device >= SNDRV_RAWMIDI_DEVICES) /* next device is -1 */
835 device = SNDRV_RAWMIDI_DEVICES - 1;
832 mutex_lock(&register_mutex); 836 mutex_lock(&register_mutex);
833 device = device < 0 ? 0 : device + 1; 837 device = device < 0 ? 0 : device + 1;
834 while (device < SNDRV_RAWMIDI_DEVICES) { 838 while (device < SNDRV_RAWMIDI_DEVICES) {