Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5477c11 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman
Browse files

usbcore: fix endpoint device creation



This patch (as800) straightens out the USB endpoint class device
creation routine, fixing a refcount bug in the process.

Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent c40fd5ea
Loading
Loading
Loading
Loading
+8 −10
Original line number Diff line number Diff line
@@ -223,7 +223,7 @@ int usb_create_ep_files(struct device *parent,
	ep_dev = kzalloc(sizeof(*ep_dev), GFP_KERNEL);
	if (!ep_dev) {
		retval = -ENOMEM;
		goto exit;
		goto error_alloc;
	}

	/* fun calculation to determine the minor of this endpoint */
@@ -241,33 +241,31 @@ int usb_create_ep_files(struct device *parent,

	retval = device_register(&ep_dev->dev);
	if (retval)
		goto error;
		goto error_register;
	retval = sysfs_create_group(&ep_dev->dev.kobj, &ep_dev_attr_grp);
	if (retval)
		goto error_group;

	endpoint->ep_dev = ep_dev;

	/* create the symlink to the old-style "ep_XX" directory */
	sprintf(name, "ep_%02x", endpoint->desc.bEndpointAddress);
	retval = sysfs_create_link(&parent->kobj,
				   &endpoint->ep_dev->dev.kobj, name);
	retval = sysfs_create_link(&parent->kobj, &ep_dev->dev.kobj, name);
	if (retval)
		goto error_link;
exit:
	endpoint->ep_dev = ep_dev;
	return retval;

error_link:
	sysfs_remove_group(&ep_dev->dev.kobj, &ep_dev_attr_grp);

error_group:
	device_unregister(&ep_dev->dev);
	endpoint->ep_dev = NULL;
	destroy_endpoint_class();
	return retval;
error:

error_register:
	kfree(ep_dev);
error_alloc:
	destroy_endpoint_class();
exit:
	return retval;
}