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

Commit 9ab99c8c authored by Matthieu CASTET's avatar Matthieu CASTET Committed by Greg Kroah-Hartman
Browse files

UEAGLE: fix ueagle-atm Oops



The array of attribute passed to sysfs_create_group() must be
NULL-terminated.

The sysfs entries are created before the start of the modem state machine
to avoid to stop it in case of errors in sysfs creation.  Also
{destroy,create}_fs_entries are removed as they do nothing.

Signed-off-by: default avatarLaurent Riffard <laurent.riffard@free.fr>
Signed-off-by: default avatarMatthieu CASTET <castet.matthieu@free.fr>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent deb8ee43
Loading
Loading
Loading
Loading
+11 −21
Original line number Diff line number Diff line
@@ -1648,16 +1648,12 @@ static struct attribute *attrs[] = {
	&dev_attr_stat_usunc.attr,
	&dev_attr_stat_dsunc.attr,
	&dev_attr_stat_firmid.attr,
	NULL,
};
static struct attribute_group attr_grp = {
	.attrs = attrs,
};

static int create_fs_entries(struct usb_interface *intf)
{
	return sysfs_create_group(&intf->dev.kobj, &attr_grp);
}

static int uea_bind(struct usbatm_data *usbatm, struct usb_interface *intf,
		   const struct usb_device_id *id)
{
@@ -1717,31 +1713,25 @@ static int uea_bind(struct usbatm_data *usbatm, struct usb_interface *intf,
		}
	}

	ret = sysfs_create_group(&intf->dev.kobj, &attr_grp);
	if (ret < 0)
		goto error;

	ret = uea_boot(sc);
	if (ret < 0) {
		kfree(sc);
		return ret;
	}
	if (ret < 0)
		goto error;

	ret = create_fs_entries(intf);
	if (ret) {
		uea_stop(sc);
	return 0;
error:
	kfree(sc);
	return ret;
}
	return 0;
}

static void destroy_fs_entries(struct usb_interface *intf)
{
	sysfs_remove_group(&intf->dev.kobj, &attr_grp);
}

static void uea_unbind(struct usbatm_data *usbatm, struct usb_interface *intf)
{
	struct uea_softc *sc = usbatm->driver_data;

	destroy_fs_entries(intf);
	sysfs_remove_group(&intf->dev.kobj, &attr_grp);
	uea_stop(sc);
	kfree(sc);
}