{"id":21439,"date":"2026-09-12T04:31:11","date_gmt":"2026-09-11T20:31:11","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89517"},"modified":"2026-09-12T04:31:11","modified_gmt":"2026-09-11T20:31:11","slug":"cve-2026-89517","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89517","title":{"rendered":"CVE-2026-89517 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nsched_ext: Fix rq-&gt;co"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>sched_ext: Fix rq-&gt;core_pick corruption under core scheduling<\/p>\n<p>Core scheduling&#8217;s pick_next_task() picks what to run on every SMT sibling of<br \/>\nthe core in a single pass under the shared core-wide rq lock. The selection<br \/>\nstate is consistent only while the lock is held continuously, so<br \/>\n-&gt;pick_task() originally could not release it. However, since 4c95380701f5<br \/>\n(&#8220;sched\/ext: Fold balance_scx() into pick_task_scx()&#8221;), sched_ext runs<br \/>\ndispatch from inside the pick and dispatching can drop the rq lock. To<br \/>\nsupport this, pick_next_task() has been updated to restart the whole<br \/>\nselection when a pick returns RETRY_TASK after releasing the lock.<\/p>\n<p>When selections on the same core interleave through the dropped lock, they<br \/>\ncorrupt each other&#8217;s state: one clears the other&#8217;s rq-&gt;core_pick leading to<br \/>\na NULL deref, or invalidates its keep-the-previous-task decision leaving a<br \/>\ndequeued task running, which deadlocks the next wakeup and matches the<br \/>\nreported hard hangs. A cookied ping-pong load on an SMT machine makes the<br \/>\ninterleavings frequent and kills the kernel within seconds.<\/p>\n<p>Fix it by making the pick return RETRY_TASK whenever dispatch released the<br \/>\nrq lock, so that a selection only ever commits picks made under a<br \/>\ncontinuously held lock. The previous patch&#8217;s rq-&gt;scx.lock_drop_seq counts<br \/>\nthe releases. A dispatch that touched nothing never releases the lock and<br \/>\nits verdict, including &#8220;nothing to run&#8221;, stands: retries are bounded, each<br \/>\nfollowing a dispatch that actually did something, and an idle CPU does not<br \/>\nloop.<\/p>\n<p>If another dispatch is already in flight on the rq, skip dispatching and<br \/>\npick from what is already queued locally &#8211; the in-flight dispatch has<br \/>\nreleased the lock, so its own selection will retry and re-pick this rq,<br \/>\nwhile returning RETRY_TASK here would only spin on the lock that dispatch<br \/>\nneeds to finish.<\/p>\n<p>Balance callbacks must run in the context that queued them, so they can only<br \/>\nbe queued on the CPU&#8217;s own rq. When dispatching for another rq, run the<br \/>\ndeferred work directly instead &#8211; that rq may consume all its picks through<br \/>\nthe core-sched fast path and never queue the callback itself.<\/p>\n<p>The put_prev_task_scx() warning about a runnable task being left behind<br \/>\nassumed that dispatch ran as part of the very pick that is switching away.<br \/>\nThat now only holds on the non-core path, so gate it and drop the<br \/>\ncookie-match test, which is always true without core scheduling, from its<br \/>\ncondition.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>sched_ext: Fix rq-&gt;core_pick corruption under core scheduling<\/p>\n<p>Core scheduling&#8217;s pick_next_task() picks what to run on every SMT si<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21439","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21439","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=21439"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21439"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21439"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}