{"id":6743,"date":"2026-09-04T18:49:15","date_gmt":"2026-09-04T10:49:15","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72043"},"modified":"2026-09-04T18:49:15","modified_gmt":"2026-09-04T10:49:15","slug":"cve-2026-72043","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72043","title":{"rendered":"CVE-2026-72043 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nLoongArch: Fix missin"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>LoongArch: Fix missing dirty page tracking in {pte,pmd}_wrprotect()<\/p>\n<p>When hardware page table walker (PTW) is enabled on LoongArch, the CPU<br \/>\nmay set _PAGE_DIRTY directly in the page table entry during a write TLB<br \/>\nmiss, without going through the software TLB store handler. The software<br \/>\nTLB store handler (tlbex.S:254) sets both _PAGE_DIRTY and_PAGE_MODIFIED<br \/>\ntogether:<\/p>\n<p>    ori t0, t0, (_PAGE_VALID | _PAGE_DIRTY | _PAGE_MODIFIED)<\/p>\n<p>Since hardware PTW only sets _PAGE_DIRTY, the software-only bit, i.e.<br \/>\n_PAGE_MODIFIED is left unchanged. This creates a window where a PTE has<br \/>\n_PAGE_DIRTY set (hardware knows the page is dirty) but _PAGE_MODIFIED<br \/>\nclear (software is unaware).<\/p>\n<p>When fork()\/clone() triggers copy-on-write, __copy_present_ptes() calls<br \/>\npte_wrprotect(), which unconditionally clears both the _PAGE_WRITE and<br \/>\n_PAGE_DIRTY bits:<\/p>\n<p>    pte_val(pte) &amp;= ~(_PAGE_WRITE | _PAGE_DIRTY);<\/p>\n<p>Since _PAGE_MODIFIED was never set, the dirtiness information is lost<br \/>\ncompletely. Subsequently, when memory pressure triggers page reclaim,<br \/>\npage_mkclean() \/ try_to_unmap() sees the page as clean (i.e. pte_dirty()<br \/>\nreturns false) and the page may be freed without writeback, causing data<br \/>\ncorruption.<\/p>\n<p>Fix this by propagating the _PAGE_DIRTY bit to the _PAGE_MODIFIED bit in<br \/>\nboth pte_wrprotect() and pmd_wrprotect() before clearing writeable bits:<\/p>\n<p>    if (pte_val(pte) &amp; _PAGE_DIRTY)<br \/>\n        pte_val(pte) |= _PAGE_MODIFIED;<\/p>\n<p>The pmd_wrprotect() fix handles the CONFIG_TRANSPARENT_HUGEPAGE case,<br \/>\nwhere pmd entries need the same treatment.<\/p>\n<p>This ensures the software dirty tracking bit (checked by pte_dirty() and<br \/>\npmd_dirty(), which read both the _PAGE_DIRTY and _PAGE_MODIFIED bits) is<br \/>\npreserved across fork COW write-protection.<\/p>\n<p>The issue was found by the LTP madvise09 test case, which exercises page<br \/>\nreclaim after &#8220;madvise(MADV_FREE), write and fork&#8221; operation sequence on<br \/>\nprivate anonymous mappings.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>LoongArch: Fix missing dirty page tracking in {pte,pmd}_wrprotect()<\/p>\n<p>When hardware page table walker (PTW) is enabled on LoongArch,<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-6743","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/6743","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=6743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}