[<prev] [next>] [day] [month] [year] [list]
Message-ID: <2025022607-CVE-2022-49501-6f2e@gregkh>
Date: Wed, 26 Feb 2025 03:12:55 +0100
From: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
To: linux-cve-announce@...r.kernel.org
Cc: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
Subject: CVE-2022-49501: usbnet: Run unregister_netdev() before unbind() again
Description
===========
In the Linux kernel, the following vulnerability has been resolved:
usbnet: Run unregister_netdev() before unbind() again
Commit 2c9d6c2b871d ("usbnet: run unbind() before unregister_netdev()")
sought to fix a use-after-free on disconnect of USB Ethernet adapters.
It turns out that a different fix is necessary to address the issue:
https://lore.kernel.org/netdev/18b3541e5372bc9b9fc733d422f4e698c089077c.1650177997.git.lukas@wunner.de/
So the commit was not necessary.
The commit made binding and unbinding of USB Ethernet asymmetrical:
Before, usbnet_probe() first invoked the ->bind() callback and then
register_netdev(). usbnet_disconnect() mirrored that by first invoking
unregister_netdev() and then ->unbind().
Since the commit, the order in usbnet_disconnect() is reversed and no
longer mirrors usbnet_probe().
One consequence is that a PHY disconnected (and stopped) in ->unbind()
is afterwards stopped once more by unregister_netdev() as it closes the
netdev before unregistering. That necessitates a contortion in ->stop()
because the PHY may only be stopped if it hasn't already been
disconnected.
Reverting the commit allows making the call to phy_stop() unconditional
in ->stop().
The Linux kernel CVE team has assigned CVE-2022-49501 to this issue.
Affected and fixed versions
===========================
Fixed in 5.15.46 with commit 6d5deb242874d924beccf7eb3cef04c1c3b0da79
Fixed in 5.17.14 with commit fbda837107f9bd4ec658d2aa88c6856dba606f06
Fixed in 5.18.3 with commit 969a1b3ea3cb7d58a16fe12fd1b04bfc0ea40509
Fixed in 5.19 with commit d1408f6b4dd78fb1b9e26bcf64477984e5f85409
Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.
Unaffected versions might change over time as fixes are backported to
older supported kernel versions. The official CVE entry at
https://cve.org/CVERecord/?id=CVE-2022-49501
will be updated if fixes are backported, please check that for the most
up to date information about this issue.
Affected files
==============
The file(s) affected by this issue are:
drivers/net/usb/asix_devices.c
drivers/net/usb/smsc95xx.c
drivers/net/usb/usbnet.c
Mitigation
==========
The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes. Individual
changes are never tested alone, but rather are part of a larger kernel
release. Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all. If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
https://git.kernel.org/stable/c/6d5deb242874d924beccf7eb3cef04c1c3b0da79
https://git.kernel.org/stable/c/fbda837107f9bd4ec658d2aa88c6856dba606f06
https://git.kernel.org/stable/c/969a1b3ea3cb7d58a16fe12fd1b04bfc0ea40509
https://git.kernel.org/stable/c/d1408f6b4dd78fb1b9e26bcf64477984e5f85409
Powered by blists - more mailing lists