Message ID | 20200129053357.27454-13-alxndr@bu.edu |
---|---|
State | New |
Headers | show |
Series | [v8,01/21] softmmu: split off vl.c:main() into main.c | expand |
On Wed, Jan 29, 2020 at 05:34:21AM +0000, Bulekov, Alexander wrote: >Ram blocks were marked MADV_DONTFORK breaking fuzzing-tests which >execute each test-input in a forked process. > >Signed-off-by: Alexander Bulekov <alxndr@bu.edu> >Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Darren Kenny <darren.kenny@oracle.com> >--- > exec.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > >diff --git a/exec.c b/exec.c >index d4b769d0d4..99368f175b 100644 >--- a/exec.c >+++ b/exec.c >@@ -35,6 +35,7 @@ > #include "sysemu/kvm.h" > #include "sysemu/sysemu.h" > #include "sysemu/tcg.h" >+#include "sysemu/qtest.h" > #include "qemu/timer.h" > #include "qemu/config-file.h" > #include "qemu/error-report.h" >@@ -2306,8 +2307,15 @@ static void ram_block_add(RAMBlock *new_block, Error **errp, bool shared) > if (new_block->host) { > qemu_ram_setup_dump(new_block->host, new_block->max_length); > qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_HUGEPAGE); >- /* MADV_DONTFORK is also needed by KVM in absence of synchronous MMU */ >- qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_DONTFORK); >+ /* >+ * MADV_DONTFORK is also needed by KVM in absence of synchronous MMU >+ * Configure it unless the machine is a qtest server, in which case >+ * KVM is not used and it may be forked (eg for fuzzing purposes). >+ */ >+ if (!qtest_enabled()) { >+ qemu_madvise(new_block->host, new_block->max_length, >+ QEMU_MADV_DONTFORK); >+ } > ram_block_notify_add(new_block->host, new_block->max_length); > } > } >-- >2.23.0 > >
diff --git a/exec.c b/exec.c index d4b769d0d4..99368f175b 100644 --- a/exec.c +++ b/exec.c @@ -35,6 +35,7 @@ #include "sysemu/kvm.h" #include "sysemu/sysemu.h" #include "sysemu/tcg.h" +#include "sysemu/qtest.h" #include "qemu/timer.h" #include "qemu/config-file.h" #include "qemu/error-report.h" @@ -2306,8 +2307,15 @@ static void ram_block_add(RAMBlock *new_block, Error **errp, bool shared) if (new_block->host) { qemu_ram_setup_dump(new_block->host, new_block->max_length); qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_HUGEPAGE); - /* MADV_DONTFORK is also needed by KVM in absence of synchronous MMU */ - qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_DONTFORK); + /* + * MADV_DONTFORK is also needed by KVM in absence of synchronous MMU + * Configure it unless the machine is a qtest server, in which case + * KVM is not used and it may be forked (eg for fuzzing purposes). + */ + if (!qtest_enabled()) { + qemu_madvise(new_block->host, new_block->max_length, + QEMU_MADV_DONTFORK); + } ram_block_notify_add(new_block->host, new_block->max_length); } }