From: Sage Weil Date: Mon, 30 Apr 2012 20:36:37 +0000 (-0700) Subject: osdmap: do no dereference NULL entity_addr_t pointer in addr accessors X-Git-Tag: v0.47~77 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=74138288d7f5e1b182bf23746d678aa601d2ec9d;p=ceph.git osdmap: do no dereference NULL entity_addr_t pointer in addr accessors These may be NULL if we expand the addr vectors but haven't ever stored an address yet. Check for NULL and return a reference to a blank entity_addr_t as needed. Signed-off-by: Sage Weil --- diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index c7d1aba6729b..f76f22d6db32 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -160,6 +160,7 @@ private: vector > client_addr; vector > cluster_addr; vector > hb_addr; + entity_addr_t blank; }; std::tr1::shared_ptr osd_addrs; @@ -300,17 +301,17 @@ private: } const entity_addr_t &get_addr(int osd) const { assert(exists(osd)); - return *osd_addrs->client_addr[osd]; + return osd_addrs->client_addr[osd] ? *osd_addrs->client_addr[osd] : osd_addrs->blank; } const entity_addr_t &get_cluster_addr(int osd) const { assert(exists(osd)); - if (*osd_addrs->cluster_addr[osd] == entity_addr_t()) + if (!osd_addrs->cluster_addr[osd] || *osd_addrs->cluster_addr[osd] == entity_addr_t()) return get_addr(osd); return *osd_addrs->cluster_addr[osd]; } const entity_addr_t &get_hb_addr(int osd) const { assert(exists(osd)); - return *osd_addrs->hb_addr[osd]; + return osd_addrs->hb_addr[osd] ? *osd_addrs->hb_addr[osd] : osd_addrs->blank; } entity_inst_t get_inst(int osd) const { assert(is_up(osd));