From: David Zafman Date: Wed, 14 Mar 2018 23:29:18 +0000 (-0700) Subject: osd: Don't crash in get_hash_info() with a corrupt HashInfo X-Git-Tag: v12.2.5~11^2~15 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dd042a153bdc2908d5df55102e363839e46439c5;p=ceph.git osd: Don't crash in get_hash_info() with a corrupt HashInfo Signed-off-by: David Zafman (cherry picked from commit 0d4acc55ffd7f0f45324d1c933a2a5d0d47b84ec) Conflicts: src/osd/ECBackend.cc (Uses ::decode()) --- diff --git a/src/osd/ECBackend.cc b/src/osd/ECBackend.cc index e0cedf47db1a..3e6663630d13 100644 --- a/src/osd/ECBackend.cc +++ b/src/osd/ECBackend.cc @@ -1737,7 +1737,12 @@ ECUtil::HashInfoRef ECBackend::get_hash_info( } if (bl.length() > 0) { bufferlist::iterator bp = bl.begin(); - ::decode(hinfo, bp); + try { + ::decode(hinfo, bp); + } catch(...) { + dout(0) << __func__ << ": Can't decode hinfo for " << hoid << dendl; + return ECUtil::HashInfoRef(); + } if (checks && hinfo.get_total_chunk_size() != (uint64_t)st.st_size) { dout(0) << __func__ << ": Mismatch of total_chunk_size " << hinfo.get_total_chunk_size() << dendl;