<?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:34:10 +0000</lastBuildDate>
    <item>
      <title>CVE-2023-53054 — usb: dwc2: fix a devres leak in hw_enable upon suspend resume</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2023-53054</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: dwc2: fix a devres leak in hw_enable upon suspend resume&lt;/p&gt;
&lt;p&gt;Each time the platform goes to low power, PM suspend / resume routines
call: __dwc2_lowlevel_hw_enable -&amp;gt; devm_add_action_or_reset().
This adds a new devres each time.
This may also happen at runtime, as dwc2_lowlevel_hw_enable() can be
called from udc_start().&lt;/p&gt;
&lt;p&gt;This can be seen with tracing:
- echo 1 &amp;gt; /sys/kernel/debug/tracing/events/dev/devres_log/enable
- go to low power
- cat /sys/kernel/debug/tracing/trace&lt;/p&gt;
&lt;p&gt;A new &amp;#34;ADD&amp;#34; entry is found upon each low power cycle:
... devres_log: 49000000.usb-otg ADD 82a13bba devm_action_release (8 bytes)
... devres_log: 49000000.usb-otg ADD 49889daf devm_action_release (8 bytes)
...&lt;/p&gt;
&lt;p&gt;A second issue is addressed here:
- regulator_bulk_enable() is called upon each PM cycle (suspend/resume).
- regulator_bulk_disable() never gets called.&lt;/p&gt;
&lt;p&gt;So the reference count for these regulators constantly increase, by one
upon each low power cycle, due to missing regulator_bulk_disable() call
in __dwc2_lowlevel_hw_disable().&lt;/p&gt;
&lt;p&gt;The original fix that introduced the devm_add_action_or_reset() call,
fixed an issue during probe, that happens due to other errors in
dwc2_driver_probe() -&amp;gt; dwc2_core_reset(). Then the probe fails without
disabling regulators, when dr_mode == USB_DR_MODE_PERIPHERAL.&lt;/p&gt;
&lt;p&gt;Rather fix the error path: disable all the low level hardware in the
error path, by using the &amp;#34;hsotg-&amp;gt;ll_hw_enabled&amp;#34; flag. Checking dr_mod…&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: dwc2: fix a devres leak in hw_enable upon suspend resume&lt;/p&gt;
&lt;p&gt;Each time the platform goes to low power, PM suspend / resume routines
call: __dwc2_lowlevel_hw_enable -&amp;gt; devm_add_action_or_reset().
This adds a new devres each time.
This may also happen at runtime, as dwc2_lowlevel_hw_enable() can be
called from udc_start().&lt;/p&gt;
&lt;p&gt;This can be seen with tracing:
- echo 1 &amp;gt; /sys/kernel/debug/tracing/events/dev/devres_log/enable
- go to low power
- cat /sys/kernel/debug/tracing/trace&lt;/p&gt;
&lt;p&gt;A new &amp;#34;ADD&amp;#34; entry is found upon each low power cycle:
... devres_log: 49000000.usb-otg ADD 82a13bba devm_action_release (8 bytes)
... devres_log: 49000000.usb-otg ADD 49889daf devm_action_release (8 bytes)
...&lt;/p&gt;
&lt;p&gt;A second issue is addressed here:
- regulator_bulk_enable() is called upon each PM cycle (suspend/resume).
- regulator_bulk_disable() never gets called.&lt;/p&gt;
&lt;p&gt;So the reference count for these regulators constantly increase, by one
upon each low power cycle, due to missing regulator_bulk_disable() call
in __dwc2_lowlevel_hw_disable().&lt;/p&gt;
&lt;p&gt;The original fix that introduced the devm_add_action_or_reset() call,
fixed an issue during probe, that happens due to other errors in
dwc2_driver_probe() -&amp;gt; dwc2_core_reset(). Then the probe fails without
disabling regulators, when dr_mode == USB_DR_MODE_PERIPHERAL.&lt;/p&gt;
&lt;p&gt;Rather fix the error path: disable all the low level hardware in the
error path, by using the &amp;#34;hsotg-&amp;gt;ll_hw_enabled&amp;#34; flag. Checking dr_mod…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2023-53054</guid>
    </item>
  </channel>
</rss>
