{"id":15021,"date":"2026-09-04T19:02:22","date_gmt":"2026-09-04T11:02:22","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-64029"},"modified":"2026-09-04T19:02:22","modified_gmt":"2026-09-04T11:02:22","slug":"cve-2026-64029","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-64029","title":{"rendered":"CVE-2026-64029 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nALSA: seq: Serialize"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ALSA: seq: Serialize UMP output teardown with event_input<\/p>\n<p>seq_ump_process_event() borrows client-&gt;out_rfile.output without<br \/>\nsynchronizing with the first-open and last-close transition in<br \/>\nseq_ump_client_open() and seq_ump_client_close().<\/p>\n<p>The last output unuse can therefore drop opened[STR_OUT] to zero and<br \/>\nrelease the rawmidi file while an in-flight event_input callback is still<br \/>\ninside snd_rawmidi_kernel_write(). That leaves the rawmidi substream<br \/>\nruntime exposed to teardown before the write path has taken its own<br \/>\nbuffer reference.<\/p>\n<p>Add a per-client rwlock for the event_input-visible output file. Publish<br \/>\na newly opened output file under the write side, and hold the read side<br \/>\nfrom the output lookup through snd_rawmidi_kernel_write(). The last<br \/>\noutput close copies and clears the visible output file under the write<br \/>\nside, then drops the lock and releases the saved rawmidi file. Use<br \/>\nIRQ-safe rwlock guards because event_input can also be reached from<br \/>\natomic sequencer delivery.<\/p>\n<p>The buggy scenario involves two paths, with each column showing the<br \/>\norder within that path:<\/p>\n<p>path A label: event_input path         path B label: last unuse path<br \/>\n1. seq_ump_process_event() reads       1. seq_ump_client_close()<br \/>\n   client-&gt;out_rfile.output.              drops opened[STR_OUT] to zero.<br \/>\n2. snd_rawmidi_kernel_write1()         2. snd_rawmidi_kernel_release()<br \/>\n   has not yet pinned runtime.            closes the output file.<br \/>\n3. The writer continues using          3. close_substream() frees<br \/>\n   the borrowed substream.                substream-&gt;runtime.<\/p>\n<p>This keeps the output substream and runtime alive for the full<br \/>\nevent_input write while keeping rawmidi release outside the rwlock.<\/p>\n<p>KASAN reproduced this as a slab-use-after-free in<br \/>\nsnd_rawmidi_kernel_write1(), with allocation through<br \/>\nseq_ump_use()\/snd_seq_port_connect() and free through<br \/>\nseq_ump_unuse()\/snd_seq_port_disconnect().<\/p>\n<p>Validation reproduced this kernel report:<br \/>\nKASAN slab-use-after-free in snd_rawmidi_kernel_write1+0x9d\/0x400<br \/>\nRIP: 0033:0x7f5528af837f<br \/>\nRead of size 8<br \/>\nCall trace:<br \/>\n  dump_stack_lvl+0x73\/0xb0 (?:?)<br \/>\n  print_report+0xd1\/0x650 (?:?)<br \/>\n  srso_alias_return_thunk+0x5\/0xfbef5 (?:?)<br \/>\n  __virt_addr_valid+0x1a7\/0x340 (?:?)<br \/>\n  kasan_complete_mode_report_info+0x64\/0x200 (?:?)<br \/>\n  kasan_report+0xf7\/0x130 (?:?)<br \/>\n  snd_rawmidi_kernel_write1+0x9d\/0x400 (?:?)<br \/>\n  __asan_load8+0x82\/0xb0 (?:?)<br \/>\n  update_stack_state+0x1ef\/0x2d0 (?:?)<br \/>\n  snd_rawmidi_kernel_write+0x1a\/0x20 (?:?)<br \/>\n  seq_ump_process_event+0xd4\/0x120 (sound\/core\/seq\/seq_ump_client.c:82)<br \/>\n  __snd_seq_deliver_single_event+0x8a\/0xe0 (?:?)<br \/>\n  snd_seq_deliver_from_ump+0x2b2\/0xd60 (?:?)<br \/>\n  lock_acquire+0x14e\/0x2e0 (?:?)<br \/>\n  find_held_lock+0x31\/0x90 (?:?)<br \/>\n  snd_seq_port_use_ptr+0xa6\/0xe0 (?:?)<br \/>\n  __kasan_check_write+0x18\/0x20 (?:?)<br \/>\n  do_raw_read_unlock+0x32\/0xa0 (?:?)<br \/>\n  _raw_read_unlock+0x26\/0x50 (?:?)<br \/>\n  snd_seq_deliver_single_event+0x45c\/0x4b0 (?:?)<br \/>\n  snd_seq_deliver_event+0x10d\/0x1b0 (?:?)<br \/>\n  snd_seq_client_enqueue_event+0x192\/0x240 (?:?)<br \/>\n  snd_seq_write+0x2cd\/0x450 (?:?)<br \/>\n  apparmor_file_permission+0x20\/0x30 (?:?)<br \/>\n  security_file_permission+0x51\/0x60 (?:?)<br \/>\n  vfs_write+0x1ce\/0x850 (?:?)<br \/>\n  __fget_files+0x12b\/0x220 (?:?)<br \/>\n  lock_release+0xc8\/0x2a0 (?:?)<br \/>\n  __rcu_read_unlock+0x74\/0x2d0 (?:?)<br \/>\n  __fget_files+0x135\/0x220 (?:?)<br \/>\n  ksys_write+0x15a\/0x180 (?:?)<br \/>\n  rcu_is_watching+0x24\/0x60 (?:?)<br \/>\n  __x64_sys_write+0x46\/0x60 (?:?)<br \/>\n  x64_sys_call+0x7d\/0x20d0 (?:?)<br \/>\n  do_syscall_64+0xc1\/0x360 (arch\/x86\/entry\/syscall_64.c:87)<br \/>\n  entry_SYSCALL_64_after_hwframe+0x77\/0x7f (?:?)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ALSA: seq: Serialize UMP output teardown with event_input<\/p>\n<p>seq_ump_process_event() borrows client-&gt;out_rfile.output without<br \/>\nsynchro<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-15021","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/15021","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15021"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15021"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}