facebookexperimental / facebookexperimental/hermit

Adding syscall semantics fuzzing -- beyond thread interleavings

Open
#34 3 comments 2 reactions 0 assignees View on GitHub
enhancement
Dominant language
Rust
Stars
1.4k
Forks
50
PR merge metrics
No merged PRs in 30d

Description

In its initial release, `hermit run --chaos` is focused on exploring different thread interleavings, and of course it also provides control over RNG. But thread interleavings & RNG are not the only sources of nondeterminism in Linux.

## This issue: Exercising other syscall's nondeterminism

There are many places where the Linux syscall semantics expose nondeterministic outcomes. Each of these is a candidate for fuzzing user space (i.e. acting as a Fuzzy Linux by misbehaving and exercising). This is a task to add fuzzing of these system calls as well, for a more complete and aggressive `--chaos` mode.

Here is a check list of different syscalls we plan to make fuzzy.

- [ ] read/write: how many bytes of IO are performed
- [x] futex: which threads to wake on futex_wake (--fuzz-futexes)
- [ ] mmap: address space returned (e.g. ASLR)
- [ ] all syscalls: returning extra EINTRs or other error conditions

N.B. All of them will be controlled by the same source of randomness (`--fuzz-seed`), which is separate from `--sched-seed` and `--rng-seed`, allowing these dimensions to be controlled individually. We could go further and separate seeds for each of the above if we liked.

## Out of scope

Also, there are related topics --- additional dimensions worth fuzzing in their own right for correctness stress testing -- that are beyond the scope of this issue:

- adding network delay
- dropping network connections

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.