From: Sage Weil Date: Tue, 7 Aug 2018 22:02:56 +0000 (-0500) Subject: kv/KeyValueDB: return const char* from MergeOperator::name() X-Git-Tag: v12.2.9~131^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8c9e2457291407b93ff17d8eb41532aea660c994;p=ceph.git kv/KeyValueDB: return const char* from MergeOperator::name() This avoids a c_str() on a temporary string later down the line, which avoids a use-after-free. Fixes: http://tracker.ceph.com/issues/26875 Signed-off-by: Sage Weil (cherry picked from commit e9be5dabf256c18a5575d1394e481e4f21ece97d) Conflicts: src/kv/RocksDBStore.cc : Resolved for Name() --- diff --git a/src/kv/KeyValueDB.h b/src/kv/KeyValueDB.h index 818884a1a97..905eec2db71 100644 --- a/src/kv/KeyValueDB.h +++ b/src/kv/KeyValueDB.h @@ -337,7 +337,7 @@ public: const char *rdata, size_t rlen, std::string *new_value) = 0; /// We use each operator name and each prefix to construct the overall RocksDB operator name for consistency check at open time. - virtual string name() const = 0; + virtual const char *name() const = 0; virtual ~MergeOperator() {} }; diff --git a/src/os/bluestore/BitmapFreelistManager.cc b/src/os/bluestore/BitmapFreelistManager.cc index 575d3a4beca..ce0f9158ab8 100644 --- a/src/os/bluestore/BitmapFreelistManager.cc +++ b/src/os/bluestore/BitmapFreelistManager.cc @@ -35,7 +35,7 @@ struct XorMergeOperator : public KeyValueDB::MergeOperator { } // We use each operator name and each prefix to construct the // overall RocksDB operator name for consistency check at open time. - string name() const override { + const char *name() const override { return "bitwise_xor"; } }; diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index ec8942477dc..0298a42f9ef 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -555,7 +555,7 @@ struct Int64ArrayMergeOperator : public KeyValueDB::MergeOperator { } // We use each operator name and each prefix to construct the // overall RocksDB operator name for consistency check at open time. - string name() const override { + const char *name() const override { return "int64_array"; } }; diff --git a/src/test/objectstore/test_kv.cc b/src/test/objectstore/test_kv.cc index 46a8a8be32d..8fb53eeee69 100644 --- a/src/test/objectstore/test_kv.cc +++ b/src/test/objectstore/test_kv.cc @@ -204,7 +204,7 @@ struct AppendMOP : public KeyValueDB::MergeOperator { } // We use each operator name and each prefix to construct the // overall RocksDB operator name for consistency check at open time. - string name() const override { + const char *name() const override { return "Append"; } };