diff options
author | Jukka Kaartinen <jukka.kaartinen@unikie.com> | 2020-02-07 12:51:54 +0200 |
---|---|---|
committer | Shuah Khan <skhan@linuxfoundation.org> | 2020-05-12 16:11:39 -0600 |
commit | 119d09e4764c87e4f4680df9d05a8eb141cd633e (patch) | |
tree | 3dfb6f642f4164d5f46b6d6f7054a8f2a3cc4fcd | |
parent | e20dfe47d05f05ce21a41761e154a826b4dbcf21 (diff) | |
download | linux-arts-119d09e4764c87e4f4680df9d05a8eb141cd633e.tar.gz |
Add script to collect reprogs from file system
Update from https://github.com/dvyukov/syzkaller-repros
Signed-off-by: Jukka Kaartinen <jukka.kaartinen@unikie.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
-rw-r--r-- | syzkaller-repros/.gitignore | 1 | ||||
-rw-r--r-- | syzkaller-repros/README.md | 2 | ||||
-rwxr-xr-x | syzkaller-repros/collect_reprogs.py | 42 |
3 files changed, 45 insertions, 0 deletions
diff --git a/syzkaller-repros/.gitignore b/syzkaller-repros/.gitignore index b72f9be..4eb94bd 100644 --- a/syzkaller-repros/.gitignore +++ b/syzkaller-repros/.gitignore @@ -1,2 +1,3 @@ *~ *.swp +bin/
\ No newline at end of file diff --git a/syzkaller-repros/README.md b/syzkaller-repros/README.md index 3adcf53..6694093 100644 --- a/syzkaller-repros/README.md +++ b/syzkaller-repros/README.md @@ -6,6 +6,8 @@ A version of these reproducers also exists in [linux-arts](https://git.kernel.or Obtained from [syzbot](https://github.com/google/syzkaller/blob/master/docs/syzbot.md) using [syz-reprolist](https://github.com/google/syzkaller/blob/64612bfd3c83d7246467cd9731f01a36b6331598/tools/syz-reprolist/reprolist.go). +To collect C reproducers from syz-manager workdir, run [./collect_reprogs.py /path/to/manager/workdir](collect_reprogs.py). + To build run [build.sh](build.sh).\ To run run [run.sh](run.sh). diff --git a/syzkaller-repros/collect_reprogs.py b/syzkaller-repros/collect_reprogs.py new file mode 100755 index 0000000..5f2fdb9 --- /dev/null +++ b/syzkaller-repros/collect_reprogs.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 + +import argparse +import glob +import filecmp +import logging +import os +import shutil + + +def main(): + parser = argparse.ArgumentParser(description='Collect C reproducers programs from subdirs.') + parser.add_argument('directory', type=str, + help='Folder to be searched for reprogs.') + parser.add_argument('--output', '-o', required=False, default="./linux", + help='Output folder where to store. default ./linux') + args = parser.parse_args() + + workdir = os.path.join(args.directory, "") + logging.debug(workdir) + + for file in glob.iglob(workdir + '**/*.cprog', recursive=True): + logging.debug(file) + file_path = file.split('/') + has_id_index = len(file_path) - 2 + + candidate_name = file_path[has_id_index] + candidate_file_name = os.path.join(args.output, candidate_name + ".c") + + if os.path.exists(candidate_file_name): + logging.info("Reproducer: " + file + " already exists.") + continue + + logging.info("Added new reprog: " + candidate_file_name) + if not os.path.exists(args.output): + os.mkdir(args.output) + shutil.copy(file, candidate_file_name) + + +if __name__ == "__main__": + logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO) + main() |