mirror of
https://github.com/torvalds/linux.git
synced 2026-09-12 20:53:03 +02:00
ALSA: ump: Fix corrupted data bytes at MIDI 1.0 SysEx to UMP conversion
The cvt_legacy_sysex_to_ump() initialises only the first word of the
output packet and ORs the data bytes into it. The second word is left
alone, and the conversion context is kept across calls, so it still
carries the previous packet's bytes. Those stale bits corrupt the new
data. Any SysEx longer than six data bytes is affected.
A SysEx with the twelve data bytes 01..0c comes out as:
30160102 03040506
30260708 0b0e0f0e
The second packet declares six data bytes and four of them are wrong,
inside the declared length.
The sibling cvt_legacy_cmd_to_ump() already clears the second word. Do
the same here.
Fixes: 0b5288f5fe ("ALSA: ump: Add legacy raw MIDI support")
Cc: stable@vger.kernel.org
Assisted-by: Claude:claude-opus-5
Signed-off-by: HyeongJun An <sammiee5311@gmail.com>
Link: https://patch.msgid.link/20260808014554.3550153-1-sammiee5311@gmail.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
140fe610af
commit
8a906c0b4f
|
|
@ -258,6 +258,7 @@ static int cvt_legacy_sysex_to_ump(struct ump_cvt_to_ump *cvt,
|
|||
else
|
||||
status = UMP_SYSEX_STATUS_CONTINUE;
|
||||
*data = ump_compose(UMP_MSG_TYPE_DATA, group, status, cvt->len);
|
||||
data[1] = 0;
|
||||
offset = 8;
|
||||
for (i = 0; i < cvt->len; i++) {
|
||||
*data |= cvt->buf[i] << offset;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user