{"id":28507,"date":"2026-09-25T00:31:34","date_gmt":"2026-09-24T16:31:34","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-93243"},"modified":"2026-09-25T00:31:34","modified_gmt":"2026-09-24T16:31:34","slug":"cve-2026-93243","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-93243","title":{"rendered":"CVE-2026-93243 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nmm\/secretmem: properl"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>mm\/secretmem: properly account locked pages<\/p>\n<p>secretmem accounts folios by treating memory as if it were mlock()&#8217;d and<br \/>\nthus limited by the RLIMIT_MEMLOCK limit.<\/p>\n<p>However the folios are unevictable and remain so until the inode is<br \/>\nevicted, eliminating usual mlock() semantics &#8211; mapping folios then<br \/>\nunmapping them does not clear their unevictable state, since it depends on<br \/>\nAS_UNEVICTABLE, not PG_mlocked.<\/p>\n<p>A user can therefore easily work around the RLIMIT_MEMLOCK limit &#8211; simply<br \/>\nmap then unmap and VmLck no longer counts the secretmem range.  Worse,<br \/>\nfolios are not accounted in the process&#8217;s RSS, meaning the OOM killer<br \/>\nwon&#8217;t know to kill the process.<\/p>\n<p>Repeatedly mapping\/unmapping (or forking) can then result in the<br \/>\nconsumption of all available system memory with unevictable folios and<br \/>\ncause system instability.<\/p>\n<p>A secretmem fd can be passed between processes and over fork so a<br \/>\nper-process limit simply does not make sense, so follow the precedent set<br \/>\nby io_uring, perf, skbuff, iommufd and xdp by tracking the number of<br \/>\nlocked pages in user_struct-&gt;locked_vm.<\/p>\n<p>Since the scope tracked is actually inode lifetime, the RLIMIT_MEMLOCK<br \/>\napplies per-user not per-process, so it doesn&#8217;t make sense to bypass for<br \/>\nusers with CAP_IPC_LOCK, therefore remove this bypass.<\/p>\n<p>There is simply no reason to carry on marking the mapping as mlock()&#8217;d<br \/>\nsince it&#8217;s misleading and the lifecycle is now correctly handled, so<br \/>\nremove this too.<\/p>\n<p>Note that secretmem does not support any form of truncation (including<br \/>\nhole punching) and the folios are unreclaimable, so the folios need only<br \/>\nbe accounted on fault and unaccounted on inode destruction.<\/p>\n<p>__secretmem_account_pages() is more or less a duplicate of the code that<br \/>\nio_uring etc.  use, but since this is a bug fix that needs backporting,<br \/>\ndefer any de-duplication efforts to a follow-up.<\/p>\n<p>test_mlock_limit() asserts mlock_future_ok() on mmap(), however this has<br \/>\nbeen removed, so remove the test altogether for the fix.  A new test will<br \/>\nbe sent separately for upstream.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>mm\/secretmem: properly account locked pages<\/p>\n<p>secretmem accounts folios by treating memory as if it were mlock()&#8217;d and<br \/>\nthus limited <\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-28507","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/28507","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=28507"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=28507"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=28507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}