]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/FuseStore: do not call exists() on an out-of-bounds oid
authorSage Weil <sage@redhat.com>
Thu, 7 Jan 2016 17:51:03 +0000 (12:51 -0500)
committerSage Weil <sage@redhat.com>
Wed, 27 Jan 2016 19:06:14 +0000 (14:06 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/FuseStore.cc

index 775771f5552d91d616f36a00da819a0f99fa4e17..1f47b4346f1646e82509796624456433d6e75eb2 100644 (file)
@@ -210,6 +210,26 @@ static int os_getattr(const char *path, struct stat *stbuf)
   stbuf->st_gid = 0;
   stbuf->st_mode = S_IFREG | 0700;
 
+  switch (t) {
+  case FN_OBJECT_OMAP:
+  case FN_OBJECT_ATTR:
+  case FN_OBJECT:
+  case FN_OBJECT_DATA:
+  case FN_OBJECT_OMAP_HEADER:
+  case FN_OBJECT_OMAP_VAL:
+    {
+      spg_t pgid;
+      if (cid.is_pg(&pgid)) {
+       int bits = fs->store->collection_bits(cid);
+       if (bits >= 0 && !oid.match(bits, pgid.ps())) {
+         // sorry, not part of this PG
+         return -ENOENT;
+       }
+      }
+    }
+    break;
+  }
+
   switch (t) {
   case FN_OBJECT_OMAP:
   case FN_OBJECT_ATTR: