Commit 49b707b9 authored by Julia Lawall's avatar Julia Lawall Committed by Greg Kroah-Hartman

drivers/usb/class/usblp.c: adjust error handling code

In this code, it is possible to tell statically whether usblp will be NULL
in the error handling code.

Oliver Neukum suggested to make a goto to the final return rather than 
return directly.

The semantic match that finds this problem is as follows:
(http://www.emn.fr/x-info/coccinelle/)

// <smpl>
@@
identifier f,err,l,l1;
type T;
expression x,E;
statement S;
@@

x = NULL
... when != goto l1;
* x = f(...)
... when != x
err = E;
goto l;
...
* if (x != NULL)
  S
return err;
// </smpl>
Signed-off-by: default avatarJulia Lawall <julia@diku.dk>
Cc: Pete Zaitcev <zaitcev@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 5b775f67
...@@ -1076,15 +1076,16 @@ static int usblp_probe(struct usb_interface *intf, ...@@ -1076,15 +1076,16 @@ static int usblp_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
struct usb_device *dev = interface_to_usbdev (intf); struct usb_device *dev = interface_to_usbdev (intf);
struct usblp *usblp = NULL; struct usblp *usblp;
int protocol; int protocol;
int retval; int retval;
/* Malloc and start initializing usblp structure so we can use it /* Malloc and start initializing usblp structure so we can use it
* directly. */ * directly. */
if (!(usblp = kzalloc(sizeof(struct usblp), GFP_KERNEL))) { usblp = kzalloc(sizeof(struct usblp), GFP_KERNEL);
if (!usblp) {
retval = -ENOMEM; retval = -ENOMEM;
goto abort; goto abort_ret;
} }
usblp->dev = dev; usblp->dev = dev;
mutex_init(&usblp->wmut); mutex_init(&usblp->wmut);
...@@ -1179,12 +1180,11 @@ static int usblp_probe(struct usb_interface *intf, ...@@ -1179,12 +1180,11 @@ static int usblp_probe(struct usb_interface *intf,
usb_set_intfdata (intf, NULL); usb_set_intfdata (intf, NULL);
device_remove_file(&intf->dev, &dev_attr_ieee1284_id); device_remove_file(&intf->dev, &dev_attr_ieee1284_id);
abort: abort:
if (usblp) {
kfree(usblp->readbuf); kfree(usblp->readbuf);
kfree(usblp->statusbuf); kfree(usblp->statusbuf);
kfree(usblp->device_id_string); kfree(usblp->device_id_string);
kfree(usblp); kfree(usblp);
} abort_ret:
return retval; return retval;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment