HID: drivers/hid/hid-roccat.c: eliminate a null pointer dereference
authorJulia Lawall <julia@diku.dk>
Tue, 1 Nov 2011 14:13:04 +0000 (15:13 +0100)
committerJiri Kosina <jkosina@suse.cz>
Tue, 1 Nov 2011 14:13:08 +0000 (15:13 +0100)
commit8052ee5f5fd9be153129eaa06ced4a786415abc1
tree4f33bf711486846f235426aa3eb365f51570a97d
parentad734bc1565364f9e4b70888d3ce5743b3c1030a
HID: drivers/hid/hid-roccat.c: eliminate a null pointer dereference

It is not possible to take the lock in device if device is NULL.
The mutex_lock is thus moved after the NULL test.  New error handling
labels are added at the end to differentiate between the cases where
different sets of locks should be unlocks, and between whether or not
reader should be freed (only on error).

The semantic match that finds this problem is as follows:
(http://coccinelle.lip6.fr/)

// <smpl>
@r@
expression E, E1;
identifier f;
statement S1,S2,S3;
@@

if (E == NULL)
{
  ... when != if (E == NULL || ...) S1 else S2
      when != E = E1
*E->f
  ... when any
  return ...;
}
else S3
// </smpl>

Signed-off-by: Julia Lawall <julia@diku.dk>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-roccat.c