<?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, 30 Sep 2026 03:55:54 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-80575 — Input: cs40l50-vibra - validate custom data from user space</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-80575</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;Input: cs40l50-vibra - validate custom data from user space&lt;/p&gt;
&lt;p&gt;cs40l50_add() copies the custom data of an FF_PERIODIC/FF_CUSTOM effect
straight from the ff_effect the user passed to EVIOCSFF, without
requiring it to hold anything:&lt;/p&gt;
&lt;p&gt;work_data.custom_data = memdup_array_user(periodic-&amp;gt;custom_data,
                                              periodic-&amp;gt;custom_len,
                                              sizeof(s16));
    work_data.custom_len = periodic-&amp;gt;custom_len;&lt;/p&gt;
&lt;p&gt;The driver then reads two words out of that buffer: custom_data[0] as the
waveform bank in cs40l50_effect_bank_set(), and custom_data[1] as the
index within the bank in cs40l50_effect_index_set().  Neither read is
covered by a length check, and custom_len is fully user controlled:&lt;/p&gt;
&lt;p&gt;- custom_len == 0 makes memdup_array_user() call memdup_user() with a
    length of zero, which returns ZERO_SIZE_PTR rather than an error, so
    custom_data[0] dereferences it.&lt;/p&gt;
&lt;p&gt;- custom_len == 1 allocates two bytes.  A bank of ROM or RAM keeps
    effect-&amp;gt;type out of the OWT case, and custom_data[1] is then read one
    word past the allocation.&lt;/p&gt;
&lt;p&gt;The bank value itself is also mishandled.  It is masked with
CS40L50_CUSTOM_DATA_MASK (0xffff) but stored in an s16, so a
custom_data[0] of 0x8000 or above wraps to a negative value that passes
the &amp;#34;bank_type &amp;gt;= CS40L50_WVFRM_BANK_NUM&amp;#34; test.
cs40l50_effect_index_set() indexes vib-&amp;gt;dsp.banks[] with it before the
s…&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;Input: cs40l50-vibra - validate custom data from user space&lt;/p&gt;
&lt;p&gt;cs40l50_add() copies the custom data of an FF_PERIODIC/FF_CUSTOM effect
straight from the ff_effect the user passed to EVIOCSFF, without
requiring it to hold anything:&lt;/p&gt;
&lt;p&gt;work_data.custom_data = memdup_array_user(periodic-&amp;gt;custom_data,
                                              periodic-&amp;gt;custom_len,
                                              sizeof(s16));
    work_data.custom_len = periodic-&amp;gt;custom_len;&lt;/p&gt;
&lt;p&gt;The driver then reads two words out of that buffer: custom_data[0] as the
waveform bank in cs40l50_effect_bank_set(), and custom_data[1] as the
index within the bank in cs40l50_effect_index_set().  Neither read is
covered by a length check, and custom_len is fully user controlled:&lt;/p&gt;
&lt;p&gt;- custom_len == 0 makes memdup_array_user() call memdup_user() with a
    length of zero, which returns ZERO_SIZE_PTR rather than an error, so
    custom_data[0] dereferences it.&lt;/p&gt;
&lt;p&gt;- custom_len == 1 allocates two bytes.  A bank of ROM or RAM keeps
    effect-&amp;gt;type out of the OWT case, and custom_data[1] is then read one
    word past the allocation.&lt;/p&gt;
&lt;p&gt;The bank value itself is also mishandled.  It is masked with
CS40L50_CUSTOM_DATA_MASK (0xffff) but stored in an s16, so a
custom_data[0] of 0x8000 or above wraps to a negative value that passes
the &amp;#34;bank_type &amp;gt;= CS40L50_WVFRM_BANK_NUM&amp;#34; test.
cs40l50_effect_index_set() indexes vib-&amp;gt;dsp.banks[] with it before the
s…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-80575</guid>
    </item>
  </channel>
</rss>
