media: dvb-frontends: fix memory leaks
authorWenwen Wang <wenwen@cs.uga.edu>
Sat, 17 Aug 2019 06:42:24 +0000 (03:42 -0300)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Wed, 21 Aug 2019 21:39:54 +0000 (18:39 -0300)
In dib7000pc_detection(), 'tx' and 'rx' are allocated through kzalloc()
respectively. However, if DiB7000PC is detected, they are not deallocated,
leading to memory leaks. To fix this issue, create a label to free 'tx' and
'rx' before returning from the function.

Signed-off-by: Wenwen Wang <wenwen@cs.uga.edu>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/dvb-frontends/dib7000p.c

index 52f5e69..0d22c70 100644 (file)
@@ -2036,7 +2036,8 @@ static int dib7000pc_detection(struct i2c_adapter *i2c_adap)
        if (i2c_transfer(i2c_adap, msg, 2) == 2)
                if (rx[0] == 0x01 && rx[1] == 0xb3) {
                        dprintk("-D-  DiB7000PC detected\n");
-                       return 1;
+                       ret = 1;
+                       goto out;
                }
 
        msg[0].addr = msg[1].addr = 0x40;
@@ -2044,11 +2045,13 @@ static int dib7000pc_detection(struct i2c_adapter *i2c_adap)
        if (i2c_transfer(i2c_adap, msg, 2) == 2)
                if (rx[0] == 0x01 && rx[1] == 0xb3) {
                        dprintk("-D-  DiB7000PC detected\n");
-                       return 1;
+                       ret = 1;
+                       goto out;
                }
 
        dprintk("-D-  DiB7000PC not detected\n");
 
+out:
        kfree(rx);
 rx_memory_error:
        kfree(tx);