mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 02:21:52 +09:00
dm era: Fix bitset memory leaks
commit904e6b2666upstream. Deallocate the memory allocated for the in-core bitsets when destroying the target and in error paths. Fixes:eec40579d8("dm: add era target") Cc: stable@vger.kernel.org # v3.15+ Signed-off-by: Nikos Tsironis <ntsironis@arrikto.com> Reviewed-by: Ming-Hung Tsai <mtsai@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
ede8948836
commit
fbb85ef8cd
@@ -47,6 +47,7 @@ struct writeset {
|
||||
static void writeset_free(struct writeset *ws)
|
||||
{
|
||||
vfree(ws->bits);
|
||||
ws->bits = NULL;
|
||||
}
|
||||
|
||||
static int setup_on_disk_bitset(struct dm_disk_bitset *info,
|
||||
@@ -811,6 +812,8 @@ static struct era_metadata *metadata_open(struct block_device *bdev,
|
||||
|
||||
static void metadata_close(struct era_metadata *md)
|
||||
{
|
||||
writeset_free(&md->writesets[0]);
|
||||
writeset_free(&md->writesets[1]);
|
||||
destroy_persistent_data_objects(md);
|
||||
kfree(md);
|
||||
}
|
||||
@@ -848,6 +851,7 @@ static int metadata_resize(struct era_metadata *md, void *arg)
|
||||
r = writeset_alloc(&md->writesets[1], *new_size);
|
||||
if (r) {
|
||||
DMERR("%s: writeset_alloc failed for writeset 1", __func__);
|
||||
writeset_free(&md->writesets[0]);
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -858,6 +862,8 @@ static int metadata_resize(struct era_metadata *md, void *arg)
|
||||
&value, &md->era_array_root);
|
||||
if (r) {
|
||||
DMERR("%s: dm_array_resize failed", __func__);
|
||||
writeset_free(&md->writesets[0]);
|
||||
writeset_free(&md->writesets[1]);
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user