Skip to content

A fast & easy to maintain differential fuzzer for Ethereum consensus layer clients

License

Notifications You must be signed in to change notification settings

jtraglia/eth-cl-fuzz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

eth-cl-fuzz

A fast & easy to maintain differential fuzzer for Ethereum consensus layer clients.

System configuration

This fuzzer works with Linux and macOS, not Windows. This is because it uses Unix Domain Sockets and Shared Memory segments for interprocess communication.

First, two limits must be raised to support 100 MiB segements.

  • shmmax -- the max shared memory segment size.
  • shmall -- total shared memory size in pages.

Linux

sudo sysctl -w kernel.shmmax=104857600
sudo sysctl -w kernel.shmall=256000

macOS

sudo sysctl -w kern.sysv.shmmax=104857600
sudo sysctl -w kern.sysv.shmall=256000

Driver

The driver is the central component that communicates with processors (clients).

Some of the driver's responsibilities:

  • Create unix socket & shared memory segments.
  • Handle processor registrations & disconnections.
  • Generate random inputs to share with processors.
  • Check that processor responses are the same.

To run the driver:

cd driver
go run .

Processors

A processor is the component which takes some input, processes it, and returns it to the driver. These must be run on the same system as the driver, but can be written in any programming language.

Golang

cd processors/golang
go run .

Java

cd processors/java
make

Rust

cd processors/rust
cargo run

About

A fast & easy to maintain differential fuzzer for Ethereum consensus layer clients

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published