This commit is contained in:
Peter Robinson 2020-08-04 14:24:40 +01:00
parent 89567ec2e7
commit fdce55b4f3
5 changed files with 5 additions and 219 deletions

View File

@ -1,63 +0,0 @@
From 78057aaa784a922b4ac6af9f323b828f7a834581 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Roth?= <neolynx@gmail.com>
Date: Sat, 7 Jul 2018 07:20:55 -0400
Subject: libdvbv5: fix double free in dvb_fe_open_fname
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Since parms and fname is allocated outside of the function, do not free it.
Use dvb_v5_free for freeing parms, it will free fname if required.
Signed-off-by: André Roth <neolynx@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
diff --git a/lib/libdvbv5/dvb-fe.c b/lib/libdvbv5/dvb-fe.c
index 514a187..7f63476 100644
--- a/lib/libdvbv5/dvb-fe.c
+++ b/lib/libdvbv5/dvb-fe.c
@@ -179,7 +179,7 @@ struct dvb_v5_fe_parms *dvb_fe_open_flags(int adapter, int frontend,
ret = dvb_fe_open_fname(parms, dvb_dev->path, flags);
if (ret < 0) {
- free(parms);
+ dvb_v5_free(parms);
return NULL;
}
@@ -202,9 +202,7 @@ int dvb_fe_open_fname(struct dvb_v5_fe_parms_priv *parms, char *fname,
if (xioctl(fd, FE_GET_INFO, &parms->p.info) == -1) {
dvb_perror("FE_GET_INFO");
- dvb_v5_free(parms);
close(fd);
- free(fname);
return -errno;
}
@@ -291,7 +289,6 @@ int dvb_fe_open_fname(struct dvb_v5_fe_parms_priv *parms, char *fname,
}
if (!parms->p.num_systems) {
dvb_logerr(_("delivery system not detected"));
- dvb_v5_free(parms);
close(fd);
return -EINVAL;
}
@@ -302,7 +299,6 @@ int dvb_fe_open_fname(struct dvb_v5_fe_parms_priv *parms, char *fname,
dtv_prop.props = parms->dvb_prop;
if (xioctl(fd, FE_GET_PROPERTY, &dtv_prop) == -1) {
dvb_perror("FE_GET_PROPERTY");
- dvb_v5_free(parms);
close(fd);
return -errno;
}
@@ -312,7 +308,6 @@ int dvb_fe_open_fname(struct dvb_v5_fe_parms_priv *parms, char *fname,
if (parms->p.num_systems == 0) {
dvb_logerr(_("driver returned 0 supported delivery systems!"));
- dvb_v5_free(parms);
close(fd);
return -EINVAL;
}
--
cgit v0.10.2

View File

@ -1,104 +0,0 @@
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 +1 @@
SHA512 (v4l-utils-1.18.0.tar.bz2) = 749c804671f039d907bf782cba5d1c23fff48066f3b6d4a0249fb9b65c493ee3945b544ee2a306dda79973da04f0301278ee88775f798aba590e5d0f15226d49
SHA512 (v4l-utils-1.20.0.tar.bz2) = 179ca8dbbf7af5fa4870b70f17645d7834fe6ba52670ae6b58473efa257db0cd812ce14f16574cc4491c0bcb218835e4c29f1354882a151687eecec97852fc63

View File

@ -1,46 +0,0 @@
diff -up v4l-utils-1.18.0/lib/include/libdvbv5/desc_t2_delivery.h.me v4l-utils-1.18.0/lib/include/libdvbv5/desc_t2_delivery.h
--- v4l-utils-1.18.0/lib/include/libdvbv5/desc_t2_delivery.h.me 2020-02-25 16:30:27.384727764 +0100
+++ v4l-utils-1.18.0/lib/include/libdvbv5/desc_t2_delivery.h 2020-02-25 16:30:38.872831694 +0100
@@ -215,7 +215,7 @@ extern const unsigned dvbt2_transmission
* @brief converts from internal representation to string the SISO_MISO
* field of dvb_desc_t2_delivery:SISO_MISO field.
*/
-const char *siso_miso[4];
+extern const char *siso_miso[4];
#ifdef __cplusplus
}
diff -up v4l-utils-1.18.0/lib/libdvbv5/dvb-v5.h.me v4l-utils-1.18.0/lib/libdvbv5/dvb-v5.h
--- v4l-utils-1.18.0/lib/libdvbv5/dvb-v5.h.me 2020-02-25 16:28:38.513742866 +0100
+++ v4l-utils-1.18.0/lib/libdvbv5/dvb-v5.h 2020-02-25 16:29:31.495222165 +0100
@@ -14,17 +14,17 @@ struct fe_status_name {
char *name;
};
extern struct fe_status_name fe_status_name[8];
-const char *fe_code_rate_name[14];
-const char *fe_modulation_name[15];
-const char *fe_transmission_mode_name[10];
-const unsigned fe_bandwidth_name[8];
-const char *fe_guard_interval_name[12];
-const char *fe_hierarchy_name[6];
-const char *fe_voltage_name[4];
-const char *fe_tone_name[3];
-const char *fe_inversion_name[4];
-const char *fe_pilot_name[4];
-const char *fe_rolloff_name[5];
-const char *dvb_v5_name[72];
-const char *delivery_system_name[20];
+extern const char *fe_code_rate_name[14];
+extern const char *fe_modulation_name[15];
+extern const char *fe_transmission_mode_name[10];
+extern const unsigned fe_bandwidth_name[8];
+extern const char *fe_guard_interval_name[12];
+extern const char *fe_hierarchy_name[6];
+extern const char *fe_voltage_name[4];
+extern const char *fe_tone_name[3];
+extern const char *fe_inversion_name[4];
+extern const char *fe_pilot_name[4];
+extern const char *fe_rolloff_name[5];
+extern const char *dvb_v5_name[72];
+extern const char *delivery_system_name[20];
#endif

View File

@ -2,15 +2,14 @@
%global __brp_strip_lto %{nil}
Name: v4l-utils
Version: 1.18.0
Release: 5%{?dist}
Version: 1.20.0
Release: 0%{?dist}
Summary: Utilities for video4linux and DVB devices
# libdvbv5, dvbv5 utils, ir-keytable and v4l2-sysfs-path are GPLv2 only
License: GPLv2+ and GPLv2
URL: http://www.linuxtv.org/downloads/v4l-utils/
Source0: http://linuxtv.org/downloads/v4l-utils/v4l-utils-%{version}.tar.bz2
Patch0: v4l-utils-1.18.0-gcc10.patch
BuildRequires: alsa-lib-devel
BuildRequires: desktop-file-utils
@ -119,14 +118,14 @@ files for developing applications that use libdvbv5.
# Don't use rpath!
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
make %{?_smp_mflags}
%make_build
make doxygen-run
%install
%{!?_udevrulesdir: %global _udevrulesdir /lib/udev/rules.d}
%make_install
find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
find $RPM_BUILD_ROOT -name '*.la' -delete
rm -f $RPM_BUILD_ROOT%{_libdir}/{v4l1compat.so,v4l2convert.so}
mkdir -p $RPM_BUILD_ROOT%{_mandir}/man3/
cp -arv %{_builddir}/%{name}-%{version}/doxygen-doc/man/man3 $RPM_BUILD_ROOT%{_mandir}/