{"id":12896,"date":"2026-09-04T18:59:44","date_gmt":"2026-09-04T10:59:44","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-53360"},"modified":"2026-09-04T18:59:44","modified_gmt":"2026-09-04T10:59:44","slug":"cve-2026-53360","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-53360","title":{"rendered":"CVE-2026-53360 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nKVM: SEV: Require in-"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>KVM: SEV: Require in-GHCB scratch area if GHCB v2+ is in use<\/p>\n<p>As per the GHCB spec, when using GHCB v2+ require the software scratch area<br \/>\nto reside in the GHCB&#8217;s shared buffer.  Note, things like Page State Change<br \/>\n(PSC) requests _rely_ on this behavior, as the guest can&#8217;t provide a length<br \/>\nwhen making the request, i.e. the size of the guest payload is bounded by<br \/>\nthe size of the shared buffer.<\/p>\n<p>Failure to force usage of the GHCB, and a slew of other flaws, lets a<br \/>\nmalicious SNP guest corrupt host kernel heap memory, and leak host heap<br \/>\nlayout information.<\/p>\n<p>setup_vmgexit_scratch() allocates a buffer via kvzalloc(exit_info_2),<br \/>\nwhere exit_info_2 is guest-controlled. With exit_info_2=24, this yields<br \/>\na 24-byte allocation in kmalloc-cg-32 (32-byte slab objects). The buffer<br \/>\nholds an 8-byte psc_hdr followed by 8-byte psc_entry structs, so only<br \/>\nentries[0] and entries[1] are in-bounds.<\/p>\n<p>snp_begin_psc() validates end_entry against VMGEXIT_PSC_MAX_COUNT (253)<br \/>\nbut NOT against the actual buffer size:<\/p>\n<p>      idx_end = hdr-&gt;end_entry;<\/p>\n<p>      if (idx_end &gt;= VMGEXIT_PSC_MAX_COUNT) {   \/\/ checks 253, not buffer<br \/>\n          snp_complete_psc(svm, &#8230;);<br \/>\n          return 1;<br \/>\n      }<\/p>\n<p>      for (idx = idx_start; idx = 2<\/p>\n<p>The guest sets end_entry=10+, causing the host to iterate entries[2+]<br \/>\nwhich are OOB into adjacent slab objects. For each OOB entry:<\/p>\n<p>  &#8211; The host reads 8 bytes (OOB READ \/ info leak oracle)<br \/>\n  &#8211; If the data passes PSC validation, __snp_complete_one_psc() writes<br \/>\n    cur_page = 1 or 512 into the entry (OOB WRITE, sev.c:3806)<br \/>\n  &#8211; If validation fails, the error response reveals whether adjacent<br \/>\n    memory is zero vs non-zero (information disclosure to guest)<\/p>\n<p>The guest controls allocation size (exit_info_2), entry range<br \/>\n(cur_entry\/end_entry), and can fire unlimited VMGEXITs to repeatedly<br \/>\nhit different slab positions.<\/p>\n<p>By exploiting the variety of bugs, a malicious SEV-SNP guest can:<br \/>\n    &#8211; OOB read adjacent kmalloc-cg-32 objects (heap layout disclosure)<br \/>\n    &#8211; OOB write cur_page bits into adjacent objects (heap corruption)<br \/>\n    &#8211; Trigger use-after-free conditions across VMGEXITs<\/p>\n<p>E.g. with KASAN enabled, a single insmod of the PoC guest module<br \/>\nproduces 73 KASAN reports:<\/p>\n<p>    BUG: KASAN: slab-out-of-bounds in snp_begin_psc+0x126\/0x890<br \/>\n    Read of size 8 at addr ffff888219ffb5e0 by task qemu-system-x86\/2199<\/p>\n<p>    BUG: KASAN: slab-out-of-bounds in snp_begin_psc+0x468\/0x890<br \/>\n    Write of size 8 at addr ffff888351566648 by task qemu-system-x86\/2199<\/p>\n<p>    The buggy address belongs to the object at ffff888XXXXXXXXX<br \/>\n     which belongs to the cache kmalloc-cg-32 of size 32<br \/>\n    The buggy address is located N bytes to the right of<br \/>\n     allocated 32-byte region [ffff888XXXXXXXXX, ffff888XXXXXXXXX)<\/p>\n<p>  Breakdown:<br \/>\n    62 slab-out-of-bounds (reads + writes past allocation)<br \/>\n     7 slab-use-after-free<br \/>\n     4 use-after-free<\/p>\n<p>All credit to Stan for the wonderful description and reproducer!<\/p>\n<p>[sean: write changelog]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>KVM: SEV: Require in-GHCB scratch area if GHCB v2+ is in use<\/p>\n<p>As per the GHCB spec, when using GHCB v2+ require the software scratc<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-12896","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/12896","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=12896"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=12896"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=12896"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}