slow_op_pools can be empty (all poolids 0/out-of-range) while
slow_op_types is not, making max_element return end(); dereferencing
it is UB.
Fixes: https://tracker.ceph.com/issues/78184
Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
[](std::pair<uint64_t, int> p1, std::pair<uint64_t, int> p2) {
return p1.second < p2.second;
});
- if (osdmap->get_pools().find(slow_pool_it->first) != osdmap->get_pools().end()) {
+ if (slow_pool_it != slow_op_pools.end() &&
+ osdmap->get_pools().find(slow_pool_it->first) != osdmap->get_pools().end()) {
string pool_name = osdmap->get_pool_name(slow_pool_it->first);
ss << "] most affected pool [ '"
<< pool_name