diff
+#define CLEANUP_DISABLE_SHOW(hub, intf, kn, hdev) do { \
+	if (hdev) usb_unlock_device(hdev); \
+	if (kn) sysfs_unbreak_active_protection(kn); \
+	if (intf) usb_autopm_put_interface(intf); \
+	if (hub) hub_put(hub); \
+} while (0)
+
 static ssize_t disable_show(struct device *dev,
 			      struct device_attribute *attr, char *buf)
 {
     // ... (existing code) ...
     if (rc < 0)
-		goto out_hub_get;
+		goto out;
     // ... (existing code) ...
- out_hdev_lock:
-	usb_unlock_device(hdev);
+ out:
+	CLEANUP_DISABLE_SHOW(hub, intf, kn, hdev);
+	return rc;
 }
