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