From f05bf957c26c8fa8f91c89f72bf9da14d2f7fdd8 Mon Sep 17 00:00:00 2001 From: Langston Barrett Date: Thu, 20 Nov 2025 14:29:55 +0000 Subject: [PATCH 1/4] libafl_qemu: Sprinkle some `#[must_use]` on `Emulator` getters There is no point to calling these methods without using the return values. --- crates/libafl_qemu/src/executor.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/libafl_qemu/src/executor.rs b/crates/libafl_qemu/src/executor.rs index 7b544a2402..043cf9ffb1 100644 --- a/crates/libafl_qemu/src/executor.rs +++ b/crates/libafl_qemu/src/executor.rs @@ -279,6 +279,7 @@ where }) } + #[must_use] pub fn inner(&self) -> &EmulatorInProcessExecutor { &self.inner } @@ -288,6 +289,7 @@ where BREAK_ON_TMOUT.store(true, Ordering::Release); } + #[must_use] pub fn inner_mut( &mut self, ) -> &mut EmulatorInProcessExecutor { @@ -432,21 +434,25 @@ where } #[allow(clippy::type_complexity)] + #[must_use] pub fn inner(&self) -> &QemuInProcessForkExecutor { &self.inner } #[allow(clippy::type_complexity)] + #[must_use] pub fn inner_mut( &mut self, ) -> &mut QemuInProcessForkExecutor { &mut self.inner } + #[must_use] pub fn emulator(&self) -> &Emulator { &self.inner.exposed_executor_state } + #[must_use] pub fn emulator_mut(&mut self) -> &Emulator { &mut self.inner.exposed_executor_state } From 3743a7776a539cea7216ac6b6f058099191005c6 Mon Sep 17 00:00:00 2001 From: Langston Barrett Date: Thu, 20 Nov 2025 14:34:31 +0000 Subject: [PATCH 2/4] Add `into_state` for stateful executors --- crates/libafl/src/executors/inprocess/stateful.rs | 7 +++++++ crates/libafl/src/executors/inprocess_fork/stateful.rs | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/crates/libafl/src/executors/inprocess/stateful.rs b/crates/libafl/src/executors/inprocess/stateful.rs index f95d41e4cb..99d175a32c 100644 --- a/crates/libafl/src/executors/inprocess/stateful.rs +++ b/crates/libafl/src/executors/inprocess/stateful.rs @@ -306,6 +306,13 @@ where pub fn hooks_mut(&mut self) -> &mut (InProcessHooks, HT) { self.inner.hooks_mut() } + + /// Retrieve the state, consuming the executor. + #[inline] + #[must_use] + pub fn into_state(self) -> ES { + self.exposed_executor_state + } } impl HasInProcessHooks diff --git a/crates/libafl/src/executors/inprocess_fork/stateful.rs b/crates/libafl/src/executors/inprocess_fork/stateful.rs index 30293047f3..cb74846bae 100644 --- a/crates/libafl/src/executors/inprocess_fork/stateful.rs +++ b/crates/libafl/src/executors/inprocess_fork/stateful.rs @@ -181,6 +181,13 @@ where pub fn harness_mut(&mut self) -> &mut H { &mut self.harness_fn } + + /// Retrieve the state, consuming the executor. + #[inline] + #[must_use] + pub fn into_state(self) -> ES { + self.exposed_executor_state + } } impl HasObservers From 23deb072a8371283c6fdbec3510fd11d1966fb98 Mon Sep 17 00:00:00 2001 From: Langston Barrett Date: Thu, 20 Nov 2025 14:35:27 +0000 Subject: [PATCH 3/4] Sprinkle some `#[must_use]` on `Stateful...InProcessExecutor` getters --- crates/libafl/src/executors/inprocess/stateful.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/libafl/src/executors/inprocess/stateful.rs b/crates/libafl/src/executors/inprocess/stateful.rs index 99d175a32c..7a3056659a 100644 --- a/crates/libafl/src/executors/inprocess/stateful.rs +++ b/crates/libafl/src/executors/inprocess/stateful.rs @@ -285,24 +285,28 @@ where /// Retrieve the harness function. #[inline] + #[must_use] pub fn harness(&self) -> &H { self.harness_fn.borrow() } /// Retrieve the harness function for a mutable reference. #[inline] + #[must_use] pub fn harness_mut(&mut self) -> &mut H { self.harness_fn.borrow_mut() } /// The inprocess handlers #[inline] + #[must_use] pub fn hooks(&self) -> &(InProcessHooks, HT) { self.inner.hooks() } /// The inprocess handlers (mutable) #[inline] + #[must_use] pub fn hooks_mut(&mut self) -> &mut (InProcessHooks, HT) { self.inner.hooks_mut() } From 78a4c6620590bacfc9e658a673530e532ef3106c Mon Sep 17 00:00:00 2001 From: Langston Barrett Date: Thu, 20 Nov 2025 14:39:10 +0000 Subject: [PATCH 4/4] libafl_qemu: Add `into_emulator` for executors --- crates/libafl_qemu/src/executor.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/crates/libafl_qemu/src/executor.rs b/crates/libafl_qemu/src/executor.rs index 043cf9ffb1..768ba9c274 100644 --- a/crates/libafl_qemu/src/executor.rs +++ b/crates/libafl_qemu/src/executor.rs @@ -295,6 +295,13 @@ where ) -> &mut EmulatorInProcessExecutor { &mut self.inner } + + /// Retrieve the emulator, consuming the executor. + #[inline] + #[must_use] + pub fn into_emulator(self) -> Emulator { + self.inner.into_state() + } } impl Executor @@ -456,6 +463,13 @@ where pub fn emulator_mut(&mut self) -> &Emulator { &mut self.inner.exposed_executor_state } + + /// Retrieve the emulator, consuming the executor. + #[inline] + #[must_use] + pub fn into_emulator(self) -> Emulator { + self.inner.into_state() + } } #[cfg(feature = "fork")]