]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: check for errors decoding backtraces
authorJohn Spray <john.spray@redhat.com>
Tue, 20 Dec 2016 18:04:47 +0000 (18:04 +0000)
committerNathan Cutler <ncutler@suse.com>
Mon, 9 Jan 2017 13:58:02 +0000 (14:58 +0100)
Fixes: http://tracker.ceph.com/issues/18311
Signed-off-by: John Spray <john.spray@redhat.com>
(cherry picked from commit 6f489c74ac0040631fde0ceb0926cbab24d3ad55)

src/mds/MDCache.cc

index 447d2795df89c2f54a90f7e95094b38522aeec1f..b04f1291e51c95867cf7290c8e43afeac47e5663 100644 (file)
@@ -8241,7 +8241,14 @@ void MDCache::_open_ino_backtrace_fetched(inodeno_t ino, bufferlist& bl, int err
 
   inode_backtrace_t backtrace;
   if (err == 0) {
-    ::decode(backtrace, bl);
+    try {
+      ::decode(backtrace, bl);
+    } catch (const buffer::error &decode_exc) {
+      derr << "corrupt backtrace on ino x0" << std::hex << ino
+           << std::dec << ": " << decode_exc << dendl;
+      open_ino_finish(ino, info, -EIO);
+      return;
+    }
     if (backtrace.pool != info.pool && backtrace.pool != -1) {
       dout(10) << " old object in pool " << info.pool
               << ", retrying pool " << backtrace.pool << dendl;