From 78057aaa784a922b4ac6af9f323b828f7a834581 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roth?= 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 Signed-off-by: Mauro Carvalho Chehab 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