From: Sage Weil Date: Thu, 13 Jul 2017 21:33:53 +0000 (-0400) Subject: crush/CrushWrapper: fix decoding of choose_args weight-set X-Git-Tag: v12.1.2~150^2~39 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=5430c0d944893239c27329459ab503a275f3dabd;p=ceph-ci.git crush/CrushWrapper: fix decoding of choose_args weight-set Assert that ids_size matches the bucket while we are at it. Signed-off-by: Sage Weil --- diff --git a/src/crush/CrushWrapper.cc b/src/crush/CrushWrapper.cc index e6f221944e6..1c49f19bc5b 100644 --- a/src/crush/CrushWrapper.cc +++ b/src/crush/CrushWrapper.cc @@ -1990,9 +1990,12 @@ void CrushWrapper::decode(bufferlist::iterator& blp) ::decode(weight_set->weights[l], blp); } ::decode(arg->ids_size, blp); - arg->ids = (__s32 *)calloc(arg->ids_size, sizeof(__s32)); - for (__u32 k = 0; k < arg->ids_size; k++) - ::decode(arg->ids[k], blp); + if (arg->ids_size) { + assert(arg->ids_size == crush->buckets[bucket_index]->size); + arg->ids = (__s32 *)calloc(arg->ids_size, sizeof(__s32)); + for (__u32 k = 0; k < arg->ids_size; k++) + ::decode(arg->ids[k], blp); + } } choose_args[choose_args_index] = arg_map; }