⬢ DragonFlyBSD Kernel Audit
DF-4283 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/sound/midi/midi.c
+++ b/sys/dev/sound/midi/midi.c
@@ -185,7 +185,8 @@ static d_open_t midistat_open;
 static d_close_t midistat_close;
 static d_read_t midistat_read;
 
-static void	midi_filter_detach(struct knote *);
+static void	midi_filter_detach_read(struct knote *);
+static void	midi_filter_detach_write(struct knote *);
 static int	midi_filter_read(struct knote *, long);
 static int	midi_filter_write(struct knote *, long);
 
@@ -196,9 +197,9 @@ static struct dev_ops midistat_ops = {
 };
 
 static struct filterops midi_read_filterops =
-	{ FILTEROP_ISFD, NULL, midi_filter_detach, midi_filter_read };
+	{ FILTEROP_ISFD, NULL, midi_filter_detach_read, midi_filter_read };
 static struct filterops midi_write_filterops =
-	{ FILTEROP_ISFD, NULL, midi_filter_detach, midi_filter_write };
+	{ FILTEROP_ISFD, NULL, midi_filter_detach_write, midi_filter_write };
 
 /*
  * /dev/rmidi dev_t declarations, struct variable access is protected by
@@ -930,15 +931,19 @@ midi_kqfilter(struct dev_kqfilter_args *ap)
 }
 
 static void
-midi_filter_detach(struct knote *kn)
+midi_filter_detach_read(struct knote *kn)
 {
 	struct snd_midi *m = (struct snd_midi *)kn->kn_hook;
-	struct klist *rklist = &m->rkq.ki_note;
-	struct klist *wklist = &m->wkq.ki_note;
 
-	knote_remove(rklist, kn);
-	knote_remove(wklist, kn);
+	knote_remove(&m->rkq.ki_note, kn);
+}
+
+static void
+midi_filter_detach_write(struct knote *kn)
+{
+	struct snd_midi *m = (struct snd_midi *)kn->kn_hook;
+
+	knote_remove(&m->wkq.ki_note, kn);
 }
 
 static int