Input: sidewinder - fix memory leak
authorJesper Juhl <jesper.juhl@gmail.com>
Tue, 30 May 2006 03:28:05 +0000 (23:28 -0400)
committerDmitry Torokhov <dtor_core@ameritech.net>
Tue, 30 May 2006 03:28:05 +0000 (23:28 -0400)
In sw_connect we leak 'buf' and 'idbuf' when we do not leave via one of
the fail* labels. This was spotted by the coverity checker.

Patch is compile tested only due to lack of hardware.

Signed-off-by: Jesper Juhl <jesper.juhl@gmail.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/joystick/sidewinder.c

index 2b2ec10..95c0de7 100644 (file)
@@ -589,7 +589,7 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv)
        struct sw *sw;
        struct input_dev *input_dev;
        int i, j, k, l;
-       int err;
+       int err = 0;
        unsigned char *buf = NULL;      /* [SW_LENGTH] */
        unsigned char *idbuf = NULL;    /* [SW_LENGTH] */
        unsigned char m = 1;
@@ -776,7 +776,10 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv)
                        goto fail4;
        }
 
-       return 0;
+ out:  kfree(buf);
+       kfree(idbuf);
+
+       return err;
 
  fail4:        input_free_device(sw->dev[i]);
  fail3:        while (--i >= 0)
@@ -784,9 +787,7 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv)
  fail2:        gameport_close(gameport);
  fail1:        gameport_set_drvdata(gameport, NULL);
        kfree(sw);
-       kfree(buf);
-       kfree(idbuf);
-       return err;
+       goto out;
 }
 
 static void sw_disconnect(struct gameport *gameport)