]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
hobject: compensate for non-canonical hobject_t::get_max() encodings
authorSamuel Just <sjust@redhat.com>
Fri, 3 Jun 2016 00:36:21 +0000 (17:36 -0700)
committerSamuel Just <sjust@redhat.com>
Mon, 6 Jun 2016 16:36:00 +0000 (09:36 -0700)
This closes a loop-hole that could allow a non-canonical in memory
hobject_t::get_max() object which would return true for is_max(), but
false for *this == hobject_t::get_max().

Fixes: http://tracker.ceph.com/issues/16113
Signed-off-by: Samuel Just <sjust@redhat.com>
(cherry picked from commit 42fad4b76def50a0984bf3de06f78ed434d56954)

src/common/hobject.cc

index 51403d7c1a37e0fd94d85a7c6b08ff6b760038d8..8c3f9a2692da7c692e29753346e0d0436a85337c 100644 (file)
@@ -142,6 +142,12 @@ void hobject_t::decode(bufferlist::iterator& bl)
       pool = INT64_MIN;
       assert(is_min());
     }
+
+    // for compatibility with some earlier verisons which might encoded
+    // a non-canonical max object
+    if (max) {
+      *this = hobject_t::get_max();
+    }
   }
   DECODE_FINISH(bl);
   build_hash_cache();