{"id":21330,"date":"2026-09-12T04:31:02","date_gmt":"2026-09-11T20:31:02","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80997"},"modified":"2026-09-12T04:31:02","modified_gmt":"2026-09-11T20:31:02","slug":"cve-2026-80997","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80997","title":{"rendered":"CVE-2026-80997 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnet: ipa: fix stalled"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net: ipa: fix stalled modem TX queue after runtime resume<\/p>\n<p>ipa_start_xmit() unconditionally stops the TX queue before calling<br \/>\npm_runtime_get(), relying on the wake scheduled by runtime resume<br \/>\n(ipa_modem_wake_queue_work()) to restart it once power is ACTIVE.<br \/>\nBut that work is queued from within the runtime resume callback,<br \/>\nbefore the device&#8217;s power state reaches RPM_ACTIVE, so it can run<br \/>\nwhile the device is still RPM_RESUMING.  The wake is then consumed<br \/>\ntoo early: the transmit it restarts stops the queue again,<br \/>\npm_runtime_get() returns -EINPROGRESS without arranging any future<br \/>\nwake (deferred_resume exists only for RPM_SUSPENDING), and after the<br \/>\nresume completes nothing is left to wake the queue.  Transmit stalls<br \/>\npermanently: packets pile up in the qdisc behind the stopped queue,<br \/>\nthe device runtime-suspends, and since the netdev registers no<br \/>\nndo_tx_timeout the watchdog never fires.  Observed on SM7635<br \/>\n(Fairphone 6) as the cellular data path going permanently deaf<br \/>\nwithin hours, RX included, since nothing resumes the suspended<br \/>\nendpoints.<\/p>\n<p>Close the window by making the wake work wait for the resume to<br \/>\ncomplete (pm_runtime_get_sync()) before waking the queue.  Every<br \/>\nqueue stop is then guaranteed a later wake that happens while power<br \/>\nis ACTIVE; a transmit racing a new suspend\/resume cycle re-schedules<br \/>\nthe work.  If the device could not be resumed, wake the queue anyway<br \/>\nso pending packets are dropped by the transmit path rather than<br \/>\nstranded.<\/p>\n<p>The STARTED power flag used to narrow this window: a wake running<br \/>\nbefore the transmit path&#8217;s stop suppressed that stop, but only once,<br \/>\nas the flag was cleared by the first stop it absorbed.  Removing the<br \/>\nflag made a single transmit during an in-flight resume sufficient to<br \/>\nstrand the queue, which is the form observed.<\/p>\n<p>With an accelerated reproducer (autosuspend delay shortened to 5 ms,<br \/>\n~20 packets\/s of TX), an unpatched kernel stalled three times in<br \/>\n230 s \/ 4380 packets; with this patch the same test ran 3601 s \/<br \/>\n70298 packets without a stall.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net: ipa: fix stalled modem TX queue after runtime resume<\/p>\n<p>ipa_start_xmit() unconditionally stops the TX queue before calling<br \/>\npm_ru<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21330","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21330","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=21330"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21330"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21330"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}