aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJukka Kaartinen <jukka.kaartinen@unikie.com>2020-02-07 12:51:54 +0200
committerShuah Khan <skhan@linuxfoundation.org>2020-05-12 16:11:39 -0600
commit119d09e4764c87e4f4680df9d05a8eb141cd633e (patch)
tree3dfb6f642f4164d5f46b6d6f7054a8f2a3cc4fcd
parente20dfe47d05f05ce21a41761e154a826b4dbcf21 (diff)
downloadlinux-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/.gitignore1
-rw-r--r--syzkaller-repros/README.md2
-rwxr-xr-xsyzkaller-repros/collect_reprogs.py42
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()