From: Andre Noll Date: Mon, 16 Aug 2010 07:29:59 +0000 (+0200) Subject: vss: Avoid potential double free of FEC parameters. X-Git-Tag: v0.4.5~14 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=26d1bf2b7be9af211755c6fb90ff8de55e5a9bd3 vss: Avoid potential double free of FEC parameters. If an error occurs in initialize_fec_client() we free the FEC parameter structure but do not invalidate it. It's both easier and safer to free this struct just before allocating it. --- diff --git a/vss.c b/vss.c index 3405d5a0..96b2ba9e 100644 --- a/vss.c +++ b/vss.c @@ -282,11 +282,11 @@ static int initialize_fec_client(struct fec_client *fc, struct vss_task *vsst) rs = fc->fcp->slices_per_group - fc->fcp->data_slices_per_group; ret = num_slices(vsst->header_len, fc->mps - FEC_HEADER_SIZE, rs); if (ret < 0) - goto err; + return ret; hs = ret; ret = num_slices(mmd->afd.max_chunk_size, fc->mps - FEC_HEADER_SIZE, rs); if (ret < 0) - goto err; + return ret; ds = ret; k = hs + ds; if (k < fc->fcp->data_slices_per_group) @@ -308,9 +308,6 @@ static int initialize_fec_client(struct fec_client *fc, struct vss_task *vsst) fc->stream_start = *now; fc->first_stream_chunk = mmd->current_chunk; return 1; -err: - fec_free(fc->parms); - return ret; } static void compute_group_size(struct vss_task *vsst, struct fec_group *g,