From: Adam Emerson Date: Mon, 3 Jun 2024 18:24:28 +0000 (-0400) Subject: neorados: Fix use-after-move in Builder::build_ X-Git-Tag: v20.0.0~1141^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=41eba3e370c43b52d3219e1c80cc0a56cd5e5b4c;p=ceph.git neorados: Fix use-after-move in Builder::build_ Missing returns in error handling would cause execution to continue and attempt to reuse a moved-from completion Thanks to Suyash Dongre for finding it. Fixes: https://tracker.ceph.com/issues/66335 Signed-off-by: Adam Emerson --- diff --git a/src/neorados/RADOS.cc b/src/neorados/RADOS.cc index 3d97ead1ff7..96165a05d14 100644 --- a/src/neorados/RADOS.cc +++ b/src/neorados/RADOS.cc @@ -829,10 +829,12 @@ void RADOS::Builder::build_(asio::io_context& ioctx, std::ostringstream ss; auto r = cct->_conf.parse_config_files(conf_files ? conf_files->data() : nullptr, &ss, flags); - if (r < 0) + if (r < 0) { asio::post(ioctx.get_executor(), asio::append(std::move(c), ceph::to_error_code(r), RADOS{nullptr})); + return; + } } cct->_conf.parse_env(cct->get_module_type()); @@ -840,20 +842,24 @@ void RADOS::Builder::build_(asio::io_context& ioctx, for (const auto& [n, v] : configs) { std::stringstream ss; auto r = cct->_conf.set_val(n, v, &ss); - if (r < 0) + if (r < 0) { asio::post(ioctx.get_executor(), asio::append(std::move(c), ceph::to_error_code(-EINVAL), RADOS{nullptr})); + return; + } } if (!no_mon_conf) { MonClient mc_bootstrap(cct, ioctx); // TODO This function should return an error code. auto err = mc_bootstrap.get_monmap_and_config(); - if (err < 0) + if (err < 0) { asio::post(ioctx.get_executor(), asio::append(std::move(c), ceph::to_error_code(err), RADOS{nullptr})); + return; + } } if (!cct->_log->is_started()) { cct->_log->start();