{"id":17270,"date":"2026-09-05T02:30:56","date_gmt":"2026-09-04T18:30:56","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80766"},"modified":"2026-09-05T02:30:56","modified_gmt":"2026-09-04T18:30:56","slug":"cve-2026-80766","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80766","title":{"rendered":"CVE-2026-80766 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nHID: uclogic: fix use"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>HID: uclogic: fix use-after-free of inrange_timer on remove<\/p>\n<p>uclogic_remove() cancels the pen in-range timer and then stops the<br \/>\ndevice:<\/p>\n<p>\ttimer_delete_sync(&amp;drvdata-&gt;inrange_timer);<br \/>\n\thid_hw_stop(hdev);<\/p>\n<p>timer_delete_sync() only guarantees the timer is idle at that instant.<br \/>\nuclogic_raw_event_pen() keeps delivering pen reports until hid_hw_stop()<br \/>\nstops the transport several lines later, and every report with<br \/>\npen-&gt;inrange == UCLOGIC_PARAMS_PEN_INRANGE_NONE re-arms the timer:<\/p>\n<p>\tmod_timer(&amp;drvdata-&gt;inrange_timer, jiffies + msecs_to_jiffies(100));<\/p>\n<p>A report landing between the timer_delete_sync() call and the transport<br \/>\nteardown in hid_hw_stop() re-arms inrange_timer after it was cancelled.<br \/>\nuclogic_remove() then returns and the devm drvdata is freed, while<br \/>\nhid_hw_stop() has already freed the input device drvdata-&gt;pen_input<br \/>\npoints at, so when the timer fires ~100 ms later<br \/>\nuclogic_inrange_timeout() dereferences freed memory &#8212; a use-after-free<br \/>\nin timer-softirq context.<\/p>\n<p>Swapping the two calls is not a fix: stopping the device first frees<br \/>\ndrvdata-&gt;pen_input via hidinput_disconnect() while the timer may still<br \/>\nbe pending, so a timer already armed before removal fires on the freed<br \/>\ninput device in the window before timer_delete_sync() runs.<\/p>\n<p>Use timer_shutdown_sync() before hid_hw_stop() instead. It cancels the<br \/>\ntimer, waits for a running callback while pen_input is still valid, and<br \/>\nprevents any further re-arming &#8212; a later mod_timer() from an in-flight<br \/>\nreport is silently ignored &#8212; so the timer is provably dead before<br \/>\nhid_hw_stop() frees the inputs. This is the ordering the timer core<br \/>\ndocuments for this &#8220;timer re-armed from another path&#8221; teardown case.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>HID: uclogic: fix use-after-free of inrange_timer on remove<\/p>\n<p>uclogic_remove() cancels the pen in-range timer and then stops the<br \/>\ndev<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-17270","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/17270","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=17270"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17270"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17270"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}