<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Tue, 06 Oct 2026 00:21:28 +0000</lastBuildDate>
    <item>
      <title>CVE-2021-47465 — KVM: PPC: Book3S HV: Fix stack handling in idle_kvm_start_guest()</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2021-47465</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;KVM: PPC: Book3S HV: Fix stack handling in idle_kvm_start_guest()&lt;/p&gt;
&lt;p&gt;In commit 10d91611f426 (&amp;#34;powerpc/64s: Reimplement book3s idle code in
C&amp;#34;) kvm_start_guest() became idle_kvm_start_guest(). The old code
allocated a stack frame on the emergency stack, but didn&amp;#39;t use the
frame to store anything, and also didn&amp;#39;t store anything in its caller&amp;#39;s
frame.&lt;/p&gt;
&lt;p&gt;idle_kvm_start_guest() on the other hand is written more like a normal C
function, it creates a frame on entry, and also stores CR/LR into its
callers frame (per the ABI). The problem is that there is no caller
frame on the emergency stack.&lt;/p&gt;
&lt;p&gt;The emergency stack for a given CPU is allocated with:&lt;/p&gt;
&lt;p&gt;paca_ptrs[i]-&amp;gt;emergency_sp = alloc_stack(limit, i) + THREAD_SIZE;&lt;/p&gt;
&lt;p&gt;So emergency_sp actually points to the first address above the emergency
stack allocation for a given CPU, we must not store above it without
first decrementing it to create a frame. This is different to the
regular kernel stack, paca-&amp;gt;kstack, which is initialised to point at an
initial frame that is ready to use.&lt;/p&gt;
&lt;p&gt;idle_kvm_start_guest() stores the backchain, CR and LR all of which
write outside the allocation for the emergency stack. It then creates a
stack frame and saves the non-volatile registers. Unfortunately the
frame it creates is not large enough to fit the non-volatiles, and so
the saving of the non-volatile registers also writes outside the
emergency stack allocation.&lt;/p&gt;
&lt;p&gt;The end result is that w…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;KVM: PPC: Book3S HV: Fix stack handling in idle_kvm_start_guest()&lt;/p&gt;
&lt;p&gt;In commit 10d91611f426 (&amp;#34;powerpc/64s: Reimplement book3s idle code in
C&amp;#34;) kvm_start_guest() became idle_kvm_start_guest(). The old code
allocated a stack frame on the emergency stack, but didn&amp;#39;t use the
frame to store anything, and also didn&amp;#39;t store anything in its caller&amp;#39;s
frame.&lt;/p&gt;
&lt;p&gt;idle_kvm_start_guest() on the other hand is written more like a normal C
function, it creates a frame on entry, and also stores CR/LR into its
callers frame (per the ABI). The problem is that there is no caller
frame on the emergency stack.&lt;/p&gt;
&lt;p&gt;The emergency stack for a given CPU is allocated with:&lt;/p&gt;
&lt;p&gt;paca_ptrs[i]-&amp;gt;emergency_sp = alloc_stack(limit, i) + THREAD_SIZE;&lt;/p&gt;
&lt;p&gt;So emergency_sp actually points to the first address above the emergency
stack allocation for a given CPU, we must not store above it without
first decrementing it to create a frame. This is different to the
regular kernel stack, paca-&amp;gt;kstack, which is initialised to point at an
initial frame that is ready to use.&lt;/p&gt;
&lt;p&gt;idle_kvm_start_guest() stores the backchain, CR and LR all of which
write outside the allocation for the emergency stack. It then creates a
stack frame and saves the non-volatile registers. Unfortunately the
frame it creates is not large enough to fit the non-volatiles, and so
the saving of the non-volatile registers also writes outside the
emergency stack allocation.&lt;/p&gt;
&lt;p&gt;The end result is that w…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2021-47465</guid>
    </item>
  </channel>
</rss>
