]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ALSA: ump: Don't accept an invalid UMP protocol number
authorTakashi Iwai <tiwai@suse.de>
Wed, 29 May 2024 16:47:16 +0000 (18:47 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 16 Jun 2024 11:47:47 +0000 (13:47 +0200)
commit ac0d71ee534e67c7e53439e8e9cb45ed40731660 upstream.

When a UMP Stream Configuration message is received, the driver tries
to switch the protocol, but there was no sanity check of the protocol,
hence it can pass an invalid value.  Add the check and bail out if a
wrong value is passed.

Fixes: a79807683781 ("ALSA: ump: Add helper to change MIDI protocol")
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20240529164723.18309-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
sound/core/ump.c

index fe7911498cc4325a866a87328087c54a0a6c791a..3cd07c103d9ea09713b2355c213eeb5d67455813 100644 (file)
@@ -685,10 +685,17 @@ static void seq_notify_protocol(struct snd_ump_endpoint *ump)
  */
 int snd_ump_switch_protocol(struct snd_ump_endpoint *ump, unsigned int protocol)
 {
+       unsigned int type;
+
        protocol &= ump->info.protocol_caps;
        if (protocol == ump->info.protocol)
                return 0;
 
+       type = protocol & SNDRV_UMP_EP_INFO_PROTO_MIDI_MASK;
+       if (type != SNDRV_UMP_EP_INFO_PROTO_MIDI1 &&
+           type != SNDRV_UMP_EP_INFO_PROTO_MIDI2)
+               return 0;
+
        ump->info.protocol = protocol;
        ump_dbg(ump, "New protocol = %x (caps = %x)\n",
                protocol, ump->info.protocol_caps);