Memory Out-Of-Bounds Access Analysis#1094
Conversation
|
I did a rewrite of the majority of the logic that I had previously added for the memory OOB access checks. Still need to try and make it more precise. Also, for some reason I can't get the @michael-schwarz Nonetheless, feel free to take a look at the PR and leave some feedback :) |
|
Did yet another rewrite of the logic for this PR:
Feel free to review |
michael-schwarz
left a comment
There was a problem hiding this comment.
Other than the small remarks, LGTM!
Also add a comment explaining why it's a temporary solution
This is now added in 2b45499 |
|
It seems like the current implementation gets confused by string constants, causing quite a few normally simple CWE tests to fail, because they contain code like this: // PARAM: --set ana.activated[+] memOutOfBounds --enable ana.int.interval
#include <stdlib.h>
#include <stdio.h>
void myPrint(char *str) {
printf("%s", str);
}
int main(int argc, char const *argv[]) {
myPrint("starting test");
// Some stuff
myPrint("ending test");
}This should be easy to fix as we have a special representation of such string constants in the address domain, for which we could just consider all accesses to be within bound. |
This should be now fixed by commit 3258cce in the |
Probably a good idea, yes! |
We discussed that these changes will be taken after this PR's branch is merged into |
|
The CI job on MacOS is failing again, this time due to the |
Probably fixed as of 7f9ec9a. I'll merge master into this again and if the CI passes then, I'll merge the PR. |
Awesome, thanks! |
CHANGES: Functionally equivalent to Goblint in SV-COMP 2024. * Add termination analysis for loops (goblint/analyzer#1093). * Add memory out-of-bounds analysis (goblint/analyzer#1094, goblint/analyzer#1197). * Add memory leak analysis (goblint/analyzer#1127, goblint/analyzer#1241, goblint/analyzer#1246). * Add SV-COMP `termination`, `valid-memsafety` and `valid-memcleanup` properties support (goblint/analyzer#1220, goblint/analyzer#1228, goblint/analyzer#1201, goblint/analyzer#1199, goblint/analyzer#1259, goblint/analyzer#1262). * Add YAML witness version 2.0 support (goblint/analyzer#1238, goblint/analyzer#1240, goblint/analyzer#1217, goblint/analyzer#1226, goblint/analyzer#1225, goblint/analyzer#1248). * Add final warnings about unsound results (goblint/analyzer#1190, goblint/analyzer#1191). * Add many library function specifications (goblint/analyzer#1167, goblint/analyzer#1174, goblint/analyzer#1203, goblint/analyzer#1205, goblint/analyzer#1212, goblint/analyzer#1220, goblint/analyzer#1239, goblint/analyzer#1242, goblint/analyzer#1244, goblint/analyzer#1254, goblint/analyzer#1269). * Adapt automatic configuration tuning (goblint/analyzer#912, goblint/analyzer#921, goblint/analyzer#987, goblint/analyzer#1168, goblint/analyzer#1214, goblint/analyzer#1234).
CHANGES: Functionally equivalent to Goblint in SV-COMP 2024. * Add termination analysis for loops (goblint/analyzer#1093). * Add memory out-of-bounds analysis (goblint/analyzer#1094, goblint/analyzer#1197). * Add memory leak analysis (goblint/analyzer#1127, goblint/analyzer#1241, goblint/analyzer#1246). * Add SV-COMP `termination`, `valid-memsafety` and `valid-memcleanup` properties support (goblint/analyzer#1220, goblint/analyzer#1228, goblint/analyzer#1201, goblint/analyzer#1199, goblint/analyzer#1259, goblint/analyzer#1262). * Add YAML witness version 2.0 support (goblint/analyzer#1238, goblint/analyzer#1240, goblint/analyzer#1217, goblint/analyzer#1226, goblint/analyzer#1225, goblint/analyzer#1248). * Add final warnings about unsound results (goblint/analyzer#1190, goblint/analyzer#1191). * Add many library function specifications (goblint/analyzer#1167, goblint/analyzer#1174, goblint/analyzer#1203, goblint/analyzer#1205, goblint/analyzer#1212, goblint/analyzer#1220, goblint/analyzer#1239, goblint/analyzer#1242, goblint/analyzer#1244, goblint/analyzer#1254, goblint/analyzer#1269). * Adapt automatic configuration tuning (goblint/analyzer#912, goblint/analyzer#921, goblint/analyzer#987, goblint/analyzer#1168, goblint/analyzer#1214, goblint/analyzer#1234).
This PR is for the addition of an analysis for the detection of memory out-of-bounds (OOB) accesses.