From 34f16e8bfd2226ee71e6b90fe2c872cb321dfbd7 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Wed, 1 May 2019 09:12:35 +0100 Subject: [PATCH] The actual fix for libdvbv5 (rhbz 1695023) --- ...-leaks-double-free-dvb_fe_open_fname.patch | 104 ++++++++++++++++++ v4l-utils.spec | 6 +- 2 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 libdvbv5-revert-leaks-double-free-dvb_fe_open_fname.patch diff --git a/libdvbv5-revert-leaks-double-free-dvb_fe_open_fname.patch b/libdvbv5-revert-leaks-double-free-dvb_fe_open_fname.patch new file mode 100644 index 0000000..865776a --- /dev/null +++ b/libdvbv5-revert-leaks-double-free-dvb_fe_open_fname.patch @@ -0,0 +1,104 @@ +From 41f19db34e17ed13f5cc06d9147ba83803224ce6 Mon Sep 17 00:00:00 2001 +From: Mauro Carvalho Chehab +Date: Fri, 26 Apr 2019 12:05:57 -0300 +Subject: Revert "libdvbv5: leaks and double free in dvb_fe_open_fname()" + +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 + +diff --git a/lib/libdvbv5/dvb-dev-local.c b/lib/libdvbv5/dvb-dev-local.c +index 2de9a61..e98b967 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 7f63476..5dcf492 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; +-- +cgit v0.10.2 diff --git a/v4l-utils.spec b/v4l-utils.spec index 1218c18..fff40a2 100644 --- a/v4l-utils.spec +++ b/v4l-utils.spec @@ -1,6 +1,6 @@ Name: v4l-utils Version: 1.16.5 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Utilities for video4linux and DVB devices # libdvbv5, dvbv5 utils, ir-keytable and v4l2-sysfs-path are GPLv2 only License: GPLv2+ and GPLv2 @@ -8,6 +8,7 @@ URL: http://www.linuxtv.org/downloads/v4l-utils/ Source0: http://linuxtv.org/downloads/v4l-utils/v4l-utils-%{version}.tar.bz2 Patch1: libdvbv5-fix-double-free-in-dvb_fe_open_fname.patch +Patch2: libdvbv5-revert-leaks-double-free-dvb_fe_open_fname.patch BuildRequires: alsa-lib-devel BuildRequires: desktop-file-utils @@ -200,6 +201,9 @@ desktop-file-validate $RPM_BUILD_ROOT%{_datadir}/applications/qv4l2.desktop %changelog +* Wed May 1 2019 Peter Robinson 1.16.5-3 +- The actual fix for libdvbv5 (rhbz 1695023) + * Tue Apr 16 2019 Peter Robinson 1.16.5-2 - Upstream fix for libdvbv5 (rhbz 1695023)