Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Performance Tweaks #195

Merged
merged 2 commits into from
Jan 31, 2024
Merged

Performance Tweaks #195

merged 2 commits into from
Jan 31, 2024

Conversation

leeN
Copy link
Collaborator

@leeN leeN commented Jan 29, 2024

After a bit of profiling, I noticed that creating TaintOperations is very expensive. In hindsight, this is obvious, as we have to walk the stack to get the location, etc.
We did, however, create a lot of TaintOperation objects without ever using them, i.e., due to the string itself being untainted.

This change does add explicit checks where possible (in some cases, we create the TaintOperation object in advance due to GC issues; this is not easily hidden behind a check), so TaintOperations are only created if the string is actually tainted, i.e., we use the TaintOperation to extend the TaintFlow.

I tested this on Ares6, and with the proposed changes, the average runtime goes from 70.04ms to 66.9ms, mainly due to differences in the ML benchmark.

After a bit of profiling I noticed that creating TaintOperations is very
expensive. In hindsight this is obvious, as we have to walk the stack
to get the location etc.
We did however create a lot of TaintOperation objects without ever using
them, i.e., due to the string itself being untainted.

This change does add explicit checks where possible (in some cases we
create the TaintOperation object in advance due to GC issues, this is
not easily hidden behind a check) so TaintOperations are only created if
the string is actually tainted, i.e., we use the TaintOperation to
extend the TaintFlow.
@tmbrbr tmbrbr self-requested a review January 29, 2024 11:15
@tmbrbr
Copy link
Contributor

tmbrbr commented Jan 30, 2024

Hi @leeN, there are two failing tests, could you take a look at them please?

@leeN
Copy link
Collaborator Author

leeN commented Jan 30, 2024

Ah, yes, sorry, I already had a look there and will fix them tomorrow. They used to fail with foxhound in the past, so we changed them to make them pass. This PR unbreaks them again. :)

These tests used to be broken in Foxhound and were fixed in SAP#151.

This fix was intended to mask the fact that these tests were picking up
and failing due to foxhound induced side effects on untainted strings.

As we call toString() on objects during TaintOperation creation, the
usage of Foxhound can have visible side effects. This is shown here as
these tests count how often toString() is called on an object.

Now, in this branch we do not create any TaintOperation objects for
these specific cases of untainted strings anymore. Consequently, the
tests are now passing in their original form.
@leeN
Copy link
Collaborator Author

leeN commented Jan 30, 2024

Fixed.

@tmbrbr tmbrbr merged commit add289e into SAP:main Jan 31, 2024
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants