<?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://db.gcve.eu</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>Sat, 24 Oct 2026 20:09:34 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-99018</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-99018</link>
      <description>&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;riscv: entry: gate shadow call stack reload on sstatus.SPP, not tp&lt;/p&gt;
&lt;p&gt;Under CONFIG_SHADOW_CALL_STACK, handle_exception() reloads the kernel
shadow call stack pointer (gp) only when the trap came from userspace.
It made that decision with scs_load_current_if_task_changed, which
compares the trap-time tp (read back from sscratch into s5) against the
current tp:&lt;/p&gt;
&lt;p&gt;beq	\prev, tp, _skip_scs
	scs_load_current
_skip_scs:&lt;/p&gt;
&lt;p&gt;tp is a user-writable register.  A user task that sets tp to the
linear-map address of its own task_struct (&amp;amp;current) before trapping
makes the comparison succeed (can achieve by brute force with KASLR
enable under our test), so the kernel skips scs_load_current and
keeps running with the gp that userspace left in place.  Under
CONFIG_SHADOW_CALL_STACK gp is the shadow call stack pointer and
load_global_pointer is a no-op, so the compiler-emitted
&amp;#34;sd ra, -8(gp)&amp;#34; / &amp;#34;ld ra, -8(gp)&amp;#34; in every non-leaf function then write
to, and return through, an attacker-controlled address -- an
unprivileged kernel arbitrary-write and control-flow-hijack primitive.
The poisoned gp is saved to task_struct.scs_sp on return, so the reload
is skipped on every subsequent entry as well.&lt;/p&gt;
&lt;p&gt;Decide &amp;#34;came from userspace&amp;#34; from the hardware sstatus.SPP bit (already
in s1 at this point) instead of from tp, mirroring the check that
ret_from_exception already uses a few instructions later.  SPP is
written by hardware on trap entry a…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;riscv: entry: gate shadow call stack reload on sstatus.SPP, not tp&lt;/p&gt;
&lt;p&gt;Under CONFIG_SHADOW_CALL_STACK, handle_exception() reloads the kernel
shadow call stack pointer (gp) only when the trap came from userspace.
It made that decision with scs_load_current_if_task_changed, which
compares the trap-time tp (read back from sscratch into s5) against the
current tp:&lt;/p&gt;
&lt;p&gt;beq	\prev, tp, _skip_scs
	scs_load_current
_skip_scs:&lt;/p&gt;
&lt;p&gt;tp is a user-writable register.  A user task that sets tp to the
linear-map address of its own task_struct (&amp;amp;current) before trapping
makes the comparison succeed (can achieve by brute force with KASLR
enable under our test), so the kernel skips scs_load_current and
keeps running with the gp that userspace left in place.  Under
CONFIG_SHADOW_CALL_STACK gp is the shadow call stack pointer and
load_global_pointer is a no-op, so the compiler-emitted
&amp;#34;sd ra, -8(gp)&amp;#34; / &amp;#34;ld ra, -8(gp)&amp;#34; in every non-leaf function then write
to, and return through, an attacker-controlled address -- an
unprivileged kernel arbitrary-write and control-flow-hijack primitive.
The poisoned gp is saved to task_struct.scs_sp on return, so the reload
is skipped on every subsequent entry as well.&lt;/p&gt;
&lt;p&gt;Decide &amp;#34;came from userspace&amp;#34; from the hardware sstatus.SPP bit (already
in s1 at this point) instead of from tp, mirroring the check that
ret_from_exception already uses a few instructions later.  SPP is
written by hardware on trap entry a…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-99018</guid>
    </item>
    <item>
      <title>GHSA-7x79-hrpm-vw9w</title>
      <link>https://db.gcve.eu/vuln/ghsa-7x79-hrpm-vw9w</link>
      <description>&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;riscv: entry: gate shadow call stack reload on sstatus.SPP, not tp&lt;/p&gt;
&lt;p&gt;Under CONFIG_SHADOW_CALL_STACK, handle_exception() reloads the kernel
shadow call stack pointer (gp) only when the trap came from userspace.
It made that decision with scs_load_current_if_task_changed, which
compares the trap-time tp (read back from sscratch into s5) against the
current tp:&lt;/p&gt;
&lt;p&gt;beq	\prev, tp, _skip_scs
	scs_load_current
_skip_scs:&lt;/p&gt;
&lt;p&gt;tp is a user-writable register.  A user task that sets tp to the
linear-map address of its own task_struct (&amp;amp;current) before trapping
makes the comparison succeed (can achieve by brute force with KASLR
enable under our test), so the kernel skips scs_load_current and
keeps running with the gp that userspace left in place.  Under
CONFIG_SHADOW_CALL_STACK gp is the shadow call stack pointer and
load_global_pointer is a no-op, so the compiler-emitted
&amp;#34;sd ra, -8(gp)&amp;#34; / &amp;#34;ld ra, -8(gp)&amp;#34; in every non-leaf function then write
to, and return through, an attacker-controlled address -- an
unprivileged kernel arbitrary-write and control-flow-hijack primitive.
The poisoned gp is saved to task_struct.scs_sp on return, so the reload
is skipped on every subsequent entry as well.&lt;/p&gt;
&lt;p&gt;Decide &amp;#34;came from userspace&amp;#34; from the hardware sstatus.SPP bit (already
in s1 at this point) instead of from tp, mirroring the check that
ret_from_exception already uses a few instructions later.  SPP is
written by hardware on trap entry a…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;riscv: entry: gate shadow call stack reload on sstatus.SPP, not tp&lt;/p&gt;
&lt;p&gt;Under CONFIG_SHADOW_CALL_STACK, handle_exception() reloads the kernel
shadow call stack pointer (gp) only when the trap came from userspace.
It made that decision with scs_load_current_if_task_changed, which
compares the trap-time tp (read back from sscratch into s5) against the
current tp:&lt;/p&gt;
&lt;p&gt;beq	\prev, tp, _skip_scs
	scs_load_current
_skip_scs:&lt;/p&gt;
&lt;p&gt;tp is a user-writable register.  A user task that sets tp to the
linear-map address of its own task_struct (&amp;amp;current) before trapping
makes the comparison succeed (can achieve by brute force with KASLR
enable under our test), so the kernel skips scs_load_current and
keeps running with the gp that userspace left in place.  Under
CONFIG_SHADOW_CALL_STACK gp is the shadow call stack pointer and
load_global_pointer is a no-op, so the compiler-emitted
&amp;#34;sd ra, -8(gp)&amp;#34; / &amp;#34;ld ra, -8(gp)&amp;#34; in every non-leaf function then write
to, and return through, an attacker-controlled address -- an
unprivileged kernel arbitrary-write and control-flow-hijack primitive.
The poisoned gp is saved to task_struct.scs_sp on return, so the reload
is skipped on every subsequent entry as well.&lt;/p&gt;
&lt;p&gt;Decide &amp;#34;came from userspace&amp;#34; from the hardware sstatus.SPP bit (already
in s1 at this point) instead of from tp, mirroring the check that
ret_from_exception already uses a few instructions later.  SPP is
written by hardware on trap entry a…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-7x79-hrpm-vw9w</guid>
    </item>
  </channel>
</rss>
