diff options
author | Greg Farnum <greg@inktank.com> | 2013-09-11 16:24:32 -0700 |
---|---|---|
committer | Greg Farnum <greg@inktank.com> | 2013-09-23 15:34:25 -0700 |
commit | b3d3b3747c1eef695138dac828e5fcb435309c7b (patch) | |
tree | 7ba5d9c7777b986c4c030d5efe0f474274d4c44b | |
parent | 06c58132199ed22413b509dfa751321ccdb24225 (diff) | |
download | ceph-b3d3b3747c1eef695138dac828e5fcb435309c7b.tar.gz |
mds: be more careful about decoding LogEvents
We need to wrap the full decode section or we can abort the process
if there's an issue (which we may want to just skip by).
Signed-off-by: Greg Farnum <greg@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
(cherry picked from commit 73289b34b0be5b6612e38944794d59b5e789f841)
-rw-r--r-- | src/mds/LogEvent.cc | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/mds/LogEvent.cc b/src/mds/LogEvent.cc index b775b6d9501..16e7f803196 100644 --- a/src/mds/LogEvent.cc +++ b/src/mds/LogEvent.cc @@ -46,10 +46,16 @@ LogEvent *LogEvent::decode(bufferlist& bl) ::decode(type, p); if (EVENT_NEW_ENCODING == type) { - DECODE_START(1, p); - ::decode(type, p); - event = decode_event(bl, p, type); - DECODE_FINISH(p); + try { + DECODE_START(1, p); + ::decode(type, p); + event = decode_event(bl, p, type); + DECODE_FINISH(p); + } + catch (const buffer::error &e) { + generic_dout(0) << "failed to decode LogEvent (type maybe " << type << ")" << dendl; + return NULL; + } } else { // we are using classic encoding event = decode_event(bl, p, type); } |