The actual fix for libdvbv5 (rhbz 1695023)

This commit is contained in:
Peter Robinson 2019-05-01 09:12:35 +01:00
parent 0a35920ada
commit 34f16e8bfd
2 changed files with 109 additions and 1 deletions

View File

@ -0,0 +1,104 @@
From 41f19db34e17ed13f5cc06d9147ba83803224ce6 Mon Sep 17 00:00:00 2001
From: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
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 <mchehab+samsung@kernel.org>
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

View File

@ -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 <pbrobinson@fedoraproject.org> 1.16.5-3
- The actual fix for libdvbv5 (rhbz 1695023)
* Tue Apr 16 2019 Peter Robinson <pbrobinson@fedoraproject.org> 1.16.5-2
- Upstream fix for libdvbv5 (rhbz 1695023)