Commit ac0d71ee authored by Takashi Iwai's avatar Takashi Iwai

ALSA: ump: Don't accept an invalid UMP protocol number

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: a7980768 ("ALSA: ump: Add helper to change MIDI protocol")
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20240529164723.18309-1-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 6d40dbc7
...@@ -685,10 +685,17 @@ static void seq_notify_protocol(struct snd_ump_endpoint *ump) ...@@ -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) int snd_ump_switch_protocol(struct snd_ump_endpoint *ump, unsigned int protocol)
{ {
unsigned int type;
protocol &= ump->info.protocol_caps; protocol &= ump->info.protocol_caps;
if (protocol == ump->info.protocol) if (protocol == ump->info.protocol)
return 0; 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->info.protocol = protocol;
ump_dbg(ump, "New protocol = %x (caps = %x)\n", ump_dbg(ump, "New protocol = %x (caps = %x)\n",
protocol, ump->info.protocol_caps); protocol, ump->info.protocol_caps);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment