<?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>Fri, 02 Oct 2026 17:17:10 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-63815 — f2fs: bound i_inline_xattr_size for non-inline-xattr inodes</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-63815</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;f2fs: bound i_inline_xattr_size for non-inline-xattr inodes&lt;/p&gt;
&lt;p&gt;When the flexible_inline_xattr feature is enabled, do_read_inode() loads
the on-disk i_inline_xattr_size unconditionally:&lt;/p&gt;
&lt;p&gt;if (f2fs_sb_has_flexible_inline_xattr(sbi))
		fi-&amp;gt;i_inline_xattr_size = le16_to_cpu(ri-&amp;gt;i_inline_xattr_size);&lt;/p&gt;
&lt;p&gt;but sanity_check_inode() only range-checks it when the inode also has the
FI_INLINE_XATTR flag set.  An inode that carries an inline dentry or inline
data but not FI_INLINE_XATTR -- the normal layout for an inline
directory -- therefore keeps a fully attacker-controlled
i_inline_xattr_size from a crafted image.&lt;/p&gt;
&lt;p&gt;get_inline_xattr_addrs() returns that value with no flag gating, so it
feeds the inode geometry:&lt;/p&gt;
&lt;p&gt;MAX_INLINE_DATA()  = 4 * (CUR_ADDRS_PER_INODE - i_inline_xattr_size - 1)
	NR_INLINE_DENTRY() = MAX_INLINE_DATA() * BITS_PER_BYTE / (...)
	addrs_per_page()   = CUR_ADDRS_PER_INODE - i_inline_xattr_size&lt;/p&gt;
&lt;p&gt;A large i_inline_xattr_size drives MAX_INLINE_DATA() and NR_INLINE_DENTRY()
negative, so make_dentry_ptr_inline() sets d-&amp;gt;max (int) to a negative
value.  The inline directory walk then compares an unsigned long bit_pos
against that negative d-&amp;gt;max, which is promoted to a huge unsigned bound,
and reads far past the inline area:&lt;/p&gt;
&lt;p&gt;while (bit_pos &amp;lt; d-&amp;gt;max)		/* fs/f2fs/dir.c */
		... test_bit_le(bit_pos, d-&amp;gt;bitmap) / d-&amp;gt;dentry[bit_pos] ...&lt;/p&gt;
&lt;p&gt;Mounting a crafted image and reading such a directory triggers an
out-of-bound…&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;f2fs: bound i_inline_xattr_size for non-inline-xattr inodes&lt;/p&gt;
&lt;p&gt;When the flexible_inline_xattr feature is enabled, do_read_inode() loads
the on-disk i_inline_xattr_size unconditionally:&lt;/p&gt;
&lt;p&gt;if (f2fs_sb_has_flexible_inline_xattr(sbi))
		fi-&amp;gt;i_inline_xattr_size = le16_to_cpu(ri-&amp;gt;i_inline_xattr_size);&lt;/p&gt;
&lt;p&gt;but sanity_check_inode() only range-checks it when the inode also has the
FI_INLINE_XATTR flag set.  An inode that carries an inline dentry or inline
data but not FI_INLINE_XATTR -- the normal layout for an inline
directory -- therefore keeps a fully attacker-controlled
i_inline_xattr_size from a crafted image.&lt;/p&gt;
&lt;p&gt;get_inline_xattr_addrs() returns that value with no flag gating, so it
feeds the inode geometry:&lt;/p&gt;
&lt;p&gt;MAX_INLINE_DATA()  = 4 * (CUR_ADDRS_PER_INODE - i_inline_xattr_size - 1)
	NR_INLINE_DENTRY() = MAX_INLINE_DATA() * BITS_PER_BYTE / (...)
	addrs_per_page()   = CUR_ADDRS_PER_INODE - i_inline_xattr_size&lt;/p&gt;
&lt;p&gt;A large i_inline_xattr_size drives MAX_INLINE_DATA() and NR_INLINE_DENTRY()
negative, so make_dentry_ptr_inline() sets d-&amp;gt;max (int) to a negative
value.  The inline directory walk then compares an unsigned long bit_pos
against that negative d-&amp;gt;max, which is promoted to a huge unsigned bound,
and reads far past the inline area:&lt;/p&gt;
&lt;p&gt;while (bit_pos &amp;lt; d-&amp;gt;max)		/* fs/f2fs/dir.c */
		... test_bit_le(bit_pos, d-&amp;gt;bitmap) / d-&amp;gt;dentry[bit_pos] ...&lt;/p&gt;
&lt;p&gt;Mounting a crafted image and reading such a directory triggers an
out-of-bound…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-63815</guid>
    </item>
  </channel>
</rss>
