Quantcast

Clang + SAFECode Release Announcement

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Clang + SAFECode Release Announcement

John Criswell-2
Dear All,

We have a new release of Clang with SAFECode technology for detecting
memory safety errors. Memory safety checking (SAFECode for short) can be
turned on with a single command line switch to clang/clang++. The
SAFECode techniques do not change the behavior of the clang/clang++
compilers in any way when the switch is turned off, so this can be used
as a drop-in replacement for clang/clang++.

Clang with SAFECode has the following advantages over tools such as
Valgrind:

o) It is faster since it does not use dynamic binary translation and can
optimize away some run-time checks.
o) It is more accurate since it knows the boundaries of individual stack
and global objects (Valgrind's ptrcheck tool needs to use heuristics to
find these boundaries).
o) It provides better error diagnostics that give more useful
information about each memory safety violation.

The current release primarily detects dereferences of pointers that are
generated from buffer overflows.  There are many features from the LLVM
2.7 version of SAFECode that we are updating to work with LLVM mainline
and will be incorporating into our version of Clang soon.  These
features include:

o) Detecting invalid memory accesses (e.g., dangling pointer dereferences)
o) Detecting invalid calls to free()
o) Detecting uses of uninitialized pointers
o) Detecting memory errors caused by misuse of C standard library functions
o) Several optimizations, including type-safe load/store check removal
and a loop hoisting optimization

Clang with SAFECode is available for download either in source form for
Linux and Mac OS X or as a pre-built Mac OS X binary at
http://sva.cs.illinois.edu/downloads.html.  The source code is also
available directly from our SAFECode Subversion repository; download
directions are given on the web page above.

We're very interested in feedback (positive, negative, or otherwise).

Regards,

John Criswell


_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: [LLVMdev] Clang + SAFECode Release Announcement

Kostya Serebryany


On Thu, Aug 18, 2011 at 7:56 AM, John Criswell <[hidden email]> wrote:
Dear All,

We have a new release of Clang with SAFECode technology for detecting
memory safety errors. Memory safety checking (SAFECode for short) can be
turned on with a single command line switch to clang/clang++. The
SAFECode techniques do not change the behavior of the clang/clang++
compilers in any way when the switch is turned off, so this can be used
as a drop-in replacement for clang/clang++.

Clang with SAFECode has the following advantages over tools such as
Valgrind:

o) It is faster since it does not use dynamic binary translation and can
optimize away some run-time checks.


John, 

Do you have performance figures for SAFECode, e.g. on Spec CPU2006 or similar benchmarks?

Valgrind shows 20x on CPU2006, DrMemory shows 10x (http://groups.csail.mit.edu/commit/papers/2011/bruening-cgo11-drmemory.pdf).
AddressSanitizer (which finds a different set of bugs compared to Valgrind/DrMemory, but very similar to SAFECode) has less than 2x overhead (http://code.google.com/p/address-sanitizer/wiki/PerformanceNumbers).


Thanks, 

--kcc 



 
o) It is more accurate since it knows the boundaries of individual stack
and global objects (Valgrind's ptrcheck tool needs to use heuristics to
find these boundaries).
o) It provides better error diagnostics that give more useful
information about each memory safety violation.

The current release primarily detects dereferences of pointers that are
generated from buffer overflows.  There are many features from the LLVM
2.7 version of SAFECode that we are updating to work with LLVM mainline
and will be incorporating into our version of Clang soon.  These
features include:

o) Detecting invalid memory accesses (e.g., dangling pointer dereferences)
o) Detecting invalid calls to free()
o) Detecting uses of uninitialized pointers
o) Detecting memory errors caused by misuse of C standard library functions
o) Several optimizations, including type-safe load/store check removal
and a loop hoisting optimization

Clang with SAFECode is available for download either in source form for
Linux and Mac OS X or as a pre-built Mac OS X binary at
http://sva.cs.illinois.edu/downloads.html.  The source code is also
available directly from our SAFECode Subversion repository; download
directions are given on the web page above.

We're very interested in feedback (positive, negative, or otherwise).

Regards,

John Criswell


_______________________________________________
LLVM Developers mailing list
[hidden email]         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev


_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
Loading...