summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Farnum <greg@inktank.com>2013-09-11 16:24:32 -0700
committerGreg Farnum <greg@inktank.com>2013-09-23 15:34:25 -0700
commitb3d3b3747c1eef695138dac828e5fcb435309c7b (patch)
tree7ba5d9c7777b986c4c030d5efe0f474274d4c44b
parent06c58132199ed22413b509dfa751321ccdb24225 (diff)
downloadceph-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.cc14
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);
}