<?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>Sun, 04 Oct 2026 07:50:51 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-64594 — usb: gadget: f_fs: initialize reset_work at allocation time</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-64594</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;usb: gadget: f_fs: initialize reset_work at allocation time&lt;/p&gt;
&lt;p&gt;ffs_fs_kill_sb() unconditionally calls cancel_work_sync() on
ffs-&amp;gt;reset_work when a functionfs instance is unmounted:&lt;/p&gt;
&lt;p&gt;ffs_data_reset(ffs);
	cancel_work_sync(&amp;amp;ffs-&amp;gt;reset_work);&lt;/p&gt;
&lt;p&gt;However ffs-&amp;gt;reset_work is only ever initialized via INIT_WORK() in
ffs_func_set_alt() and ffs_func_disable(), and only on the
FFS_DEACTIVATED path. That state is reached solely by ffs_data_closed()
when the instance is mounted with the &amp;#34;no_disconnect&amp;#34; option, so for the
common case (no &amp;#34;no_disconnect&amp;#34;, or mounted and unmounted without ever
being deactivated) reset_work is never initialized.&lt;/p&gt;
&lt;p&gt;ffs_data_new() allocates the ffs_data with kzalloc_obj() and does not
initialize reset_work, and ffs_data_reset()/ffs_data_clear() do not touch
it either, so reset_work.func is left NULL. cancel_work_sync() on such a
work then trips the WARN_ON(!work-&amp;gt;func) guard in __flush_work():&lt;/p&gt;
&lt;p&gt;WARNING: kernel/workqueue.c:4301 at __flush_work+0x330/0x360, CPU#3: umount
  Call trace:
   __flush_work
   cancel_work_sync
   ffs_fs_kill_sb [usb_f_fs]
   deactivate_locked_super
   deactivate_super
   cleanup_mnt
   __cleanup_mnt
   task_work_run
   exit_to_user_mode_loop
   el0_svc&lt;/p&gt;
&lt;p&gt;On older kernels cancel_work_sync() on a zero-initialized work struct was
a silent no-op, which hid the missing initialization.&lt;/p&gt;
&lt;p&gt;Initialize reset_work once in ffs_data_new() so it is always valid for
the lifetime of the…&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;usb: gadget: f_fs: initialize reset_work at allocation time&lt;/p&gt;
&lt;p&gt;ffs_fs_kill_sb() unconditionally calls cancel_work_sync() on
ffs-&amp;gt;reset_work when a functionfs instance is unmounted:&lt;/p&gt;
&lt;p&gt;ffs_data_reset(ffs);
	cancel_work_sync(&amp;amp;ffs-&amp;gt;reset_work);&lt;/p&gt;
&lt;p&gt;However ffs-&amp;gt;reset_work is only ever initialized via INIT_WORK() in
ffs_func_set_alt() and ffs_func_disable(), and only on the
FFS_DEACTIVATED path. That state is reached solely by ffs_data_closed()
when the instance is mounted with the &amp;#34;no_disconnect&amp;#34; option, so for the
common case (no &amp;#34;no_disconnect&amp;#34;, or mounted and unmounted without ever
being deactivated) reset_work is never initialized.&lt;/p&gt;
&lt;p&gt;ffs_data_new() allocates the ffs_data with kzalloc_obj() and does not
initialize reset_work, and ffs_data_reset()/ffs_data_clear() do not touch
it either, so reset_work.func is left NULL. cancel_work_sync() on such a
work then trips the WARN_ON(!work-&amp;gt;func) guard in __flush_work():&lt;/p&gt;
&lt;p&gt;WARNING: kernel/workqueue.c:4301 at __flush_work+0x330/0x360, CPU#3: umount
  Call trace:
   __flush_work
   cancel_work_sync
   ffs_fs_kill_sb [usb_f_fs]
   deactivate_locked_super
   deactivate_super
   cleanup_mnt
   __cleanup_mnt
   task_work_run
   exit_to_user_mode_loop
   el0_svc&lt;/p&gt;
&lt;p&gt;On older kernels cancel_work_sync() on a zero-initialized work struct was
a silent no-op, which hid the missing initialization.&lt;/p&gt;
&lt;p&gt;Initialize reset_work once in ffs_data_new() so it is always valid for
the lifetime of the…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-64594</guid>
    </item>
  </channel>
</rss>
