[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v2 01/17] fuzz: Move initialization from main to
From: |
Oleinik, Alexander |
Subject: |
[Qemu-devel] [RFC PATCH v2 01/17] fuzz: Move initialization from main to qemu_init |
Date: |
Mon, 5 Aug 2019 07:11:02 +0000 |
Using this, we avoid needing a special case to break out of main(),
early, when initializing the fuzzer, as we can just call qemu_init.
There is still a #define around main(), since it otherwise conflicts
with the libfuzzer main().
Signed-off-by: Alexander Oleinik <address@hidden>
---
include/sysemu/sysemu.h | 5 +++++
vl.c | 25 +++++++++++++++++++++++--
2 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index 984c439ac9..a63d5ccce3 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -184,6 +184,8 @@ QemuOpts *qemu_get_machine_opts(void);
bool defaults_enabled(void);
+int qemu_init(int argc, char **argv, char **envp);
+
extern QemuOptsList qemu_legacy_drive_opts;
extern QemuOptsList qemu_common_drive_opts;
extern QemuOptsList qemu_drive_opts;
@@ -197,4 +199,7 @@ extern QemuOptsList qemu_global_opts;
extern QemuOptsList qemu_mon_opts;
extern QemuOptsList qemu_semihosting_config_opts;
+#ifdef CONFIG_FUZZ
+int real_main(int argc, char **argv, char **envp);
+#endif
#endif
diff --git a/vl.c b/vl.c
index 130a389712..914bb9b2de 100644
--- a/vl.c
+++ b/vl.c
@@ -130,6 +130,10 @@ int main(int argc, char **argv)
#include "sysemu/iothread.h"
#include "qemu/guest-random.h"
+#ifdef CONFIG_FUZZ
+#include "tests/libqtest.h"
+#endif
+
#define MAX_VIRTIO_CONSOLES 1
static const char *data_dir[16];
@@ -2854,7 +2858,7 @@ static void user_register_global_props(void)
global_init_func, NULL, NULL);
}
-int main(int argc, char **argv, char **envp)
+int qemu_init(int argc, char **argv, char **envp)
{
int i;
int snapshot, linux_boot;
@@ -4453,7 +4457,7 @@ int main(int argc, char **argv, char **envp)
if (vmstate_dump_file) {
/* dump and exit */
dump_vmstate_json_to_file(vmstate_dump_file);
- return 0;
+ exit(0);
}
if (incoming) {
@@ -4470,6 +4474,23 @@ int main(int argc, char **argv, char **envp)
accel_setup_post(current_machine);
os_setup_post();
+ return 0;
+}
+#ifdef CONFIG_FUZZ
+/*
+ * Without this, the compiler complains about all of the unused
+ * cleanup and shutdown() functions
+ */
+int real_main(int argc, char **argv, char **envp)
+#else
+int main(int argc, char **argv, char **envp)
+#endif
+{
+ int ret = qemu_init(argc, argv, envp);
+ if (ret != 0) {
+ return ret;
+ }
+
main_loop();
gdbserver_cleanup();
--
2.20.1
- [Qemu-devel] [RFC PATCH v2 00/17] Add virtual device fuzzing support, Oleinik, Alexander, 2019/08/05
- [Qemu-devel] [RFC PATCH v2 01/17] fuzz: Move initialization from main to qemu_init,
Oleinik, Alexander <=
- [Qemu-devel] [RFC PATCH v2 02/17] fuzz: Add fuzzer configure options, Oleinik, Alexander, 2019/08/05
- [Qemu-devel] [RFC PATCH v2 03/17] fuzz: Keep memory mapped for fork-based fuzzer, Oleinik, Alexander, 2019/08/05
- [Qemu-devel] [RFC PATCH v2 04/17] fuzz: Skip modules that were already initialized, Oleinik, Alexander, 2019/08/05