{"id":25553,"date":"2026-09-18T04:31:33","date_gmt":"2026-09-17T20:31:33","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90144"},"modified":"2026-09-18T04:31:33","modified_gmt":"2026-09-17T20:31:33","slug":"cve-2026-90144","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90144","title":{"rendered":"CVE-2026-90144 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\ndpll: fix NULL deref"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>dpll: fix NULL deref in dpll_device_ops() during teardown race<\/p>\n<p>When the last owner of a dpll device unregisters while a foreign driver<br \/>\nstill holds a pin on it via dpll_pin_on_pin_register(), the dpll object<br \/>\nstays alive with an empty registration list. A pin notification queued<br \/>\nbefore the unregister (e.g. ice reacting to zl3073x_i2c removal) then<br \/>\nwalks pin-&gt;dpll_refs into dpll_device_ops(), which trips the WARN_ON and<br \/>\ndereferences the missing registration. dpll_lock cannot help because the<br \/>\nnotification work was queued before the unregistering driver took the<br \/>\nlock.<\/p>\n<p>Treat the empty registration list as a legitimate transient state. Make<br \/>\ndpll_priv() and dpll_device_ops() return NULL in that case and make<br \/>\nevery pin netlink path that resolves a device from a pin skip such<br \/>\ndplls. dpll_cmd_pin_get_one() picks a ref with a live registration and<br \/>\nreturns -ENODEV when there is none, the pin dumpit skips such a pin<br \/>\ninstead of aborting the dump, dpll_msg_add_pin_dplls() and the<br \/>\nfrequency, esync, reference sync and phase adjust set paths skip dead<br \/>\nrefs, and dpll_pin_parent_device_set() validates the parent with<br \/>\ndpll_device_get_by_id(). dpll_pin_register() is the last caller that<br \/>\ndereferenced the device ops without a check, so move its frequency<br \/>\nmonitor validation under dpll_lock and tolerate a missing registration<br \/>\nthere as well.<\/p>\n<p>The empty registration list is equivalent to a cleared DPLL_REGISTERED<br \/>\nmark, both transitions happen under dpll_lock in dpll_device_register()<br \/>\nand dpll_device_unregister(). A pin notification for a pin whose dplls<br \/>\nare all gone is now dropped with -ENODEV instead of crashing, all<br \/>\ncallers in the core ignore that return value.<\/p>\n<p> WARNING: drivers\/dpll\/dpll_core.c:1092 at dpll_device_ops+0x24\/0x40,<br \/>\n CPU#83: kworker\/u576:3\/23471<br \/>\n Modules linked in: &#8230; ice &#8230; zl3073x_i2c(-) &#8230; zl3073x &#8230;<br \/>\n Workqueue: ice_dpll_wq ice_dpll_pin_notify_work [ice]<br \/>\n RIP: 0010:dpll_device_ops+0x24\/0x40<br \/>\n Call Trace:<\/p>\n<p>  dpll_cmd_pin_get_one+0x336\/0x520<br \/>\n  dpll_pin_event_send+0x82\/0x140<br \/>\n  dpll_pin_on_pin_unregister+0xbb\/0x160<br \/>\n  ice_dpll_pin_notify_work+0x1bc\/0x1f0 [ice]<br \/>\n  process_one_work+0x19e\/0x370<br \/>\n  worker_thread+0x1a6\/0x310<br \/>\n  kthread+0xe4\/0x120<br \/>\n  ret_from_fork+0x1a1\/0x270<br \/>\n  ret_from_fork_asm+0x1a\/0x30<\/p>\n<p> &#8212;[ end trace 0000000000000000 ]&#8212;<br \/>\n BUG: kernel NULL pointer dereference, address: 0000000000000010<br \/>\n #PF: supervisor read access in kernel mode<br \/>\n #PF: error_code(0x0000) &#8211; not-present page<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>dpll: fix NULL deref in dpll_device_ops() during teardown race<\/p>\n<p>When the last owner of a dpll device unregisters while a foreign dr<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-25553","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/25553","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=25553"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25553"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25553"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}