LibAFL_QEMU: Don't require extra_tokens. (#2576)

Co-authored-by: Romain Malmain <romain.malmain@pm.me>
This commit is contained in:
Dominik Maier 2024-10-07 13:39:55 +02:00 committed by GitHub
parent 1fbb18cb99
commit 27677a6461
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 24 additions and 20 deletions

View File

@ -153,8 +153,6 @@ impl<'a> Client<'a> {
}
});
let extra_tokens = injection_module.as_ref().map(|h| h.tokens.clone());
qemu.entry_break(start_pc);
let ret_addr: GuestAddr = qemu
@ -169,7 +167,12 @@ impl<'a> Client<'a> {
.address_filter(self.coverage_filter(&qemu)?)
.build();
let instance = Instance::builder()
let extra_tokens = injection_module
.as_ref()
.map(|h| h.tokens.clone())
.unwrap_or_default();
let instance_builder = Instance::builder()
.options(self.options)
.qemu(&qemu)
.mgr(mgr)
@ -178,7 +181,7 @@ impl<'a> Client<'a> {
if is_asan && is_cmplog {
if let Some(injection_module) = injection_module {
instance.build().run(
instance_builder.build().run(
tuple_list!(
edge_coverage_module,
CmpLogModule::default(),
@ -188,7 +191,7 @@ impl<'a> Client<'a> {
state,
)
} else {
instance.build().run(
instance_builder.build().run(
tuple_list!(
edge_coverage_module,
CmpLogModule::default(),
@ -199,7 +202,7 @@ impl<'a> Client<'a> {
}
} else if is_asan_guest && is_cmplog {
if let Some(injection_module) = injection_module {
instance.build().run(
instance_builder.build().run(
tuple_list!(
edge_coverage_module,
CmpLogModule::default(),
@ -209,7 +212,7 @@ impl<'a> Client<'a> {
state,
)
} else {
instance.build().run(
instance_builder.build().run(
tuple_list!(
edge_coverage_module,
CmpLogModule::default(),
@ -220,7 +223,7 @@ impl<'a> Client<'a> {
}
} else if is_asan {
if let Some(injection_module) = injection_module {
instance.build().run(
instance_builder.build().run(
tuple_list!(
edge_coverage_module,
AsanModule::default(asan.take().unwrap()),
@ -229,7 +232,7 @@ impl<'a> Client<'a> {
state,
)
} else {
instance.build().run(
instance_builder.build().run(
tuple_list!(
edge_coverage_module,
AsanModule::default(asan.take().unwrap()),
@ -242,10 +245,10 @@ impl<'a> Client<'a> {
edge_coverage_module,
AsanGuestModule::default(&qemu, asan_lib.take().unwrap())
);
instance.build().run(modules, state)
instance_builder.build().run(modules, state)
} else if is_cmplog {
if let Some(injection_module) = injection_module {
instance.build().run(
instance_builder.build().run(
tuple_list!(
edge_coverage_module,
CmpLogModule::default(),
@ -254,17 +257,17 @@ impl<'a> Client<'a> {
state,
)
} else {
instance.build().run(
instance_builder.build().run(
tuple_list!(edge_coverage_module, CmpLogModule::default()),
state,
)
}
} else if let Some(injection_module) = injection_module {
instance
instance_builder
.build()
.run(tuple_list!(edge_coverage_module, injection_module), state)
} else {
instance
instance_builder
.build()
.run(tuple_list!(edge_coverage_module), state)
}

View File

@ -64,7 +64,8 @@ pub struct Instance<'a, M: Monitor> {
qemu: &'a Qemu,
mgr: ClientMgr<M>,
core_id: CoreId,
extra_tokens: Option<Vec<String>>,
#[builder(default)]
extra_tokens: Vec<String>,
#[builder(default=PhantomData)]
phantom: PhantomData<M>,
}
@ -134,12 +135,10 @@ impl<'a, M: Monitor> Instance<'a, M> {
let mut tokens = Tokens::new();
if let Some(extra_tokens) = &self.extra_tokens {
for token in extra_tokens {
for token in &self.extra_tokens {
let bytes = token.as_bytes().to_vec();
let _ = tokens.add_token(&bytes);
}
}
if let Some(tokenfile) = &self.options.tokens {
tokens.add_from_file(tokenfile)?;

View File

@ -357,6 +357,8 @@ pub struct EdgeCoverageModuleBuilder<AF, PF, V> {
pub struct EdgeCoverageModule<AF, PF, V> {
variant: V,
address_filter: AF,
// we only use it in system mode at the moment.
#[cfg_attr(not(emulation_mode = "systemmode"), allow(dead_code))]
page_filter: PF,
use_hitcounts: bool,
use_jit: bool,