<?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, 29 Sep 2026 05:29:26 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-31444 — ksmbd: fix use-after-free and NULL deref in smb_grant_oplock()</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-31444</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;ksmbd: fix use-after-free and NULL deref in smb_grant_oplock()&lt;/p&gt;
&lt;p&gt;smb_grant_oplock() has two issues in the oplock publication sequence:&lt;/p&gt;
&lt;p&gt;1) opinfo is linked into ci-&amp;gt;m_op_list (via opinfo_add) before
   add_lease_global_list() is called.  If add_lease_global_list()
   fails (kmalloc returns NULL), the error path frees the opinfo
   via __free_opinfo() while it is still linked in ci-&amp;gt;m_op_list.
   Concurrent m_op_list readers (opinfo_get_list, or direct iteration
   in smb_break_all_levII_oplock) dereference the freed node.&lt;/p&gt;
&lt;p&gt;2) opinfo-&amp;gt;o_fp is assigned after add_lease_global_list() publishes
   the opinfo on the global lease list.  A concurrent
   find_same_lease_key() can walk the lease list and dereference
   opinfo-&amp;gt;o_fp-&amp;gt;f_ci while o_fp is still NULL.&lt;/p&gt;
&lt;p&gt;Fix by restructuring the publication sequence to eliminate post-publish
failure:&lt;/p&gt;
&lt;p&gt;- Set opinfo-&amp;gt;o_fp before any list publication (fixes NULL deref).
- Preallocate lease_table via alloc_lease_table() before opinfo_add()
  so add_lease_global_list() becomes infallible after publication.
- Keep the original m_op_list publication order (opinfo_add before
  lease list) so concurrent opens via same_client_has_lease() and
  opinfo_get_list() still see the in-flight grant.
- Use opinfo_put() instead of __free_opinfo() on err_out so that
  the RCU-deferred free path is used.&lt;/p&gt;
&lt;p&gt;This also requires splitting add_lease_global_list() to take a
preallocated lease_table and…&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;ksmbd: fix use-after-free and NULL deref in smb_grant_oplock()&lt;/p&gt;
&lt;p&gt;smb_grant_oplock() has two issues in the oplock publication sequence:&lt;/p&gt;
&lt;p&gt;1) opinfo is linked into ci-&amp;gt;m_op_list (via opinfo_add) before
   add_lease_global_list() is called.  If add_lease_global_list()
   fails (kmalloc returns NULL), the error path frees the opinfo
   via __free_opinfo() while it is still linked in ci-&amp;gt;m_op_list.
   Concurrent m_op_list readers (opinfo_get_list, or direct iteration
   in smb_break_all_levII_oplock) dereference the freed node.&lt;/p&gt;
&lt;p&gt;2) opinfo-&amp;gt;o_fp is assigned after add_lease_global_list() publishes
   the opinfo on the global lease list.  A concurrent
   find_same_lease_key() can walk the lease list and dereference
   opinfo-&amp;gt;o_fp-&amp;gt;f_ci while o_fp is still NULL.&lt;/p&gt;
&lt;p&gt;Fix by restructuring the publication sequence to eliminate post-publish
failure:&lt;/p&gt;
&lt;p&gt;- Set opinfo-&amp;gt;o_fp before any list publication (fixes NULL deref).
- Preallocate lease_table via alloc_lease_table() before opinfo_add()
  so add_lease_global_list() becomes infallible after publication.
- Keep the original m_op_list publication order (opinfo_add before
  lease list) so concurrent opens via same_client_has_lease() and
  opinfo_get_list() still see the in-flight grant.
- Use opinfo_put() instead of __free_opinfo() on err_out so that
  the RCU-deferred free path is used.&lt;/p&gt;
&lt;p&gt;This also requires splitting add_lease_global_list() to take a
preallocated lease_table and…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-31444</guid>
    </item>
  </channel>
</rss>
