<?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>Wed, 07 Oct 2026 22:01:32 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-98166 — drm/ttm: fix swapped-out resources never leaving their bulk_move range</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-98166</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;drm/ttm: fix swapped-out resources never leaving their bulk_move range&lt;/p&gt;
&lt;p&gt;ttm_tt_swapout() returns the number of pages swapped out on success and
a negative error code on failure; for a populated ttm it never returns
zero. Commit b2ed01e7ad3d (&amp;#34;drm/ttm: Fix ttm_bo_swapout() infinite LRU
walk on swapout failure&amp;#34;) moved the bulk_move bookkeeping in
ttm_bo_swapout_cb() under &amp;#34;if (!ret)&amp;#34;, so the
ttm_resource_del_bulk_move_unevictable() / ttm_resource_move_to_lru_tail()
pair is now skipped on every successful swapout. The equivalent change
for the shrinker in commit 1d59f36e95f7 (&amp;#34;drm/ttm: Fix ttm_bo_shrink()
infinite LRU walk on backup failure&amp;#34;) tests &amp;#34;lret &amp;gt; 0&amp;#34;, which is what
was intended here as well.&lt;/p&gt;
&lt;p&gt;Before b2ed01e7ad3d the resource was taken off the bulk_move before the
swapout; since then a swapped-out resource stays inside its BO&amp;#39;s
bulk_move range (and on the manager LRU) although it is unevictable.
When it is later freed or the BO leaves the bulk_move
(ttm_resource_free(), ttm_bo_set_bulk_move() via amdgpu_vm_bo_del()),
ttm_resource_del_bulk_move() skips it because of its
!ttm_resource_unevictable() guard, so a range endpoint in pos-&amp;gt;first /
pos-&amp;gt;last is left pointing at freed memory. The next
ttm_lru_bulk_move_tail() or ttm_resource_add_bulk_move() on that cursor
is a use-after-free, seen as the resv WARN in ttm_lru_bulk_move_add(),
&amp;#34;list_del corruption&amp;#34; in ttm_resource_move_to_lru_tail() or a NULL
deref…&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;drm/ttm: fix swapped-out resources never leaving their bulk_move range&lt;/p&gt;
&lt;p&gt;ttm_tt_swapout() returns the number of pages swapped out on success and
a negative error code on failure; for a populated ttm it never returns
zero. Commit b2ed01e7ad3d (&amp;#34;drm/ttm: Fix ttm_bo_swapout() infinite LRU
walk on swapout failure&amp;#34;) moved the bulk_move bookkeeping in
ttm_bo_swapout_cb() under &amp;#34;if (!ret)&amp;#34;, so the
ttm_resource_del_bulk_move_unevictable() / ttm_resource_move_to_lru_tail()
pair is now skipped on every successful swapout. The equivalent change
for the shrinker in commit 1d59f36e95f7 (&amp;#34;drm/ttm: Fix ttm_bo_shrink()
infinite LRU walk on backup failure&amp;#34;) tests &amp;#34;lret &amp;gt; 0&amp;#34;, which is what
was intended here as well.&lt;/p&gt;
&lt;p&gt;Before b2ed01e7ad3d the resource was taken off the bulk_move before the
swapout; since then a swapped-out resource stays inside its BO&amp;#39;s
bulk_move range (and on the manager LRU) although it is unevictable.
When it is later freed or the BO leaves the bulk_move
(ttm_resource_free(), ttm_bo_set_bulk_move() via amdgpu_vm_bo_del()),
ttm_resource_del_bulk_move() skips it because of its
!ttm_resource_unevictable() guard, so a range endpoint in pos-&amp;gt;first /
pos-&amp;gt;last is left pointing at freed memory. The next
ttm_lru_bulk_move_tail() or ttm_resource_add_bulk_move() on that cursor
is a use-after-free, seen as the resv WARN in ttm_lru_bulk_move_add(),
&amp;#34;list_del corruption&amp;#34; in ttm_resource_move_to_lru_tail() or a NULL
deref…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-98166</guid>
    </item>
  </channel>
</rss>
