aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Meumertzheim <meumertzheim@code-intelligence.com>2023-05-25 16:55:07 +0200
committerFabian Meumertzheim <fabian@meumertzhe.im>2023-05-31 11:58:55 +0200
commit0771f981b14df9c3eeea9cd380ac11cf02f719a6 (patch)
tree23a658d3df3daccae94e63559680d5b48fdf5b06
parent467a06376e4cba9be0827bbec113408f9901bff9 (diff)
downloadjazzer-api-0771f981b14df9c3eeea9cd380ac11cf02f719a6.tar.gz
Revert "driver: Simplify agent installation"
This reverts commit 4dfee6dd6d31d29ff4267d392dbbd321b49ad90c and adds a comment explaining why it wasn't a good idea.
-rw-r--r--src/main/java/com/code_intelligence/jazzer/driver/Driver.java12
-rw-r--r--src/main/java/com/code_intelligence/jazzer/driver/OfflineInstrumentor.java2
2 files changed, 9 insertions, 5 deletions
diff --git a/src/main/java/com/code_intelligence/jazzer/driver/Driver.java b/src/main/java/com/code_intelligence/jazzer/driver/Driver.java
index 57a69140..a99a155d 100644
--- a/src/main/java/com/code_intelligence/jazzer/driver/Driver.java
+++ b/src/main/java/com/code_intelligence/jazzer/driver/Driver.java
@@ -108,11 +108,7 @@ public class Driver {
args.add(getDefaultRssLimitMbArg());
}
- // Do not modify properties beyond this point, loading Opt locks in their values. The agent will
- // cause Opt to be loaded again, this time in the bootstrap class loader, but since all its
- // fields are immutable that should not cause confusion.
- AgentInstaller.install(Opt.hooks);
-
+ // Do not modify properties beyond this point, loading Opt locks in their values.
if (!Opt.instrumentOnly.isEmpty()) {
boolean instrumentationSuccess = OfflineInstrumentor.instrumentJars(Opt.instrumentOnly);
if (!instrumentationSuccess) {
@@ -124,6 +120,7 @@ public class Driver {
Driver.class.getClassLoader().setDefaultAssertionStatus(true);
if (!Opt.autofuzz.isEmpty()) {
+ AgentInstaller.install(Opt.hooks);
FuzzTargetHolder.fuzzTarget = FuzzTargetHolder.AUTOFUZZ_FUZZ_TARGET;
return FuzzTargetRunner.startLibFuzzer(args);
}
@@ -134,6 +131,8 @@ public class Driver {
exit(1);
}
+ // The JUnitRunner calls AgentInstaller.install itself after modifying flags affecting the
+ // agent.
if (JUnitRunner.isSupported()) {
Optional<JUnitRunner> runner = JUnitRunner.create(targetClassName, args);
if (runner.isPresent()) {
@@ -141,6 +140,9 @@ public class Driver {
}
}
+ // Installing the agent after the following "findFuzzTarget" leads to an asan error
+ // in it on "Class.forName(targetClassName)", but only during native fuzzing.
+ AgentInstaller.install(Opt.hooks);
FuzzTargetHolder.fuzzTarget = FuzzTargetFinder.findFuzzTarget(targetClassName);
return FuzzTargetRunner.startLibFuzzer(args);
}
diff --git a/src/main/java/com/code_intelligence/jazzer/driver/OfflineInstrumentor.java b/src/main/java/com/code_intelligence/jazzer/driver/OfflineInstrumentor.java
index 75d24f81..3e779d42 100644
--- a/src/main/java/com/code_intelligence/jazzer/driver/OfflineInstrumentor.java
+++ b/src/main/java/com/code_intelligence/jazzer/driver/OfflineInstrumentor.java
@@ -45,6 +45,8 @@ public class OfflineInstrumentor {
* @return a boolean representing the success status
*/
public static boolean instrumentJars(List<String> jarLists) {
+ AgentInstaller.install(Opt.hooks);
+
// Clear Opt.dumpClassesDir before adding new instrumented classes
File dumpClassesDir = new File(Opt.dumpClassesDir);
if (dumpClassesDir.exists()) {