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>
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 @@
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()