2008-07-16 15:18:31

by Julia Lawall

[permalink] [raw]
Subject: [PATCH] drivers/usb/class/usblp.c: adjust error handling code

From: Julia Lawall <[email protected]>

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

Another option would have been to put a label directly on the return.

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: Julia Lawall <[email protected]>

---
diff -u -p a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c
--- a/drivers/usb/class/usblp.c
+++ b/drivers/usb/class/usblp.c
@@ -1076,16 +1076,15 @@ static int usblp_probe(struct usb_interf
const struct usb_device_id *id)
{
struct usb_device *dev = interface_to_usbdev (intf);
- struct usblp *usblp = NULL;
+ struct usblp *usblp;
int protocol;
int retval;

/* Malloc and start initializing usblp structure so we can use it
* directly. */
- if (!(usblp = kzalloc(sizeof(struct usblp), GFP_KERNEL))) {
- retval = -ENOMEM;
- goto abort;
- }
+ usblp = kzalloc(sizeof(struct usblp), GFP_KERNEL);
+ if (!usblp)
+ return -ENOMEM;
usblp->dev = dev;
mutex_init(&usblp->wmut);
mutex_init (&usblp->mut);
@@ -1179,12 +1178,10 @@ abort_intfdata:
usb_set_intfdata (intf, NULL);
device_remove_file(&intf->dev, &dev_attr_ieee1284_id);
abort:
- if (usblp) {
- kfree(usblp->readbuf);
- kfree(usblp->statusbuf);
- kfree(usblp->device_id_string);
- kfree(usblp);
- }
+ kfree(usblp->readbuf);
+ kfree(usblp->statusbuf);
+ kfree(usblp->device_id_string);
+ kfree(usblp);
return retval;
}


2008-07-16 15:44:26

by Oliver Neukum

[permalink] [raw]
Subject: Re: [PATCH] drivers/usb/class/usblp.c: adjust error handling code

Am Mittwoch 16 Juli 2008 17:17:42 schrieb Julia Lawall:
> From: Julia Lawall <[email protected]>
>
> In this code, it is possible to tell statically whether usblp will be NULL
> in the error handling code.
>
> Another option would have been to put a label directly on the return.

That would be better. It means less chance to overlook an error case
if locking needs to be added in the future.

Regards
Oliver

2008-07-16 16:00:59

by Julia Lawall

[permalink] [raw]
Subject: [PATCH retry] drivers/usb/class/usblp.c: adjust error handling code

From: Julia Lawall <[email protected]>

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: Julia Lawall <[email protected]>

---
diff -u -p a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c
--- a/drivers/usb/class/usblp.c
+++ b/drivers/usb/class/usblp.c
@@ -1076,15 +1076,16 @@ static int usblp_probe(struct usb_interf
const struct usb_device_id *id)
{
struct usb_device *dev = interface_to_usbdev (intf);
- struct usblp *usblp = NULL;
+ struct usblp *usblp;
int protocol;
int retval;

/* Malloc and start initializing usblp structure so we can use it
* directly. */
- if (!(usblp = kzalloc(sizeof(struct usblp), GFP_KERNEL))) {
+ usblp = kzalloc(sizeof(struct usblp), GFP_KERNEL);
+ if (!usblp) {
retval = -ENOMEM;
- goto abort;
+ goto abort_ret;
}
usblp->dev = dev;
mutex_init(&usblp->wmut);
@@ -1179,12 +1180,11 @@ abort_intfdata:
usb_set_intfdata (intf, NULL);
device_remove_file(&intf->dev, &dev_attr_ieee1284_id);
abort:
- if (usblp) {
- kfree(usblp->readbuf);
- kfree(usblp->statusbuf);
- kfree(usblp->device_id_string);
- kfree(usblp);
- }
+ kfree(usblp->readbuf);
+ kfree(usblp->statusbuf);
+ kfree(usblp->device_id_string);
+ kfree(usblp);
+abort_ret:
return retval;
}

2008-07-16 16:46:45

by Pete Zaitcev

[permalink] [raw]
Subject: Re: [PATCH] drivers/usb/class/usblp.c: adjust error handling code

On Wed, 16 Jul 2008 17:17:42 +0200 (CEST), Julia Lawall <[email protected]> wrote:

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

I think it's fine. Not much benefit IMHO.

-- Pete