Skip to content

Add LibAFL's Low Level Message Passing #6148

@Rot127

Description

@Rot127

The LibAFL folks implemented a really nice message passing mechanism with very good performance (shared memory + non-blocking).

This might come in handy when we implement analysis tasks which can run independently as processes.

The data structure seems simply a shared memory map with and index into it. The writer process can add data to the shared mem and increment the index.
The reader process compares periodically the index against its last read one. If unequal, it checks the latest addition to the memory.

If the shared memory is full, the Writer process allocates a shared memory map, places an end of page (EOP) message which gives instructions for the new map.

The performance of it is definitely proven to work well on plenty of cores (80):

https://media.ccc.de/v/37c3-12102-fuzz_everything_everywhere_all_at_once/oembed
(relevant part starts somewhere around 20min)

https://github.com/AFLplusplus/LibAFL/tree/main/crates/ll_mp

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions