ALSA: seq: Drop UMP events when no UMP-conversion is set
[ Upstream commite77aa4b2ea] When a destination client is a user client in the legacy MIDI mode and it sets the no-UMP-conversion flag, currently the all UMP events are still passed as-is. But this may confuse the user-space, because the event packet size is different from the legacy mode. Since we cannot handle UMP events in user clients unless it's running in the UMP client mode, we should filter out those events instead of accepting blindly. This patch addresses it by slightly adjusting the conditions for UMP event handling at the event delivery time. Fixes:329ffe11a0("ALSA: seq: Allow suppressing UMP conversions") Link: https://lore.kernel.org/b77a2cd6-7b59-4eb0-a8db-22d507d3af5f@gmail.com Link: https://patch.msgid.link/20250217170034.21930-1-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
de4b679aa3
commit
48e348ff3e
@@ -682,12 +682,18 @@ static int snd_seq_deliver_single_event(struct snd_seq_client *client,
|
||||
dest_port->time_real);
|
||||
|
||||
#if IS_ENABLED(CONFIG_SND_SEQ_UMP)
|
||||
if (!(dest->filter & SNDRV_SEQ_FILTER_NO_CONVERT)) {
|
||||
if (snd_seq_ev_is_ump(event)) {
|
||||
if (snd_seq_ev_is_ump(event)) {
|
||||
if (!(dest->filter & SNDRV_SEQ_FILTER_NO_CONVERT)) {
|
||||
result = snd_seq_deliver_from_ump(client, dest, dest_port,
|
||||
event, atomic, hop);
|
||||
goto __skip;
|
||||
} else if (snd_seq_client_is_ump(dest)) {
|
||||
} else if (dest->type == USER_CLIENT &&
|
||||
!snd_seq_client_is_ump(dest)) {
|
||||
result = 0; // drop the event
|
||||
goto __skip;
|
||||
}
|
||||
} else if (snd_seq_client_is_ump(dest)) {
|
||||
if (!(dest->filter & SNDRV_SEQ_FILTER_NO_CONVERT)) {
|
||||
result = snd_seq_deliver_to_ump(client, dest, dest_port,
|
||||
event, atomic, hop);
|
||||
goto __skip;
|
||||
|
||||
Reference in New Issue
Block a user