From 99a156f7832fcf106d60f45a9690878ba79cdae9 Mon Sep 17 00:00:00 2001 From: Romain Malmain Date: Sun, 3 Nov 2024 21:09:16 +0100 Subject: [PATCH] Implement From LibAFL Error for Qemu Error (#2641) * impl from qemu error for libafl error * new error for frontends like qemu or frida * exhaustive match * frontend -> runtime --- libafl_bolts/src/lib.rs | 15 +++++++++++++++ libafl_qemu/src/qemu/mod.rs | 12 ++++++++++++ 2 files changed, 27 insertions(+) diff --git a/libafl_bolts/src/lib.rs b/libafl_bolts/src/lib.rs index dd6c78c67f..278e25b898 100644 --- a/libafl_bolts/src/lib.rs +++ b/libafl_bolts/src/lib.rs @@ -300,6 +300,8 @@ pub enum Error { Unknown(String, ErrorBacktrace), /// Error with the corpora InvalidCorpus(String, ErrorBacktrace), + /// Error specific to a runtime like QEMU or Frida + Runtime(String, ErrorBacktrace), } impl Error { @@ -438,6 +440,15 @@ impl Error { { Error::InvalidCorpus(arg.into(), ErrorBacktrace::new()) } + + /// Error specific to some runtime, like QEMU or Frida + #[must_use] + pub fn runtime(arg: S) -> Self + where + S: Into, + { + Error::Runtime(arg.into(), ErrorBacktrace::new()) + } } impl Display for Error { @@ -502,6 +513,10 @@ impl Display for Error { write!(f, "Invalid corpus: {0}", &s)?; display_error_backtrace(f, b) } + Self::Runtime(s, b) => { + write!(f, "Runtime error: {0}", &s)?; + display_error_backtrace(f, b) + } } } } diff --git a/libafl_qemu/src/qemu/mod.rs b/libafl_qemu/src/qemu/mod.rs index 912956842d..57fcef453c 100644 --- a/libafl_qemu/src/qemu/mod.rs +++ b/libafl_qemu/src/qemu/mod.rs @@ -57,6 +57,18 @@ pub enum QemuError { RW(QemuRWError), } +impl From for libafl::Error { + fn from(qemu_error: QemuError) -> Self { + libafl::Error::runtime(qemu_error) + } +} + +impl From for String { + fn from(qemu_error: QemuError) -> Self { + format!("LibAFL QEMU Error: {qemu_error:?}") + } +} + #[derive(Debug)] pub enum QemuInitError { MultipleInstances,