<?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>Thu, 29 Oct 2026 11:04:44 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-99164 — spi: imx: fix slab corruption from undersized DMA bounce buffers</title>
      <link>https://db.gcve.eu/vuln/cve-2026-99164</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;spi: imx: fix slab corruption from undersized DMA bounce buffers&lt;/p&gt;
&lt;p&gt;Since commit faa8e404ad8e (&amp;#34;spi: imx: support dynamic burst length for
ECSPI DMA mode&amp;#34;), the driver allocates its private DMA TX/RX buffers
with kzalloc(dma_len), where dma_len is only rounded up to 4 bytes, but
maps, syncs and unmaps them with DMA_CACHE_ALIGNED_LEN(dma_len), i.e.
rounded up to the cache line size. As a result, the DMA API operates on
memory beyond the end of the allocation.&lt;/p&gt;
&lt;p&gt;This was observed on a custom i.MX8MP platform with an mcp251xfd CAN
controller under heavy RPMSG load, as a series of refcount_t warnings
triggered from rpmsg_recv_done() in virtio_rpmsg_bus:&lt;/p&gt;
&lt;p&gt;refcount_t: addition on 0; use-after-free.
  refcount_t: underflow; use-after-free.
  refcount_t: saturated; leaking memory.&lt;/p&gt;
&lt;p&gt;Leading finally to an &amp;#34;Unable to handle kernel paging request&amp;#34; oops.
Reproducing this problem took between 30 minutes and roughly 30 hours
under the same workload.&lt;/p&gt;
&lt;p&gt;Hardware watchpoints on the refcount of a struct rpmsg_endpoint showed
it was overwritten from 2 to 1 by __pi_memcpy_generic() in the
irq/155-spi2.0 thread. Additionally it was found that a &amp;#34;normal&amp;#34;
rpmsg_recv_done() took 11µs +/-2µs from its kref_get to kref_put. In
the error case the same sequence took about 215µs +/-10µs. Based on
this, an LLM was used to identify the size mismatch fixed here.&lt;/p&gt;
&lt;p&gt;Allocate the buffers with DMA_CACHE_ALIGNED_LEN(dma_len) so they cover
the full…&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;spi: imx: fix slab corruption from undersized DMA bounce buffers&lt;/p&gt;
&lt;p&gt;Since commit faa8e404ad8e (&amp;#34;spi: imx: support dynamic burst length for
ECSPI DMA mode&amp;#34;), the driver allocates its private DMA TX/RX buffers
with kzalloc(dma_len), where dma_len is only rounded up to 4 bytes, but
maps, syncs and unmaps them with DMA_CACHE_ALIGNED_LEN(dma_len), i.e.
rounded up to the cache line size. As a result, the DMA API operates on
memory beyond the end of the allocation.&lt;/p&gt;
&lt;p&gt;This was observed on a custom i.MX8MP platform with an mcp251xfd CAN
controller under heavy RPMSG load, as a series of refcount_t warnings
triggered from rpmsg_recv_done() in virtio_rpmsg_bus:&lt;/p&gt;
&lt;p&gt;refcount_t: addition on 0; use-after-free.
  refcount_t: underflow; use-after-free.
  refcount_t: saturated; leaking memory.&lt;/p&gt;
&lt;p&gt;Leading finally to an &amp;#34;Unable to handle kernel paging request&amp;#34; oops.
Reproducing this problem took between 30 minutes and roughly 30 hours
under the same workload.&lt;/p&gt;
&lt;p&gt;Hardware watchpoints on the refcount of a struct rpmsg_endpoint showed
it was overwritten from 2 to 1 by __pi_memcpy_generic() in the
irq/155-spi2.0 thread. Additionally it was found that a &amp;#34;normal&amp;#34;
rpmsg_recv_done() took 11µs +/-2µs from its kref_get to kref_put. In
the error case the same sequence took about 215µs +/-10µs. Based on
this, an LLM was used to identify the size mismatch fixed here.&lt;/p&gt;
&lt;p&gt;Allocate the buffers with DMA_CACHE_ALIGNED_LEN(dma_len) so they cover
the full…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/cve-2026-99164</guid>
    </item>
  </channel>
</rss>
