Skip to content

Commit 7e18887

Browse files
domenukkrmalmain
andauthored
Remove shmem associated type (#2870)
* reduce shm trait bound * Rename to SendExiting * alpha beta gamam * alphabet * work * std only --------- Co-authored-by: Romain Malmain <[email protected]>
1 parent 72adb48 commit 7e18887

File tree

10 files changed

+513
-473
lines changed

10 files changed

+513
-473
lines changed

fuzzers/binary_only/qemu_cmin/src/fuzzer.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use std::{env, fmt::Write, io, path::PathBuf, process, ptr::NonNull};
77
use clap::{builder::Str, Parser};
88
use libafl::{
99
corpus::{Corpus, InMemoryOnDiskCorpus, NopCorpus},
10-
events::{EventRestarter, ManagerExit, SimpleRestartingEventManager},
10+
events::{EventRestarter, SendExiting, SimpleRestartingEventManager},
1111
executors::ExitKind,
1212
feedbacks::MaxMapFeedback,
1313
fuzzer::StdFuzzer,

fuzzers/binary_only/qemu_coverage/src/fuzzer.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use clap::{builder::Str, Parser};
99
use libafl::{
1010
corpus::{Corpus, InMemoryCorpus},
1111
events::{
12-
launcher::Launcher, ClientDescription, EventConfig, LlmpRestartingEventManager, ManagerExit,
12+
launcher::Launcher, ClientDescription, EventConfig, LlmpRestartingEventManager, SendExiting,
1313
},
1414
executors::ExitKind,
1515
fuzzer::StdFuzzer,

libafl/src/events/centralized.rs

+17-19
Original file line numberDiff line numberDiff line change
@@ -18,27 +18,28 @@ use libafl_bolts::{
1818
};
1919
use libafl_bolts::{
2020
llmp::{LlmpClient, LlmpClientDescription, Tag},
21-
shmem::{NopShMem, NopShMemProvider, ShMem, ShMemProvider},
21+
shmem::{ShMem, ShMemProvider},
2222
tuples::{Handle, MatchNameRef},
2323
ClientId,
2424
};
2525
use serde::{de::DeserializeOwned, Serialize};
2626

27-
use super::{CanSerializeObserver, ManagerExit, NopEventManager};
27+
use super::AwaitRestartSafe;
2828
#[cfg(feature = "llmp_compression")]
2929
use crate::events::llmp::COMPRESS_THRESHOLD;
3030
use crate::{
3131
common::HasMetadata,
3232
events::{
3333
serialize_observers_adaptive, std_maybe_report_progress, std_report_progress,
34-
AdaptiveSerializer, Event, EventConfig, EventFirer, EventManagerHooksTuple, EventManagerId,
35-
EventProcessor, EventRestarter, HasEventManagerId, LogSeverity, ProgressReporter,
34+
AdaptiveSerializer, CanSerializeObserver, Event, EventConfig, EventFirer,
35+
EventManagerHooksTuple, EventManagerId, EventProcessor, EventRestarter, HasEventManagerId,
36+
LogSeverity, ProgressReporter, SendExiting,
3637
},
3738
executors::HasObservers,
3839
fuzzer::{EvaluatorObservers, ExecutionProcessor},
39-
inputs::{Input, NopInput},
40+
inputs::Input,
4041
observers::TimeObserver,
41-
state::{HasExecutions, HasLastReportTime, MaybeHasClientPerfMonitor, NopState, Stoppable},
42+
state::{HasExecutions, HasLastReportTime, MaybeHasClientPerfMonitor, Stoppable},
4243
Error,
4344
};
4445

@@ -58,16 +59,7 @@ pub struct CentralizedEventManager<EM, EMH, I, S, SHM, SP> {
5859
phantom: PhantomData<(I, S)>,
5960
}
6061

61-
impl
62-
CentralizedEventManager<
63-
NopEventManager,
64-
(),
65-
NopInput,
66-
NopState<NopInput>,
67-
NopShMem,
68-
NopShMemProvider,
69-
>
70-
{
62+
impl CentralizedEventManager<(), (), (), (), (), ()> {
7163
/// Creates a builder for [`CentralizedEventManager`]
7264
#[must_use]
7365
pub fn builder() -> CentralizedEventManagerBuilder {
@@ -291,7 +283,7 @@ impl<EM, EMH, I, OT, S, SHM, SP> CanSerializeObserver<OT>
291283
for CentralizedEventManager<EM, EMH, I, S, SHM, SP>
292284
where
293285
EM: AdaptiveSerializer,
294-
OT: Serialize + MatchNameRef,
286+
OT: MatchNameRef + Serialize,
295287
{
296288
fn serialize_observers(&mut self, observers: &OT) -> Result<Option<Vec<u8>>, Error> {
297289
serialize_observers_adaptive::<EM, OT>(
@@ -303,17 +295,23 @@ where
303295
}
304296
}
305297

306-
impl<EM, EMH, I, S, SHM, SP> ManagerExit for CentralizedEventManager<EM, EMH, I, S, SHM, SP>
298+
impl<EM, EMH, I, S, SHM, SP> SendExiting for CentralizedEventManager<EM, EMH, I, S, SHM, SP>
307299
where
308-
EM: ManagerExit,
300+
EM: SendExiting,
309301
SHM: ShMem,
310302
SP: ShMemProvider<ShMem = SHM>,
311303
{
312304
fn send_exiting(&mut self) -> Result<(), Error> {
313305
self.client.sender_mut().send_exiting()?;
314306
self.inner.send_exiting()
315307
}
308+
}
316309

310+
impl<EM, EMH, I, S, SHM, SP> AwaitRestartSafe for CentralizedEventManager<EM, EMH, I, S, SHM, SP>
311+
where
312+
SHM: ShMem,
313+
EM: AwaitRestartSafe,
314+
{
317315
#[inline]
318316
fn await_restart_safe(&mut self) {
319317
self.client.await_safe_to_unmap_blocking();

libafl/src/events/llmp/mgr.rs

+23-24
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use libafl_bolts::{
1818
use libafl_bolts::{
1919
current_time,
2020
llmp::{LlmpClient, LlmpClientDescription, LLMP_FLAG_FROM_MM},
21-
shmem::{NopShMem, NopShMemProvider, ShMem, ShMemProvider},
21+
shmem::{NopShMem, ShMem, ShMemProvider},
2222
tuples::Handle,
2323
ClientId,
2424
};
@@ -38,18 +38,18 @@ use crate::events::{serialize_observers_adaptive, CanSerializeObserver};
3838
use crate::{
3939
events::{
4040
llmp::{LLMP_TAG_EVENT_TO_BOTH, _LLMP_TAG_EVENT_TO_BROKER},
41-
std_maybe_report_progress, std_on_restart, std_report_progress, AdaptiveSerializer, Event,
42-
EventConfig, EventFirer, EventManagerHooksTuple, EventManagerId, EventProcessor,
43-
EventRestarter, HasEventManagerId, ManagerExit, ProgressReporter,
41+
std_maybe_report_progress, std_on_restart, std_report_progress, AdaptiveSerializer,
42+
AwaitRestartSafe, Event, EventConfig, EventFirer, EventManagerHooksTuple, EventManagerId,
43+
EventProcessor, EventRestarter, HasEventManagerId, ProgressReporter, SendExiting,
4444
},
4545
executors::HasObservers,
4646
fuzzer::{EvaluatorObservers, ExecutionProcessor},
47-
inputs::{Input, NopInput},
47+
inputs::Input,
4848
observers::TimeObserver,
4949
stages::HasCurrentStageId,
5050
state::{
5151
HasCurrentTestcase, HasExecutions, HasImported, HasLastReportTime, HasSolutions,
52-
MaybeHasClientPerfMonitor, NopState, Stoppable,
52+
MaybeHasClientPerfMonitor, Stoppable,
5353
},
5454
Error, HasMetadata,
5555
};
@@ -62,7 +62,6 @@ const INITIAL_EVENT_BUFFER_SIZE: usize = 1024 * 4;
6262
pub struct LlmpEventManager<EMH, I, S, SHM, SP>
6363
where
6464
SHM: ShMem,
65-
SP: ShMemProvider<ShMem = SHM>,
6665
{
6766
/// We only send 1 testcase for every `throttle` second
6867
pub(crate) throttle: Option<Duration>,
@@ -82,11 +81,11 @@ where
8281
serializations_cnt: usize,
8382
should_serialize_cnt: usize,
8483
pub(crate) time_ref: Option<Handle<TimeObserver>>,
85-
phantom: PhantomData<(I, S)>,
8684
event_buffer: Vec<u8>,
85+
phantom: PhantomData<(I, S)>,
8786
}
8887

89-
impl LlmpEventManager<(), NopState<NopInput>, NopInput, NopShMem, NopShMemProvider> {
88+
impl LlmpEventManager<(), (), (), NopShMem, ()> {
9089
/// Creates a builder for [`LlmpEventManager`]
9190
#[must_use]
9291
pub fn builder() -> LlmpEventManagerBuilder<()> {
@@ -143,7 +142,6 @@ impl<EMH> LlmpEventManagerBuilder<EMH> {
143142
) -> Result<LlmpEventManager<EMH, I, S, SHM, SP>, Error>
144143
where
145144
SHM: ShMem,
146-
SP: ShMemProvider<ShMem = SHM>,
147145
{
148146
Ok(LlmpEventManager {
149147
throttle: self.throttle,
@@ -158,8 +156,8 @@ impl<EMH> LlmpEventManagerBuilder<EMH> {
158156
serializations_cnt: 0,
159157
should_serialize_cnt: 0,
160158
time_ref,
161-
phantom: PhantomData,
162159
event_buffer: Vec::with_capacity(INITIAL_EVENT_BUFFER_SIZE),
160+
phantom: PhantomData,
163161
})
164162
}
165163

@@ -217,11 +215,10 @@ impl<EMH> LlmpEventManagerBuilder<EMH> {
217215
}
218216

219217
#[cfg(feature = "std")]
220-
impl<EMH, I, OT, S, SHM, SP> CanSerializeObserver<OT> for LlmpEventManager<EMH, I, S, SHM, SP>
218+
impl<EMH, I, S, OT, SHM, SP> CanSerializeObserver<OT> for LlmpEventManager<EMH, I, S, SHM, SP>
221219
where
222-
OT: Serialize + MatchNameRef,
220+
OT: MatchNameRef + Serialize,
223221
SHM: ShMem,
224-
SP: ShMemProvider<ShMem = SHM>,
225222
{
226223
fn serialize_observers(&mut self, observers: &OT) -> Result<Option<Vec<u8>>, Error> {
227224
serialize_observers_adaptive::<Self, OT>(self, observers, 2, 80)
@@ -231,7 +228,6 @@ where
231228
impl<EMH, I, S, SHM, SP> AdaptiveSerializer for LlmpEventManager<EMH, I, S, SHM, SP>
232229
where
233230
SHM: ShMem,
234-
SP: ShMemProvider<ShMem = SHM>,
235231
{
236232
fn serialization_time(&self) -> Duration {
237233
self.serialization_time
@@ -267,7 +263,7 @@ where
267263
impl<EMH, I, S, SHM, SP> Debug for LlmpEventManager<EMH, I, S, SHM, SP>
268264
where
269265
SHM: ShMem,
270-
SP: ShMemProvider<ShMem = SHM>,
266+
SP: Debug,
271267
{
272268
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
273269
let mut debug_struct = f.debug_struct("LlmpEventManager");
@@ -277,15 +273,13 @@ where
277273
let debug = debug.field("compressor", &self.compressor);
278274
debug
279275
.field("configuration", &self.configuration)
280-
.field("phantom", &self.phantom)
281276
.finish_non_exhaustive()
282277
}
283278
}
284279

285280
impl<EMH, I, S, SHM, SP> Drop for LlmpEventManager<EMH, I, S, SHM, SP>
286281
where
287282
SHM: ShMem,
288-
SP: ShMemProvider<ShMem = SHM>,
289283
{
290284
/// LLMP clients will have to wait until their pages are mapped by somebody.
291285
fn drop(&mut self) {
@@ -296,7 +290,6 @@ where
296290
impl<EMH, I, S, SHM, SP> LlmpEventManager<EMH, I, S, SHM, SP>
297291
where
298292
SHM: ShMem,
299-
SP: ShMemProvider<ShMem = SHM>,
300293
{
301294
/// Calling this function will tell the llmp broker that this client is exiting
302295
/// This should be called from the restarter not from the actual fuzzer client
@@ -330,7 +323,12 @@ where
330323
log::debug!("Asking he broker to be disconnected");
331324
Ok(())
332325
}
326+
}
333327

328+
impl<EMH, I, S, SHM, SP> LlmpEventManager<EMH, I, S, SHM, SP>
329+
where
330+
SHM: ShMem,
331+
{
334332
/// Describe the client event manager's LLMP parts in a restorable fashion
335333
pub fn describe(&self) -> Result<LlmpClientDescription, Error> {
336334
self.llmp.describe()
@@ -347,7 +345,6 @@ where
347345
impl<EMH, I, S, SHM, SP> LlmpEventManager<EMH, I, S, SHM, SP>
348346
where
349347
SHM: ShMem,
350-
SP: ShMemProvider<ShMem = SHM>,
351348
{
352349
// Handle arriving events in the client
353350
fn handle_in_client<E, Z>(
@@ -516,23 +513,26 @@ impl<EMH, I, S, SHM, SP> EventRestarter<S> for LlmpEventManager<EMH, I, S, SHM,
516513
where
517514
S: HasCurrentStageId,
518515
SHM: ShMem,
519-
SP: ShMemProvider<ShMem = SHM>,
520516
{
521517
fn on_restart(&mut self, state: &mut S) -> Result<(), Error> {
522518
std_on_restart(self, state)
523519
}
524520
}
525521

526-
impl<EMH, I, S, SHM, SP> ManagerExit for LlmpEventManager<EMH, I, S, SHM, SP>
522+
impl<EMH, I, S, SHM, SP> SendExiting for LlmpEventManager<EMH, I, S, SHM, SP>
527523
where
528-
SHM: ShMem,
529524
SHM: ShMem,
530525
SP: ShMemProvider<ShMem = SHM>,
531526
{
532527
fn send_exiting(&mut self) -> Result<(), Error> {
533528
self.llmp.sender_mut().send_exiting()
534529
}
530+
}
535531

532+
impl<EMH, I, S, SHM, SP> AwaitRestartSafe for LlmpEventManager<EMH, I, S, SHM, SP>
533+
where
534+
SHM: ShMem,
535+
{
536536
/// The LLMP client needs to wait until a broker has mapped all pages before shutting down.
537537
/// Otherwise, the OS may already have removed the shared maps.
538538
fn await_restart_safe(&mut self) {
@@ -621,7 +621,6 @@ where
621621
impl<EMH, I, S, SHM, SP> HasEventManagerId for LlmpEventManager<EMH, I, S, SHM, SP>
622622
where
623623
SHM: ShMem,
624-
SP: ShMemProvider<ShMem = SHM>,
625624
{
626625
/// Gets the id assigned to this staterestorer.
627626
fn mgr_id(&self) -> EventManagerId {

libafl/src/events/llmp/restarting.rs

+12-10
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ use crate::{
3535
common::HasMetadata,
3636
events::{
3737
launcher::ClientDescription, serialize_observers_adaptive, std_maybe_report_progress,
38-
std_report_progress, AdaptiveSerializer, CanSerializeObserver, Event, EventConfig,
39-
EventFirer, EventManagerHooksTuple, EventManagerId, EventProcessor, EventRestarter,
40-
HasEventManagerId, LlmpEventManager, LlmpShouldSaveState, ManagerExit, ProgressReporter,
41-
StdLlmpEventHook,
38+
std_report_progress, AdaptiveSerializer, AwaitRestartSafe, CanSerializeObserver, Event,
39+
EventConfig, EventFirer, EventManagerHooksTuple, EventManagerId, EventProcessor,
40+
EventRestarter, HasEventManagerId, LlmpEventManager, LlmpShouldSaveState, ProgressReporter,
41+
SendExiting, StdLlmpEventHook,
4242
},
4343
executors::HasObservers,
4444
fuzzer::{EvaluatorObservers, ExecutionProcessor},
@@ -58,7 +58,6 @@ use crate::{
5858
pub struct LlmpRestartingEventManager<EMH, I, S, SHM, SP>
5959
where
6060
SHM: ShMem,
61-
SP: ShMemProvider<ShMem = SHM>,
6261
{
6362
/// The embedded LLMP event manager
6463
llmp_mgr: LlmpEventManager<EMH, I, S, SHM, SP>,
@@ -71,7 +70,6 @@ where
7170
impl<EMH, I, S, SHM, SP> AdaptiveSerializer for LlmpRestartingEventManager<EMH, I, S, SHM, SP>
7271
where
7372
SHM: ShMem,
74-
SP: ShMemProvider<ShMem = SHM>,
7573
{
7674
fn serialization_time(&self) -> Duration {
7775
self.llmp_mgr.serialization_time()
@@ -151,9 +149,8 @@ where
151149
impl<EMH, I, OT, S, SHM, SP> CanSerializeObserver<OT>
152150
for LlmpRestartingEventManager<EMH, I, S, SHM, SP>
153151
where
154-
OT: Serialize + MatchNameRef,
152+
OT: MatchNameRef + Serialize,
155153
SHM: ShMem,
156-
SP: ShMemProvider<ShMem = SHM>,
157154
{
158155
fn serialize_observers(&mut self, observers: &OT) -> Result<Option<Vec<u8>>, Error> {
159156
serialize_observers_adaptive::<Self, OT>(self, observers, 2, 80)
@@ -187,7 +184,7 @@ where
187184
}
188185
}
189186

190-
impl<EMH, I, S, SHM, SP> ManagerExit for LlmpRestartingEventManager<EMH, I, S, SHM, SP>
187+
impl<EMH, I, S, SHM, SP> SendExiting for LlmpRestartingEventManager<EMH, I, S, SHM, SP>
191188
where
192189
SHM: ShMem,
193190
SP: ShMemProvider<ShMem = SHM>,
@@ -198,7 +195,12 @@ where
198195
// This way, the broker can clean up the pages, and eventually exit.
199196
self.llmp_mgr.send_exiting()
200197
}
198+
}
201199

200+
impl<EMH, I, S, SHM, SP> AwaitRestartSafe for LlmpRestartingEventManager<EMH, I, S, SHM, SP>
201+
where
202+
SHM: ShMem,
203+
{
202204
/// The llmp client needs to wait until a broker mapped all pages, before shutting down.
203205
/// Otherwise, the OS may already have removed the shared maps,
204206
#[inline]
@@ -331,9 +333,9 @@ pub fn setup_restarting_mgr_std<I, MT, S>(
331333
Error,
332334
>
333335
where
336+
I: DeserializeOwned,
334337
MT: Monitor + Clone,
335338
S: Serialize + DeserializeOwned,
336-
I: DeserializeOwned,
337339
{
338340
RestartingMgr::builder()
339341
.shmem_provider(StdShMemProvider::new()?)

0 commit comments

Comments
 (0)