{"id":41331,"date":"2026-10-19T00:33:16","date_gmt":"2026-10-18T16:33:16","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98859"},"modified":"2026-10-19T00:33:16","modified_gmt":"2026-10-18T16:33:16","slug":"cve-2026-98859","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98859","title":{"rendered":"CVE-2026-98859 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nHID: multitouch: stop"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>HID: multitouch: stop the release timer from being rearmed on remove<\/p>\n<p>mt_remove() quiesces the sticky-finger timer before stopping the<br \/>\nhardware:<\/p>\n<p>    timer_delete_sync(&amp;td-&gt;release_timer);<\/p>\n<p>    sysfs_remove_group(&amp;hdev-&gt;dev.kobj, &amp;mt_attribute_group);<br \/>\n    hid_hw_stop(hdev);<\/p>\n<p>timer_delete_sync() waits for a running callback and dequeues the timer,<br \/>\nbut it does not stop the timer from being armed again. The transport is<br \/>\nstill delivering reports at that point, and the report path rearms it:<\/p>\n<p>    if (app-&gt;quirks &amp; MT_QUIRK_STICKY_FINGERS) {<br \/>\n        if (td-&gt;mt_io_flags &amp; MT_IO_SLOTS_MASK)<br \/>\n            mod_timer(&amp;td-&gt;release_timer,<br \/>\n                      jiffies + msecs_to_jiffies(100));<\/p>\n<p>A report that arrives after timer_delete_sync() has returned therefore<br \/>\nleaves the timer queued. td is allocated with devm_kzalloc() against<br \/>\nhdev-&gt;dev, so it is freed when the driver is unbound, after mt_remove()<br \/>\nreturns. When the timer fires afterwards, mt_expired_timeout()<br \/>\ndereferences the freed td:<\/p>\n<p>    struct mt_device *td = timer_container_of(td, t, release_timer);<br \/>\n    struct hid_device *hdev = td-&gt;hdev;<\/p>\n<p>    if (test_and_set_bit_lock(MT_IO_FLAGS_RUNNING, &amp;td-&gt;mt_io_flags))<\/p>\n<p>Simply moving the teardown after hid_hw_stop() does not fix this on its<br \/>\nown, because mt_expired_timeout() calls mt_release_contacts(), which<br \/>\nwalks hdev-&gt;inputs; the timer still has to be quiesced before<br \/>\nhid_hw_stop() tears the input devices down.<\/p>\n<p>Use timer_shutdown_sync() instead, which additionally makes any later<br \/>\nmod_timer() a no-op, so neither ordering constraint has to be traded off<br \/>\nagainst the other. This is the final-teardown pattern the function was<br \/>\nintroduced for, and hid-wiimote already uses it for the same reason.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>HID: multitouch: stop the release timer from being rearmed on remove<\/p>\n<p>mt_remove() quiesces the sticky-finger timer before stopping <\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-41331","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/41331","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=41331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=41331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=41331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}