From b2a1c8614fb5ba2c3fac7782f33f174b9d64c464 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 7 Jan 2016 12:51:03 -0500 Subject: [PATCH] os/FuseStore: do not call exists() on an out-of-bounds oid Signed-off-by: Sage Weil --- src/os/FuseStore.cc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/os/FuseStore.cc b/src/os/FuseStore.cc index 775771f5552..1f47b4346f1 100644 --- a/src/os/FuseStore.cc +++ b/src/os/FuseStore.cc @@ -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: