From: Danny Al-Gaaf Date: Thu, 11 May 2017 13:29:56 +0000 (+0200) Subject: crush/CrushCompiler.cc: fix error handling X-Git-Tag: v13.0.1~1052^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b520cfae5e9b9e2e1ab8d51279d60e6437ff629d;p=ceph.git crush/CrushCompiler.cc: fix error handling calloc() does not take negative values, check return value from get_max_buckets() and handle it correctly. Fix for: CID 1405301 (#1 of 1): Argument cannot be negative (NEGATIVE_RETURNS) negative_returns: arg_map.size is passed to a parameter that cannot be negative. Signed-off-by: Danny Al-Gaaf --- diff --git a/src/crush/CrushCompiler.cc b/src/crush/CrushCompiler.cc index 946a6b037b9fe..8825f7543c0f7 100644 --- a/src/crush/CrushCompiler.cc +++ b/src/crush/CrushCompiler.cc @@ -1023,8 +1023,13 @@ int CrushCompiler::parse_choose_args(iter_t const& i) err << choose_arg_index << " duplicated" << std::endl; return -1; } + const auto max_buckets = crush.get_max_buckets(); + if (max_buckets < 0) { + err << "get_max_buckets() returned error" << std::endl; + return -1; + } crush_choose_arg_map arg_map; - arg_map.size = crush.get_max_buckets(); + arg_map.size = max_buckets; arg_map.args = (crush_choose_arg *)calloc(arg_map.size, sizeof(crush_choose_arg)); for (iter_t p = i->children.begin() + 2; p != i->children.end(); p++) { int r = 0;