aboutsummaryrefslogtreecommitdiffstats
path: root/executor/executor.cc
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2021-12-13 11:23:54 +0000
committerAleksandr Nogikh <wp32pw@gmail.com>2021-12-13 12:51:54 +0100
commit19ccaabc471a7b82a04f9156a27335774e320779 (patch)
tree34685f10f3452f44b29331eb1bfc33f0ea8b8720 /executor/executor.cc
parent0304899bb860b5ee330cec0a52922a52090eb5d9 (diff)
executor: ignore async flag in the non-threaded mode
pkg/repro tries to clear the Threaded flag during repro simplification, so it's easier just to ignore the remaining async flags in that case - they won't be in the C repro either. Add a test to pkg/ipc to verify the new behavior.
Diffstat (limited to 'executor/executor.cc')
-rw-r--r--executor/executor.cc6
1 files changed, 3 insertions, 3 deletions
diff --git a/executor/executor.cc b/executor/executor.cc
index c0e2e6625..73f6053ee 100644
--- a/executor/executor.cc
+++ b/executor/executor.cc
@@ -871,10 +871,10 @@ void execute_one()
thread_t* th = schedule_call(call_index++, call_num, copyout_index,
num_args, args, input_pos, call_props);
- if (call_props.async) {
- if (!flag_threaded)
- fail("SYZFAIL: unable to do an async call in a non-threaded mode");
+ if (call_props.async && flag_threaded) {
// Don't wait for an async call to finish. We'll wait at the end.
+ // If we're not in the threaded mode, just ignore the async flag - during repro simplification syzkaller
+ // will anyway try to make it non-threaded.
} else if (flag_threaded) {
// Wait for call completion.
uint64 timeout_ms = syscall_timeout_ms + call->attrs.timeout * slowdown_scale;