From 96c0f2afc76dbe7223f551cbffeba092a8b1f4f6 Mon Sep 17 00:00:00 2001 From: Matthew Khouzam Date: Wed, 26 Jun 2013 15:10:18 -0400 Subject: [PATCH] ctf: Fix buffer overflow traces from crashing batch import Buffer overflows are caused here by synthetic traces that aim to behave maliciously. The parser already handles these attacks, but the BufferOverflowException will cause the batch import trace wizard to stop scanning. This fix catches buffer overflows in the validation and warns that the error is serious. Change-Id: Ie9156cfaac0944763e3d1dc798c42f1d64753560 Signed-off-by: Matthew Khouzam Reviewed-on: https://git.eclipse.org/r/14088 Tested-by: Hudson CI Reviewed-by: Bernd Hufmann IP-Clean: Bernd Hufmann Tested-by: Bernd Hufmann --- .../lttng2/kernel/core/trace/LttngKernelTrace.java | 4 ++++ .../linuxtools/lttng2/kernel/core/trace/Messages.java | 10 ++++++++++ .../lttng2/kernel/core/trace/messages.properties | 2 ++ .../linuxtools/tmf/core/ctfadaptor/CtfTmfTrace.java | 4 ++++ .../linuxtools/tmf/core/ctfadaptor/Messages.java | 4 ++++ .../linuxtools/tmf/core/ctfadaptor/messages.properties | 1 + 6 files changed, 25 insertions(+) diff --git a/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/LttngKernelTrace.java b/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/LttngKernelTrace.java index cc72b09c10..c9d6581791 100644 --- a/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/LttngKernelTrace.java +++ b/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/LttngKernelTrace.java @@ -14,6 +14,7 @@ package org.eclipse.linuxtools.lttng2.kernel.core.trace; import java.io.File; +import java.nio.BufferOverflowException; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IStatus; @@ -75,6 +76,9 @@ public class LttngKernelTrace extends CtfTmfTrace { } catch (NullPointerException e){ validStatus = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.toString(), e); return validStatus; + } catch (final BufferOverflowException e) { + validStatus = new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.LttngKernelTrace_TraceReadError + ": " + Messages.LttngKernelTrace_MalformedTrace); //$NON-NLS-1$ + return validStatus; } /* Make sure the domain is "kernel" in the trace's env vars */ diff --git a/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/Messages.java b/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/Messages.java index 6b958f2b3e..e3372101c0 100644 --- a/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/Messages.java +++ b/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/Messages.java @@ -27,6 +27,16 @@ public class Messages extends NLS { * The domain is not "kernel" */ public static String LttngKernelTrace_DomainError; + /** + * Malformed trace (buffer overflow maybe?) + * @since 2.1 + */ + public static String LttngKernelTrace_MalformedTrace; + /** + * Trace read error + * @since 2.1 + */ + public static String LttngKernelTrace_TraceReadError; static { // initialize resource bundle diff --git a/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/messages.properties b/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/messages.properties index 7ef639cf62..460105a03e 100644 --- a/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/messages.properties +++ b/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/messages.properties @@ -11,3 +11,5 @@ ############################################################################### LttngKernelTrace_DomainError=Domain mismatch, the environment should be 'kernel'. +LttngKernelTrace_MalformedTrace=Buffer overflow exception, trace is malformed +LttngKernelTrace_TraceReadError=Lttng trace read error diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/CtfTmfTrace.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/CtfTmfTrace.java index 700b0a9d7d..16ff7f5c7f 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/CtfTmfTrace.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/CtfTmfTrace.java @@ -13,6 +13,7 @@ package org.eclipse.linuxtools.tmf.core.ctfadaptor; +import java.nio.BufferOverflowException; import java.util.Collections; import java.util.Map; @@ -154,7 +155,10 @@ public class CtfTmfTrace extends TmfTrace temp.dispose(); } catch (final CTFReaderException e) { validTrace = new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.CtfTmfTrace_ReadingError +": " + e.toString()); //$NON-NLS-1$ + } catch (final BufferOverflowException e){ + validTrace = new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.CtfTmfTrace_ReadingError +": " + Messages.CtfTmfTrace_BufferOverflowErrorMessage); //$NON-NLS-1$ } + return validTrace; } diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/Messages.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/Messages.java index 654a6ce724..6d51e613ee 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/Messages.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/Messages.java @@ -23,6 +23,10 @@ public class Messages extends NLS { private static final String BUNDLE_NAME = "org.eclipse.linuxtools.tmf.core.ctfadaptor.messages"; //$NON-NLS-1$ + /** Buffer overflow detected + * @since 2.1*/ + public static String CtfTmfTrace_BufferOverflowErrorMessage; + /** Major version number not set */ public static String CtfTmfTrace_MajorNotSet; diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/messages.properties b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/messages.properties index 5fe42dca0c..ba5eee55ac 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/messages.properties +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/ctfadaptor/messages.properties @@ -10,6 +10,7 @@ # Ericsson - Initial API and implementation ############################################################################### +CtfTmfTrace_BufferOverflowErrorMessage=Buffer overflow exception, trace is malformed CtfTmfTrace_MajorNotSet=Major version number not set CtfTmfTrace_ReadingError=Reading error CtfTmfTrace_NoEvent=Trace has no events \ No newline at end of file -- 2.34.1