executor: allocate output region for individual programs
executor: allocate output region for individual programs

The amount of virtual memory affects the speed of forking/exiting. As in
most cases we do it for each executed program, the difference may be
substantial.

We don't need 16MB of output data for each execution (in fact,
experiments have shown that we never cross even 8MB on Linux). But
reducing that cap in more than 2 times is a pretty bold decision, and
perhaps it's better to just make the allocation process smarter.

Mmap the output region depending on the exact amount of memory needed
for a specific program. E.g. if comparisons are collected, the expected
amount of output is maximal. If we only collect signals, the output
is minimal.

Mmap the minimally required region in the parent and then re-mmap it in
the forked child if it turns out that a higher amount of memory is
needed.

xairy/syzkaller,google/syzkaller,google/syzkaller,xairy/syzkaller,google/syzkaller,xairy/syzkaller,google/syzkaller,xairy/syzkaller,google/syzkaller,xairy/syzkaller,xairy/syzkaller,xairy/syzkaller,google/syzkaller,google/syzkaller