[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 05/11] fuzz: don't leave orphan llvm-symbolizers around
From: |
Alexander Bulekov |
Subject: |
[PULL 05/11] fuzz: don't leave orphan llvm-symbolizers around |
Date: |
Mon, 15 Mar 2021 14:38:06 -0400 |
I noticed that with a sufficiently small timeout, the fuzzer fork-server
sometimes locks up. On closer inspection, the issue appeared to be
caused by entering our SIGALRM handler, while libfuzzer is in it's crash
handlers. Because libfuzzer relies on pipe communication with an
external child process to print out stack-traces, we shouldn't exit
early, and leave an orphan child. Check for children in the SIGALRM
handler to avoid this issue.
Signed-off-by: Alexander Bulekov <alxndr@bu.edu>
Acked-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Darren Kenny <darren.kenny@oracle.com>
---
tests/qtest/fuzz/generic_fuzz.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/tests/qtest/fuzz/generic_fuzz.c b/tests/qtest/fuzz/generic_fuzz.c
index ee8c17a04c..387ae2020a 100644
--- a/tests/qtest/fuzz/generic_fuzz.c
+++ b/tests/qtest/fuzz/generic_fuzz.c
@@ -583,6 +583,21 @@ static void handle_timeout(int sig)
fprintf(stderr, "[Timeout]\n");
fflush(stderr);
}
+
+ /*
+ * If there is a crash, libfuzzer/ASAN forks a child to run an
+ * "llvm-symbolizer" process for printing out a pretty stacktrace. It
+ * communicates with this child using a pipe. If we timeout+Exit, while
+ * libfuzzer is still communicating with the llvm-symbolizer child, we will
+ * be left with an orphan llvm-symbolizer process. Sometimes, this appears
+ * to lead to a deadlock in the forkserver. Use waitpid to check if there
+ * are any waitable children. If so, exit out of the signal-handler, and
+ * let libfuzzer finish communicating with the child, and exit, on its own.
+ */
+ if (waitpid(-1, NULL, WNOHANG) == 0) {
+ return;
+ }
+
_Exit(0);
}
--
2.27.0
- [PULL 00/11] 20210315 patches, Alexander Bulekov, 2021/03/15
- [PULL 02/11] tests/qtest: Only run fuzz-virtio-scsi when virtio-scsi is available, Alexander Bulekov, 2021/03/15
- [PULL 01/11] tests/qtest: Only run fuzz-megasas-test if megasas device is available, Alexander Bulekov, 2021/03/15
- [PULL 08/11] fuzz: add a am53c974 generic-fuzzer config, Alexander Bulekov, 2021/03/15
- [PULL 07/11] fuzz: add instructions for building reproducers, Alexander Bulekov, 2021/03/15
- [PULL 03/11] MAINTAINERS: Cover fuzzer reproducer tests within 'Device Fuzzing', Alexander Bulekov, 2021/03/15
- [PULL 04/11] fuzz: fix the pro100 generic-fuzzer config, Alexander Bulekov, 2021/03/15
- [PULL 06/11] fuzz: add a script to build reproducers, Alexander Bulekov, 2021/03/15
- [PULL 05/11] fuzz: don't leave orphan llvm-symbolizers around,
Alexander Bulekov <=
- [PULL 09/11] memory: add a sparse memory device for fuzzing, Alexander Bulekov, 2021/03/15
- [PULL 10/11] fuzz: configure a sparse-mem device, by default, Alexander Bulekov, 2021/03/15
- [PULL 11/11] fuzz: move some DMA hooks, Alexander Bulekov, 2021/03/15
- Re: [PULL 00/11] 20210315 patches, Paolo Bonzini, 2021/03/16