summaryrefslogtreecommitdiff
path: root/fuzzing
diff options
context:
space:
mode:
Diffstat (limited to 'fuzzing')
-rw-r--r--fuzzing/Android.bp1
-rw-r--r--fuzzing/corpus/crash-a5b94d95681291f3057eea7f0233c8f1529b2f59bin0 -> 1369 bytes
-rw-r--r--fuzzing/corpus/hardy-octopusbin0 -> 1171 bytes
-rw-r--r--fuzzing/corpus/header-truncatedbin0 -> 40 bytes
-rw-r--r--fuzzing/corpus/header-v-1bin0 -> 40 bytes
-rw-r--r--fuzzing/corpus/header-v0bin0 -> 40 bytes
-rw-r--r--fuzzing/corpus/meson-g12a-sei510-android.dtbbin0 -> 1363 bytes
-rw-r--r--fuzzing/corpus/oob_by_onebin0 -> 256 bytes
-rw-r--r--fuzzing/libfdt_fuzzer.c40
9 files changed, 41 insertions, 0 deletions
diff --git a/fuzzing/Android.bp b/fuzzing/Android.bp
index 5c22cb4..857c611 100644
--- a/fuzzing/Android.bp
+++ b/fuzzing/Android.bp
@@ -19,3 +19,4 @@ cc_fuzz {
},
host_supported: true,
}
+
diff --git a/fuzzing/corpus/crash-a5b94d95681291f3057eea7f0233c8f1529b2f59 b/fuzzing/corpus/crash-a5b94d95681291f3057eea7f0233c8f1529b2f59
new file mode 100644
index 0000000..dbab42e
--- /dev/null
+++ b/fuzzing/corpus/crash-a5b94d95681291f3057eea7f0233c8f1529b2f59
Binary files differ
diff --git a/fuzzing/corpus/hardy-octopus b/fuzzing/corpus/hardy-octopus
new file mode 100644
index 0000000..81615e9
--- /dev/null
+++ b/fuzzing/corpus/hardy-octopus
Binary files differ
diff --git a/fuzzing/corpus/header-truncated b/fuzzing/corpus/header-truncated
new file mode 100644
index 0000000..1db29d8
--- /dev/null
+++ b/fuzzing/corpus/header-truncated
Binary files differ
diff --git a/fuzzing/corpus/header-v-1 b/fuzzing/corpus/header-v-1
new file mode 100644
index 0000000..a773d07
--- /dev/null
+++ b/fuzzing/corpus/header-v-1
Binary files differ
diff --git a/fuzzing/corpus/header-v0 b/fuzzing/corpus/header-v0
new file mode 100644
index 0000000..f22ec6a
--- /dev/null
+++ b/fuzzing/corpus/header-v0
Binary files differ
diff --git a/fuzzing/corpus/meson-g12a-sei510-android.dtb b/fuzzing/corpus/meson-g12a-sei510-android.dtb
new file mode 100644
index 0000000..317175d
--- /dev/null
+++ b/fuzzing/corpus/meson-g12a-sei510-android.dtb
Binary files differ
diff --git a/fuzzing/corpus/oob_by_one b/fuzzing/corpus/oob_by_one
new file mode 100644
index 0000000..216523c
--- /dev/null
+++ b/fuzzing/corpus/oob_by_one
Binary files differ
diff --git a/fuzzing/libfdt_fuzzer.c b/fuzzing/libfdt_fuzzer.c
index 89fe3c2..48b50aa 100644
--- a/fuzzing/libfdt_fuzzer.c
+++ b/fuzzing/libfdt_fuzzer.c
@@ -59,6 +59,19 @@ static bool phandle_is_valid(uint32_t phandle) {
return phandle != 0 && phandle != UINT32_MAX;
}
+static void walk_node_properties(const void *device_tree, int node) {
+ int property, len = 0;
+
+ fdt_for_each_property_offset(property, device_tree, node) {
+ const struct fdt_property *prop = fdt_get_property_by_offset(device_tree,
+ property, &len);
+ if (!prop)
+ continue;
+ check_mem(prop->data, fdt32_to_cpu(prop->len));
+ }
+}
+
+
static void walk_device_tree(const void *device_tree, int parent_node) {
int len = 0;
const char *node_name = fdt_get_name(device_tree, parent_node, &len);
@@ -72,6 +85,8 @@ static void walk_device_tree(const void *device_tree, int parent_node) {
assert(node >= 0); // it should at least find parent_node
}
+ walk_node_properties(device_tree, parent_node);
+
// recursively walk the node's children
for (int node = fdt_first_subnode(device_tree, parent_node); node >= 0;
node = fdt_next_subnode(device_tree, node)) {
@@ -92,3 +107,28 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
return 0;
}
+
+#ifdef AFL_STANDALONE
+/* Entry point suitable for direct afl-fuzz invocation */
+int main(int argc, char *argv[]) {
+ uint8_t data[1024 * 1024];
+
+ if (argc != 2) {
+ fprintf(stderr, "missing argument\n");
+ return EXIT_FAILURE;
+ }
+
+ FILE *f = fopen(argv[1], "r");
+ if (!f) {
+ perror("fopen() failed");
+ return EXIT_FAILURE;
+ }
+
+ size_t size = fread(data, 1, sizeof(data), f);
+
+ fclose(f);
+
+ return LLVMFuzzerTestOneInput(data, size);
+}
+#endif
+