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 <danny.al-gaaf@bisect.de>
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;