From d0405298b24db0e2a6b2abfdc8c7e5ebbe49d1a0 Mon Sep 17 00:00:00 2001 From: Hrutvik Kanabar Date: Tue, 25 Oct 2022 10:13:51 +0000 Subject: prog, pkg/compiler: add `BufferCompressed` buffer type & `compressed_image` builtin Create the `BufferCompressed` kind of `BufferType`, which will be used to represent compressed data. Create the corresponding `compressed_image` syzlang builtin, which is backed by `BufferCompressed`. For now, no syscalls use this feature - this will be introduced in future commits. We have to be careful to decompress the data before mutating, and re-compress before storing. We make sure that any deserialised `BufferCompressed` data is valid too. `BufferCompressed` arguments are mutated using a generic heatmap. In future, we could add variants of `BufferCompressed` or populate the `BufferType` sub-kind, using it to choose different kinds of heatmap for different uncompressed data formats. Various operations on compressed data must be forbidden, so we check for `BufferCompressed` in key places. We also have to ensure `compressed_image` can only be used in syscalls that are marked `no_{generate,minimize}`. Therefore, we add a generic compiler check which allows type descriptions to require attributes on the syscalls which use them. --- prog/hints.go | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'prog/hints.go') diff --git a/prog/hints.go b/prog/hints.go index c66242357..ef7ee17a5 100644 --- a/prog/hints.go +++ b/prog/hints.go @@ -109,6 +109,11 @@ func generateHints(compMap CompMap, arg Arg, exec func()) { // (and filter out file names). return } + case BufferCompressed: + // We can reconsider this in the future, e.g. by decompressing, applying + // hints, then re-compressing. We will need to ensure this doesn't + // produce too many mutants given the current handling of buffers. + return } } -- cgit mrf-deployment