]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: Fix invalid access of mdr->dn[0].back() 60889/head
authorAnoop C S <anoopcs@cryptolab.net>
Fri, 29 Nov 2024 18:52:30 +0000 (00:22 +0530)
committerAnoop C S <anoopcs@cryptolab.net>
Fri, 29 Nov 2024 19:00:28 +0000 (00:30 +0530)
See https://github.com/ceph/ceph/pull/31534 for a similar fix.

Fixes: https://tracker.ceph.com/issues/69059
Signed-off-by: Anoop C S <anoopcs@cryptolab.net>
src/mds/Server.cc

index 5874a3dce568504515fcd13b8f531d53dbda4af1..e66b5aa08c73b973f575d8d335a717966d6c2129 100644 (file)
@@ -4167,7 +4167,7 @@ void Server::handle_client_getattr(const MDRequestRef& mdr, bool is_lookup)
 
     if (r < 0) {
       // fall-thru. let rdlock_path_pin_ref() check again.
-    } else if (is_lookup) {
+    } else if (is_lookup && mdr->dn[0].size()) {
       CDentry* dn = mdr->dn[0].back();
       mdr->pin(dn);
       auto em = dn->batch_ops.emplace(std::piecewise_construct, std::forward_as_tuple(mask), std::forward_as_tuple());
@@ -4274,7 +4274,7 @@ void Server::handle_client_getattr(const MDRequestRef& mdr, bool is_lookup)
   // reply
   dout(10) << "reply to stat on " << *req << dendl;
   mdr->tracei = ref;
-  if (is_lookup)
+  if (is_lookup && mdr->dn[0].size())
     mdr->tracedn = mdr->dn[0].back();
   respond_to_request(mdr, 0);
 }