From: Sage Weil Date: Sun, 1 Sep 2013 15:42:23 +0000 (-0700) Subject: osdc/Objecter: fix dereference of NULL pg_pool_t X-Git-Tag: v0.69~23 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1c5e58a85ef7f26b2c617ecb6c08de5632bb0fe3;p=ceph.git osdc/Objecter: fix dereference of NULL pg_pool_t Make sure we don't dereference a NULL pointer. Note that we check a bit further down if the target pool does not exist and return the proper error. Bug was reliably reproduced by ./ceph_test_rados_api_watch_notify --gtest_filter=LibRadosWatchNotify.WatchNotifyTimeoutTestPP Signed-off-by: Sage Weil --- diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 75292d13ac3a..188c28d5e56b 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -1329,10 +1329,13 @@ int Objecter::recalc_op_target(Op *op) bool is_write = op->flags & CEPH_OSD_FLAG_WRITE; op->target_oloc = op->base_oloc; - if (is_read && osdmap->get_pg_pool(op->base_oloc.pool)->has_read_tier()) - op->target_oloc.pool = osdmap->get_pg_pool(op->base_oloc.pool)->read_tier; - if (is_write && osdmap->get_pg_pool(op->base_oloc.pool)->has_write_tier()) - op->target_oloc.pool = osdmap->get_pg_pool(op->base_oloc.pool)->write_tier; + const pg_pool_t *pi = osdmap->get_pg_pool(op->base_oloc.pool); + if (pi) { + if (is_read && pi->has_read_tier()) + op->target_oloc.pool = pi->read_tier; + if (is_write && pi->has_write_tier()) + op->target_oloc.pool = pi->write_tier; + } if (op->precalc_pgid) { assert(op->oid.name.empty()); // make sure this is a listing op