]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: guard max_element end() deref in get_health_metrics 70152/head
authorSun Yuechi <sunyuechi@iscas.ac.cn>
Thu, 25 Jun 2026 14:15:31 +0000 (22:15 +0800)
committerKefu Chai <k.chai@proxmox.com>
Mon, 13 Jul 2026 12:10:42 +0000 (20:10 +0800)
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>
src/osd/OSD.cc

index e6e7489a6753db68b156337f458f807be10ea4f7..536aa150de7341a6cb12e7ceb07091f2949d9f38 100644 (file)
@@ -8046,7 +8046,8 @@ vector<DaemonHealthMetric> OSD::get_health_metrics()
                                  [](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