mirror of
https://github.com/ceph/ceph
synced 2025-03-25 03:37:38 +00:00
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 <danny.al-gaaf@bisect.de>
This commit is contained in:
parent
9cb79067dc
commit
b520cfae5e
@ -1023,8 +1023,13 @@ int CrushCompiler::parse_choose_args(iter_t const& i)
|
|||||||
err << choose_arg_index << " duplicated" << std::endl;
|
err << choose_arg_index << " duplicated" << std::endl;
|
||||||
return -1;
|
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;
|
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));
|
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++) {
|
for (iter_t p = i->children.begin() + 2; p != i->children.end(); p++) {
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user