From: Sun Yuechi Date: Thu, 25 Jun 2026 14:15:31 +0000 (+0800) Subject: osd: guard max_element end() deref in get_health_metrics X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=068b27cac8c92fc776b44a8d1ed7b97bc2e91283;p=ceph.git osd: guard max_element end() deref in get_health_metrics 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 --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index e6e7489a675..536aa150de7 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -8046,7 +8046,8 @@ vector OSD::get_health_metrics() [](std::pair p1, std::pair 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