tweaks the Taint Engine and partially rewrites the Taint GC #1244
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.
This PR resolves #1076 and enables better handling of the may
analysis (analysis that require analyzing all paths).
The Taint Engine now tracks taint objects globally across machines,
unlike previously when each machine had its own set of taint objects,
and taint object identifier was specific to a machine. This enables a
new implementation of the Taint Garbage Collection and refinement of
the taint-finalize observation. The GC is now folding over all
machines to check if the taint is unreachable in all machines. The
observation is triggered with live=true if the taint becomes
unreachable in the current machine but is still reachable in others,
and with live=false, when it comes out of existence in all machines,
or when the system terminates. This approach enables both may and must
analysis as we can both track liveness per machine and per
system (i.e., for all paths up to the linearity constraint).
The garbage collector is now run each machine instruction to prevent
undesired interference with other observations.
This PR also changes the semantics of the sanitize operation. Now,
when an object is sanitized, it is no longer tracked and removed from
the tracker (i.e., detached from all values and addresses). Before
that it was only detached from the selected value.