]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: Avoid use of moved 'fs' in FSMap::commit_filesystem and FSMap::decode 65877/head
authorEdwin Rodriguez <edwin.rodriguez1@ibm.com>
Wed, 8 Oct 2025 15:55:25 +0000 (11:55 -0400)
committerEdwin Rodriguez <edwin.rodriguez1@ibm.com>
Mon, 13 Oct 2025 12:39:45 +0000 (08:39 -0400)
Fixes: https://tracker.ceph.com/issues/73421
Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
src/mds/FSMap.cc

index 1e063cbd8b8330df85ce2919ca1051325ea1f346..b3b528877884a2602710e40758238c0c99c5ad19 100644 (file)
@@ -517,7 +517,11 @@ const Filesystem& FSMap::commit_filesystem(fs_cluster_id_t fscid, Filesystem fs)
     legacy_client_fscid = fs.fscid;
   }
 
-  auto [it, inserted] = filesystems.emplace(std::piecewise_construct, std::forward_as_tuple(fs.fscid), std::forward_as_tuple(std::move(fs)));
+  auto fs_fscid = fs.fscid; // Avoid use of fs after its moved
+  // the use and move are unsequenced, i.e. there is no guarantee about the order in which they are evaluated
+  auto [it, inserted] = filesystems.emplace(
+      std::piecewise_construct, std::forward_as_tuple(fs_fscid),
+      std::forward_as_tuple(std::move(fs)));
   ceph_assert(inserted);
   return it->second;
 }
@@ -681,7 +685,11 @@ void FSMap::decode(bufferlist::const_iterator& p)
     for (__u32 i = 0; i < len; i++) {
       auto fs = Filesystem();
       decode(fs, p); /* need fscid to insert into map */
-      [[maybe_unused]] auto [it, inserted] = filesystems.emplace(std::piecewise_construct, std::forward_as_tuple(fs.fscid), std::forward_as_tuple(std::move(fs)));
+      auto fs_fscid = fs.fscid; // Avoid use of fs after its moved
+      // the use and move are unsequenced, i.e. there is no guarantee about the order in which they are evaluated
+      [[maybe_unused]] auto [it, inserted] = filesystems.emplace(
+          std::piecewise_construct, std::forward_as_tuple(fs_fscid),
+          std::forward_as_tuple(std::move(fs)));
       ceph_assert(inserted);
     }
   }