]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: fix uninit read in Incomplete::react(AdvMap&) 21798/head
authorSage Weil <sage@redhat.com>
Thu, 3 May 2018 13:45:09 +0000 (08:45 -0500)
committerSage Weil <sage@redhat.com>
Thu, 3 May 2018 13:45:09 +0000 (08:45 -0500)
If a PG is incomplete when the pool is deleted we'll dereference invalid
iterators here.

Fixes: http://tracker.ceph.com/issues/23980
Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/PG.cc

index c490c47709d23beee9360da9e7a8c7c29b024ab7..37e2bdbe7506343c2ffda6b166f84287b49a53d9 100644 (file)
@@ -8959,7 +8959,8 @@ boost::statechart::result PG::RecoveryState::Incomplete::react(const AdvMap &adv
   int64_t poolnum = pg->info.pgid.pool();
 
   // Reset if min_size turn smaller than previous value, pg might now be able to go active
-  if (advmap.lastmap->get_pools().find(poolnum)->second.min_size >
+  if (!advmap.osdmap->have_pg_pool(poolnum) ||
+      advmap.lastmap->get_pools().find(poolnum)->second.min_size >
       advmap.osdmap->get_pools().find(poolnum)->second.min_size) {
     post_event(advmap);
     return transit< Reset >();