]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
media: dvb-core: fix a memory leak bug
authorWenwen Wang <wenwen@cs.uga.edu>
Sun, 18 Aug 2019 03:45:40 +0000 (00:45 -0300)
committerKleber Sacilotto de Souza <kleber.souza@canonical.com>
Wed, 16 Oct 2019 09:55:24 +0000 (11:55 +0200)
BugLink: https://bugs.launchpad.net/bugs/1847155
[ Upstream commit fcd5ce4b3936242e6679875a4d3c3acfc8743e15 ]

In dvb_create_media_entity(), 'dvbdev->entity' is allocated through
kzalloc(). Then, 'dvbdev->pads' is allocated through kcalloc(). However, if
kcalloc() fails, the allocated 'dvbdev->entity' is not deallocated, leading
to a memory leak bug. To fix this issue, free 'dvbdev->entity' before
returning -ENOMEM.

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
drivers/media/dvb-core/dvbdev.c

index 060c60ddfcc3970765fd80f679a7179e4a66773e..ed5a793c0f5a6121d0df622facd129287bae9df8 100644 (file)
@@ -338,8 +338,10 @@ static int dvb_create_media_entity(struct dvb_device *dvbdev,
        if (npads) {
                dvbdev->pads = kcalloc(npads, sizeof(*dvbdev->pads),
                                       GFP_KERNEL);
-               if (!dvbdev->pads)
+               if (!dvbdev->pads) {
+                       kfree(dvbdev->entity);
                        return -ENOMEM;
+               }
        }
 
        switch (type) {