Use PERF_FLAG_FD_CLOEXEC with perf_event_open #1165
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Use PERF_FLAG_FD_CLOEXEC with perf_event_open
If the profiled process spawns another process with execve, the child process may be signalled before the signal handler is installed, which will terminate the process.
This flag was introduced in kernel 3.14, so we just don't use it at runtime in that case.
We don't really need the flag in the check/supported calls, but since that's what we'll be using for the real call it may be helpful for catching unexpected errors.
Related issues
#1164
How has this been tested?
Confirmed that this fixes the issue on my kernel 5.10 host with
LD_PRELOAD=libasyncProfiler.so ASPROF_COMMAND=start cargo --version(when installed viarustup,cargohas an indirection which usesexecveand triggers this issue).I have not yet tested on other kernels, especially building and running on <3.14, since I don't have a 3.14 host at the moment. I can do that next week, if you don't also have convenient access.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.