This is an automatic generated email to let you know that the following patch 
were queued at the 
http://git.linuxtv.org/cgit.cgi/v4l-utils.git tree:

Subject: Revert "libdvbv5: leaks and double free in dvb_fe_open_fname()"
Author:  Mauro Carvalho Chehab <[email protected]>
Date:    Fri Apr 26 12:05:57 2019 -0300

This reverts commit c82608ca1595427c2bdbd4abb9aca9163e1df60a.

This patch is buggy, as reported at:

        https://bugs.kde.org/show_bug.cgi?id=406145
        https://bugzilla.redhat.com/show_bug.cgi?id=1695023

So, revert it, in order to make Kaffeine work again.

Thanks to Wolfgang Ulbrich with detected the bad patch and
checked that reverting it fixes the issue.

Fix tested with a PCTV 461 and a DVB-S2 stream from my TV
provider.

Signed-off-by: Mauro Carvalho Chehab <[email protected]>

 lib/libdvbv5/dvb-dev-local.c |  2 +-
 lib/libdvbv5/dvb-fe.c        | 18 ++++++++++--------
 2 files changed, 11 insertions(+), 9 deletions(-)

---

http://git.linuxtv.org/cgit.cgi/v4l-utils.git/commit/?id=41f19db34e17ed13f5cc06d9147ba83803224ce6
diff --git a/lib/libdvbv5/dvb-dev-local.c b/lib/libdvbv5/dvb-dev-local.c
index 2de9a61476f6..e98b967a37dd 100644
--- a/lib/libdvbv5/dvb-dev-local.c
+++ b/lib/libdvbv5/dvb-dev-local.c
@@ -467,7 +467,7 @@ static struct dvb_open_descriptor
                        flags &= ~O_NONBLOCK;
                }
 
-               ret = dvb_fe_open_fname(parms, dev->path, flags);
+               ret = dvb_fe_open_fname(parms, strdup(dev->path), flags);
                if (ret) {
                        free(open_dev);
                        return NULL;
diff --git a/lib/libdvbv5/dvb-fe.c b/lib/libdvbv5/dvb-fe.c
index 7f63476612d7..5dcf492ef067 100644
--- a/lib/libdvbv5/dvb-fe.c
+++ b/lib/libdvbv5/dvb-fe.c
@@ -133,6 +133,7 @@ struct dvb_v5_fe_parms *dvb_fe_open_flags(int adapter, int 
frontend,
                                          int flags)
 {
        int ret;
+       char *fname;
        struct dvb_device *dvb;
        struct dvb_dev_list *dvb_dev;
        struct dvb_v5_fe_parms_priv *parms = NULL;
@@ -152,6 +153,7 @@ struct dvb_v5_fe_parms *dvb_fe_open_flags(int adapter, int 
frontend,
                dvb_dev_free(dvb);
                return NULL;
        }
+       fname = strdup(dvb_dev->path);
 
        if (!strcmp(dvb_dev->bus_addr, "platform:dvbloopback")) {
                logfunc(LOG_WARNING, _("Detected dvbloopback"));
@@ -159,10 +161,14 @@ struct dvb_v5_fe_parms *dvb_fe_open_flags(int adapter, 
int frontend,
        }
 
        dvb_dev_free(dvb);
-
+       if (!fname) {
+               logfunc(LOG_ERR, _("fname calloc: %s"), strerror(errno));
+               return NULL;
+       }
        parms = calloc(sizeof(*parms), 1);
        if (!parms) {
                logfunc(LOG_ERR, _("parms calloc: %s"), strerror(errno));
+               free(fname);
                return NULL;
        }
        parms->p.verbose = verbose;
@@ -177,7 +183,7 @@ struct dvb_v5_fe_parms *dvb_fe_open_flags(int adapter, int 
frontend,
        if (use_legacy_call)
                parms->p.legacy_fe = 1;
 
-       ret = dvb_fe_open_fname(parms, dvb_dev->path, flags);
+       ret = dvb_fe_open_fname(parms, fname, flags);
        if (ret < 0) {
                dvb_v5_free(parms);
                return NULL;
@@ -197,6 +203,7 @@ int dvb_fe_open_fname(struct dvb_v5_fe_parms_priv *parms, 
char *fname,
        fd = open(fname, flags, 0);
        if (fd == -1) {
                dvb_logerr(_("%s while opening %s"), strerror(errno), fname);
+               free(fname);
                return -errno;
        }
 
@@ -217,12 +224,7 @@ int dvb_fe_open_fname(struct dvb_v5_fe_parms_priv *parms, 
char *fname,
                }
        }
 
-       parms->fname = strdup(fname);
-       if (!parms->fname) {
-               dvb_logerr(_("fname calloc: %s"), strerror(errno));
-               return -errno;
-       }
-
+       parms->fname = fname;
        parms->fd = fd;
        parms->fe_flags = flags;
        parms->dvb_prop[0].cmd = DTV_API_VERSION;

_______________________________________________
linuxtv-commits mailing list
[email protected]
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to