<?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 05:52:14 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-80780 — HID: pidff: fix OOB write when hid-&gt;inputs is empty</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-80780</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;HID: pidff: fix OOB write when hid-&amp;gt;inputs is empty&lt;/p&gt;
&lt;p&gt;hid_pidff_init_with_quirks() derives its input_dev from&lt;/p&gt;
&lt;p&gt;list_entry(hid-&amp;gt;inputs.next, struct hid_input, list)&lt;/p&gt;
&lt;p&gt;without first checking that hid-&amp;gt;inputs is non-empty.  The list member
of struct hid_input is at offset 0, so on an empty list list_entry()
yields &amp;amp;hid-&amp;gt;inputs itself and the following hidinput-&amp;gt;input load reads
an unrelated member of struct hid_device.  dev is then a type-confused
pointer, and force-feedback init writes through it: each
set_bit(FF_*, dev-&amp;gt;ffbit) stores 8 bytes at dev + 192, past the end of
the object dev actually aliases, and input_ff_create() adds further
writes of a heap pointer and two function pointers.&lt;/p&gt;
&lt;p&gt;Until hid-universal-pidff the only caller was hid_pidff_init() from
usbhid, which runs under HID_CLAIMED_INPUT and therefore always has at
least one hid_input.  universal_pidff_probe() starts the device with
HID_CONNECT_DEFAULT &amp;amp; ~HID_CONNECT_FF and then calls
hid_pidff_init_with_quirks() directly whenever the descriptor carries a
PID usage page, bypassing that gate.  A report descriptor whose only
application collection is on HID_UP_PID leaves hid-&amp;gt;inputs empty while
hid_connect() still succeeds through the hidraw claim, so probe reaches
the unguarded list_entry().&lt;/p&gt;
&lt;p&gt;The write happens in the USB probe path, on the hotplug workqueue, so
plugging in a malicious device is enough to trigger it; no attacker
software and no logge…&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;HID: pidff: fix OOB write when hid-&amp;gt;inputs is empty&lt;/p&gt;
&lt;p&gt;hid_pidff_init_with_quirks() derives its input_dev from&lt;/p&gt;
&lt;p&gt;list_entry(hid-&amp;gt;inputs.next, struct hid_input, list)&lt;/p&gt;
&lt;p&gt;without first checking that hid-&amp;gt;inputs is non-empty.  The list member
of struct hid_input is at offset 0, so on an empty list list_entry()
yields &amp;amp;hid-&amp;gt;inputs itself and the following hidinput-&amp;gt;input load reads
an unrelated member of struct hid_device.  dev is then a type-confused
pointer, and force-feedback init writes through it: each
set_bit(FF_*, dev-&amp;gt;ffbit) stores 8 bytes at dev + 192, past the end of
the object dev actually aliases, and input_ff_create() adds further
writes of a heap pointer and two function pointers.&lt;/p&gt;
&lt;p&gt;Until hid-universal-pidff the only caller was hid_pidff_init() from
usbhid, which runs under HID_CLAIMED_INPUT and therefore always has at
least one hid_input.  universal_pidff_probe() starts the device with
HID_CONNECT_DEFAULT &amp;amp; ~HID_CONNECT_FF and then calls
hid_pidff_init_with_quirks() directly whenever the descriptor carries a
PID usage page, bypassing that gate.  A report descriptor whose only
application collection is on HID_UP_PID leaves hid-&amp;gt;inputs empty while
hid_connect() still succeeds through the hidraw claim, so probe reaches
the unguarded list_entry().&lt;/p&gt;
&lt;p&gt;The write happens in the USB probe path, on the hotplug workqueue, so
plugging in a malicious device is enough to trigger it; no attacker
software and no logge…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-80780</guid>
    </item>
  </channel>
</rss>
