diff
 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 ssize_t disable_show(struct device *dev,
 			      struct device_attribute *attr, char *buf)
 {
     // ... (existing code) ...
     if (rc < 0)
-		goto out_hub_get;
+		goto out_put_hub;
     // ... (existing code) ...
  out_hdev_lock:
 	usb_unlock_device(hdev);
+	sysfs_unbreak_active_protection(kn);
+ out_autopm:
+	usb_autopm_put_interface(intf);
+ out_put_hub:
+	hub_put(hub);
+	return rc;
 }
