The actual fix for libdvbv5 (rhbz 1695023)
This commit is contained in:
parent
0a35920ada
commit
34f16e8bfd
104
libdvbv5-revert-leaks-double-free-dvb_fe_open_fname.patch
Normal file
104
libdvbv5-revert-leaks-double-free-dvb_fe_open_fname.patch
Normal 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
|
||||
@ -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)
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user