Fix IfElseRuntime for Frida: ensure both runtime branches initialize to restore ASAN #3554
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.
Description
This PR fixes issue #3460, where
IfElseRuntimecaused Frida ASAN instrumentation to stop working.Root Cause
IfElseRuntimeonly executedinit()anddeinit()for the selected branch.However, Frida-based runtimes — especially
AsanRuntime— rely oninit_all()to register:When
asanwas wrapped insideIfElseRuntime, these hooks were never registered, causing ASAN to silently fail.Fix
This PR updates the implementation so that:
init()callsinit_all()for bothif_runtimesandelse_runtimesdeinit()callsdeinit_all()for both runtime branchespre_exec()andpost_exec()remain conditional (intended behavior).This ensures that all runtimes correctly register their instrumentation during initialization, even when wrapped in
IfElseRuntime.Result
This now works exactly as expected:
And behaves identically to using
asandirectly, restoring ASAN crash detection and shadow checks.This fully resolves #3460.
Checklist
./scripts/precommit.shand addressed all commentsIfElseRuntimeimplementation