diff options
author | Tim Burke <tim.burke@gmail.com> | 2017-01-25 23:40:32 +0000 |
---|---|---|
committer | Tim Burke <tim.burke@gmail.com> | 2017-03-16 17:49:49 +0000 |
commit | 842b4a9bd71f0ee6390bf3ace71666a9acc017fd (patch) | |
tree | 32af62e274402736f7c6ba4182ebc86407fd2c7a /src | |
parent | 4ab1336cabe0c1f5d7fc18c21b78f5d21aca5b60 (diff) | |
download | liberasurecode-842b4a9bd71f0ee6390bf3ace71666a9acc017fd.tar.gz |
Jerasure: Handle initialization errors correctly
Otherwise we can get backtraces where we try to free something that was
never initialized.
Change-Id: Iaea427b977fd20819e2da5678cc4889d3a42dd65
Diffstat (limited to 'src')
-rw-r--r-- | src/backends/jerasure/jerasure_rs_cauchy.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/backends/jerasure/jerasure_rs_cauchy.c b/src/backends/jerasure/jerasure_rs_cauchy.c index 6400ca2..d5787ef 100644 --- a/src/backends/jerasure/jerasure_rs_cauchy.c +++ b/src/backends/jerasure/jerasure_rs_cauchy.c @@ -357,17 +357,21 @@ static void * jerasure_rs_cauchy_init(struct ec_backend_args *args, } desc->bitmatrix = desc->jerasure_matrix_to_bitmatrix(k, m, w, desc->matrix); if (NULL == desc->bitmatrix) { - goto error; + goto bitmatrix_error; } desc->schedule = desc->jerasure_smart_bitmatrix_to_schedule(k, m, w, desc->bitmatrix); if (NULL == desc->schedule) { - goto error; + goto schedule_error; } return desc; +schedule_error: + free(desc->bitmatrix); +bitmatrix_error: + free(desc->matrix); error: - free_rs_cauchy_desc(desc); + free(desc); return NULL; } |