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: v13.2.2~54^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F23865%2Fhead;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) --- diff --git a/src/kv/KeyValueDB.h b/src/kv/KeyValueDB.h index 50714d24713..b0b129dd87b 100644 --- a/src/kv/KeyValueDB.h +++ b/src/kv/KeyValueDB.h @@ -387,7 +387,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/kv/RocksDBStore.cc b/src/kv/RocksDBStore.cc index 7f72e23ed03..3be625d1c05 100644 --- a/src/kv/RocksDBStore.cc +++ b/src/kv/RocksDBStore.cc @@ -127,7 +127,7 @@ public: MergeOperatorLinker(const std::shared_ptr &o) : mop(o) {} const char *Name() const override { - return mop->name().c_str(); + return mop->name(); } bool Merge(const rocksdb::Slice& key, diff --git a/src/os/bluestore/BitmapFreelistManager.cc b/src/os/bluestore/BitmapFreelistManager.cc index 0017df01a8c..779c05608b6 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 1b06d4bbdc3..39d6316e1e3 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -558,7 +558,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 cf5948f8c13..1869e79b3c5 100644 --- a/src/test/objectstore/test_kv.cc +++ b/src/test/objectstore/test_kv.cc @@ -208,7 +208,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"; } };