tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: [gsoc] syscall/libc fuzzer proposal
2010/3/20 Thor Lancelot Simon <tls%panix.com@localhost>:
> What is the benefit of this when compared to existing static-analysis
> tools such as Coverity Scan, splint, or the Clang static analyzer? Will
> this cover any cases they don't? If so, which ones?
Undecidability is the limit for static-analysis. Consider following program:
*bzzzz*
$ cat splint.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
int i;
char blah[10];
memset(blah, 0, sizeof(blah));
if ( argc > 1 )
i = atoi(argv[1]);
else
i = 0;
printf("%d - %c\n", i, blah[i]);
return 0;
}
$ splint splint.c
Splint 3.1.2 --- 07 Sep 2009
Finished checking --- no warnings
$ ./splint 99
99 - 1
*bzzzz*
Static analysis used in splint is not strong enough to uncover bug.
For sure there exists static analysis which is able to find this bug,
but it might be a good subject for PhD thesis. :)
We will put splint.c through our translator and receive something like
this (assert is just an example, additional lines has got //T
comments):
*bzzzz*
$ cat translated.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
int main(int argc, char **argv)
{
int j; // T
int i;
char blah[10];
memset(blah, 0, sizeof(blah));
if ( argc > 1 )
i = atoi(argv[1]);
else
i = 0;
j = i; // T
assert ( j >= 0 && j < 10 ); // T
printf("%d - %c", i, blah[j]);
return 0;
}
$ ./translated 99
translated: translated.c:20: main: Assertion `j >= 0 && j < 10' failed.
Przerwane (Aborted)
*bzzzz*
My example is a bit tendentious and trivial, but it shows that
transforming programs by adding there
assertions/bound-checkers/whatever can support fuzz testing to uncover
some bugs.
--
Mateusz Kocielski
Home |
Main Index |
Thread Index |
Old Index