From 31b73305b29efa39825b014ae1ba07a2664d6e0b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 21 Jul 2017 13:50:31 -0400 Subject: [PATCH] crush/CrushWrapper: only allocate weight_set if non-empty Signed-off-by: Sage Weil --- src/crush/CrushWrapper.cc | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/crush/CrushWrapper.cc b/src/crush/CrushWrapper.cc index ad57dae1a5e..c01856607af 100644 --- a/src/crush/CrushWrapper.cc +++ b/src/crush/CrushWrapper.cc @@ -2136,15 +2136,17 @@ void CrushWrapper::decode(bufferlist::iterator& blp) assert(bucket_index < arg_map.size); crush_choose_arg *arg = &arg_map.args[bucket_index]; ::decode(arg->weight_set_size, blp); - arg->weight_set = (crush_weight_set*)calloc( - arg->weight_set_size, sizeof(crush_weight_set)); - for (__u32 k = 0; k < arg->weight_set_size; k++) { - crush_weight_set *weight_set = &arg->weight_set[k]; - ::decode(weight_set->size, blp); - weight_set->weights = (__u32*)calloc( - weight_set->size, sizeof(__u32)); - for (__u32 l = 0; l < weight_set->size; l++) - ::decode(weight_set->weights[l], blp); + if (arg->weight_set_size) { + arg->weight_set = (crush_weight_set*)calloc( + arg->weight_set_size, sizeof(crush_weight_set)); + for (__u32 k = 0; k < arg->weight_set_size; k++) { + crush_weight_set *weight_set = &arg->weight_set[k]; + ::decode(weight_set->size, blp); + weight_set->weights = (__u32*)calloc( + weight_set->size, sizeof(__u32)); + for (__u32 l = 0; l < weight_set->size; l++) + ::decode(weight_set->weights[l], blp); + } } ::decode(arg->ids_size, blp); if (arg->ids_size) { -- 2.39.5