{"id":15469,"date":"2026-09-04T19:04:17","date_gmt":"2026-09-04T11:04:17","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-46253"},"modified":"2026-09-04T19:04:17","modified_gmt":"2026-09-04T11:04:17","slug":"cve-2026-46253","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-46253","title":{"rendered":"CVE-2026-46253 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\npstore\/ram: fix buffe"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>pstore\/ram: fix buffer overflow in persistent_ram_save_old()<\/p>\n<p>persistent_ram_save_old() can be called multiple times for the same<br \/>\npersistent_ram_zone (e.g., via ramoops_pstore_read -&gt; ramoops_get_next_prz<br \/>\nfor PSTORE_TYPE_DMESG records).<\/p>\n<p>Currently, the function only allocates prz-&gt;old_log when it is NULL,<br \/>\nbut it unconditionally updates prz-&gt;old_log_size to the current buffer<br \/>\nsize and then performs memcpy_fromio() using this new size. If the<br \/>\nbuffer size has grown since the first allocation (which can happen<br \/>\nacross different kernel boot cycles), this leads to:<\/p>\n<p>1. A heap buffer overflow (OOB write) in the memcpy_fromio() calls<br \/>\n2. A subsequent OOB read when ramoops_pstore_read() accesses the buffer<br \/>\n   using the incorrect (larger) old_log_size<\/p>\n<p>The KASAN splat would look similar to:<br \/>\n  BUG: KASAN: slab-out-of-bounds in ramoops_pstore_read+0x&#8230;<br \/>\n  Read of size N at addr &#8230; by task &#8230;<\/p>\n<p>The conditions are likely extremely hard to hit:<\/p>\n<p>  0. Crash with a ramoops write of less-than-record-max-size bytes.<br \/>\n  1. Reboot: ramoops registers, pstore_get_records(0) reads old crash,<br \/>\n     allocates old_log with size X<br \/>\n  2. Crash handler registered, timer started (if pstore_update_ms &gt;= 0)<br \/>\n  3. Oops happens (non-fatal, system continues)<br \/>\n  4. pstore_dump() writes oops via ramoops_pstore_write() size Y (&gt;X)<br \/>\n  5. pstore_new_entry = 1, pstore_timer_kick() called<br \/>\n  6. System continues running (not a panic oops)<br \/>\n  7. Timer fires after pstore_update_ms milliseconds<br \/>\n  8. pstore_timefunc() \u2192 schedule_work() \u2192 pstore_dowork() \u2192 pstore_get_records(1)<br \/>\n  9. ramoops_get_next_prz() \u2192 persistent_ram_save_old()<br \/>\n 10. buffer_size() returns Y, but old_log is X bytes<br \/>\n 11. Y &gt; X: memcpy_fromio() overflows heap<\/p>\n<p>  Requirements:<br \/>\n  &#8211; a prior crash record exists that did not fill the record size<br \/>\n    (almost impossible since the crash handler writes as much as it<br \/>\n    can possibly fit into the record, capped by max record size and<br \/>\n    the kmsg buffer almost always exceeds the max record size)<br \/>\n  &#8211; pstore_update_ms &gt;= 0 (disabled by default)<br \/>\n  &#8211; Non-fatal oops (system survives)<\/p>\n<p>Free and reallocate the buffer when the new size differs from the<br \/>\npreviously allocated size. This ensures old_log always has sufficient<br \/>\nspace for the data being copied.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>pstore\/ram: fix buffer overflow in persistent_ram_save_old()<\/p>\n<p>persistent_ram_save_old() can be called multiple times for the same<br \/>\np<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-15469","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/15469","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=15469"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15469"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15469"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}