{"id":33269,"date":"2026-10-06T20:31:39","date_gmt":"2026-10-06T12:31:39","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98200"},"modified":"2026-10-06T20:31:39","modified_gmt":"2026-10-06T12:31:39","slug":"cve-2026-98200","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98200","title":{"rendered":"CVE-2026-98200 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nhwmon: (hp-wmi-sensor"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>hwmon: (hp-wmi-sensors) Fix use-after-free in fungible_show()<\/p>\n<p>nsensor-&gt;current_state is dynamically replaced as the sensor&#8217;s state<br \/>\nchanges. update_numeric_sensor_from_wobj() does this by freeing the<br \/>\nold string and installing a new one:<\/p>\n<p>\tif (strcmp(trimmed, nsensor-&gt;current_state)) {<br \/>\n\t\tnew_string = hp_wmi_strdup(dev, trimmed);<br \/>\n\t\tif (new_string) {<br \/>\n\t\t\tdevm_kfree(dev, nsensor-&gt;current_state);<br \/>\n\t\t\tnsensor-&gt;current_state = new_string;<br \/>\n\t\t}<br \/>\n\t}<\/p>\n<p>This function is only ever called from hp_wmi_update_info() while<br \/>\nstate-&gt;lock is held, so the free-and-replace itself is properly<br \/>\nserialized against concurrent updates.<\/p>\n<p>fungible_show(), however, reads the same pointer after the lock has<br \/>\nalready been dropped:<\/p>\n<p>\terr = hp_wmi_update_info(state, info);<br \/>\n\tif (err)<br \/>\n\t\treturn err;<\/p>\n<p>\tswitch (prop) {<br \/>\n\t&#8230;<br \/>\n\tcase HP_WMI_PROPERTY_CURRENT_STATE:<br \/>\n\t\tseq_printf(seqf, &#8220;%sn&#8221;, nsensor-&gt;current_state);<br \/>\n\t\tbreak;<\/p>\n<p>hp_wmi_update_info() takes state-&gt;lock internally and releases it<br \/>\nbefore returning, so by the time fungible_show() dereferences<br \/>\nnsensor-&gt;current_state in seq_printf(), no lock is held. Two<br \/>\nprocesses reading a sensor&#8217;s current_state debugfs entry at<br \/>\noverlapping times (or one reading it while another read of the same<br \/>\nsensor triggers a refresh) can race: one thread&#8217;s seq_printf() can<br \/>\nbe part-way through printing the string at the moment another<br \/>\nthread&#8217;s call into update_numeric_sensor_from_wobj() frees it with<br \/>\ndevm_kfree() and installs a new pointer, causing a use-after-free<br \/>\nread.<\/p>\n<p>Take state-&gt;lock around the read in fungible_show() as well, so it<br \/>\ncan never run concurrently with the free-and-replace in<br \/>\nupdate_numeric_sensor_from_wobj().<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>hwmon: (hp-wmi-sensors) Fix use-after-free in fungible_show()<\/p>\n<p>nsensor-&gt;current_state is dynamically replaced as the sensor&#8217;s state<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-33269","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/33269","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=33269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=33269"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=33269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}