From: Sage Weil Date: Mon, 18 Jan 2016 14:52:40 +0000 (-0500) Subject: os/bluestore: fix _key_decode_u64 error checks X-Git-Tag: v10.0.3~27^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1590b082d5a57faae567ae45d9eb6f9cd0e3607a;p=ceph.git os/bluestore: fix _key_decode_u64 error checks The data that follows may be binary encoded and null. Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 98dc7fa85f91..304a02ac936d 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -345,20 +345,17 @@ static int get_key_object(const string& key, ghobject_t *oid) int r; const char *p = key.c_str(); - p = _key_decode_shard(p, &oid->shard_id); - if (!*p) + if (key.length() < 2 + 8 + 4) return -2; + p = _key_decode_shard(p, &oid->shard_id); uint64_t pool; p = _key_decode_u64(p, &pool); - if (!*p) - return -3; oid->hobj.pool = pool - 0x8000000000000000ull; unsigned hash; p = _key_decode_u32(p, &hash); - if (!*p) - return -4; + oid->hobj.set_bitwise_key_u32(hash); if (*p != '.') return -5; @@ -395,8 +392,6 @@ static int get_key_object(const string& key, ghobject_t *oid) } p = _key_decode_u64(p, &oid->hobj.snap.val); - if (!*p) - return -11; p = _key_decode_u64(p, &oid->generation); if (*p) { // if we get something other than a null terminator here,