From: Greg Kroah-Hartman Date: Mon, 1 Apr 2024 09:52:40 +0000 (+0200) Subject: 5.10-stable patches X-Git-Tag: v6.7.12~68 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4b4372c36edc228390c8a45fec25d688f5a8fac1;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: usb-core-add-hub_get-and-hub_put-routines.patch --- diff --git a/queue-5.10/series b/queue-5.10/series index ec4f5a0ac1d..bd47cf122e6 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -164,3 +164,4 @@ alsa-sh-aica-reorder-cleanup-operations-to-avoid-uaf-bugs.patch scsi-core-fix-unremoved-procfs-host-directory-regression.patch staging-vc04_services-changen-strncpy-to-strscpy_pad.patch staging-vc04_services-fix-information-leak-in-create_component.patch +usb-core-add-hub_get-and-hub_put-routines.patch diff --git a/queue-5.10/usb-core-add-hub_get-and-hub_put-routines.patch b/queue-5.10/usb-core-add-hub_get-and-hub_put-routines.patch new file mode 100644 index 00000000000..8a76460955a --- /dev/null +++ b/queue-5.10/usb-core-add-hub_get-and-hub_put-routines.patch @@ -0,0 +1,113 @@ +From ee113b860aa169e9a4d2c167c95d0f1961c6e1b8 Mon Sep 17 00:00:00 2001 +From: Alan Stern +Date: Fri, 15 Mar 2024 13:04:50 -0400 +Subject: USB: core: Add hub_get() and hub_put() routines + +From: Alan Stern + +commit ee113b860aa169e9a4d2c167c95d0f1961c6e1b8 upstream. + +Create hub_get() and hub_put() routines to encapsulate the kref_get() +and kref_put() calls in hub.c. The new routines will be used by the +next patch in this series. + +Signed-off-by: Alan Stern +Link: https://lore.kernel.org/r/604da420-ae8a-4a9e-91a4-2d511ff404fb@rowland.harvard.edu +Cc: stable +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/core/hub.c | 23 ++++++++++++++++------- + drivers/usb/core/hub.h | 2 ++ + 2 files changed, 18 insertions(+), 7 deletions(-) + +--- a/drivers/usb/core/hub.c ++++ b/drivers/usb/core/hub.c +@@ -116,7 +116,6 @@ EXPORT_SYMBOL_GPL(ehci_cf_port_reset_rws + #define HUB_DEBOUNCE_STEP 25 + #define HUB_DEBOUNCE_STABLE 100 + +-static void hub_release(struct kref *kref); + static int usb_reset_and_verify_device(struct usb_device *udev); + static int hub_port_disable(struct usb_hub *hub, int port1, int set_state); + static bool hub_port_warm_reset_required(struct usb_hub *hub, int port1, +@@ -678,14 +677,14 @@ static void kick_hub_wq(struct usb_hub * + */ + intf = to_usb_interface(hub->intfdev); + usb_autopm_get_interface_no_resume(intf); +- kref_get(&hub->kref); ++ hub_get(hub); + + if (queue_work(hub_wq, &hub->events)) + return; + + /* the work has already been scheduled */ + usb_autopm_put_interface_async(intf); +- kref_put(&hub->kref, hub_release); ++ hub_put(hub); + } + + void usb_kick_hub_wq(struct usb_device *hdev) +@@ -1053,7 +1052,7 @@ static void hub_activate(struct usb_hub + goto init2; + goto init3; + } +- kref_get(&hub->kref); ++ hub_get(hub); + + /* The superspeed hub except for root hub has to use Hub Depth + * value as an offset into the route string to locate the bits +@@ -1301,7 +1300,7 @@ static void hub_activate(struct usb_hub + device_unlock(&hdev->dev); + } + +- kref_put(&hub->kref, hub_release); ++ hub_put(hub); + } + + /* Implement the continuations for the delays above */ +@@ -1717,6 +1716,16 @@ static void hub_release(struct kref *kre + kfree(hub); + } + ++void hub_get(struct usb_hub *hub) ++{ ++ kref_get(&hub->kref); ++} ++ ++void hub_put(struct usb_hub *hub) ++{ ++ kref_put(&hub->kref, hub_release); ++} ++ + static unsigned highspeed_hubs; + + static void hub_disconnect(struct usb_interface *intf) +@@ -1763,7 +1772,7 @@ static void hub_disconnect(struct usb_in + if (hub->quirk_disable_autosuspend) + usb_autopm_put_interface(intf); + +- kref_put(&hub->kref, hub_release); ++ hub_put(hub); + } + + static bool hub_descriptor_is_sane(struct usb_host_interface *desc) +@@ -5857,7 +5866,7 @@ out_hdev_lock: + + /* Balance the stuff in kick_hub_wq() and allow autosuspend */ + usb_autopm_put_interface(intf); +- kref_put(&hub->kref, hub_release); ++ hub_put(hub); + + kcov_remote_stop(); + } +--- a/drivers/usb/core/hub.h ++++ b/drivers/usb/core/hub.h +@@ -117,6 +117,8 @@ extern void usb_hub_remove_port_device(s + extern int usb_hub_set_port_power(struct usb_device *hdev, struct usb_hub *hub, + int port1, bool set); + extern struct usb_hub *usb_hub_to_struct_hub(struct usb_device *hdev); ++extern void hub_get(struct usb_hub *hub); ++extern void hub_put(struct usb_hub *hub); + extern int hub_port_debounce(struct usb_hub *hub, int port1, + bool must_be_connected); + extern int usb_clear_port_feature(struct usb_device *hdev,