Annotation of wikisrc/users/maya.mdwn, revision 1.3

1.1       maya        1: # Tips for using analyzers on NetBSD #
                      2: 
                      3: ## Address Sanitizer (+UBsan) (preliminary) ##
                      4: 
1.3     ! maya        5: ASan reports memory violations, and detects many off-by-ones. It seems to produce very high quality reports.
1.1       maya        6: 
1.3     ! maya        7: It only needs to be compiled on the resulting binary[1]. It cannot compile static objects so requires some fiddling with makefiles to disable those.
1.1       maya        8: 
                      9: I've been running it on netbsd tests in the following manner[2]:
                     10: 
                     11:     cd /usr/src/tests/lib/libc
                     12:     env USETOOLS=never MK_SSP=no HAVE_SSP=no CFLAGS="-fno-omit-frame-pointer -O0 -g -ggdb -U_FORTIFY_SOURCE -fsanitize=address -fsanitize=undefined" LDFLAGS="-lasan -lubsan" make -j20
                     13: 
1.3     ! maya       14:     env ASAN_OPTIONS=alloc_dealloc_mismatch=0 LD_PRELOAD="/usr/lib/libasan.so /usr/lib/libubsan.so" atf-run # [3]
1.1       maya       15: 
1.3     ! maya       16:     sysctl -w security.pax.aslr.enabled=0 # [4]
1.2       maya       17: 
1.1       maya       18: 1. Seems like this is a cause of worse reports, as in-library functions
                     19: are not intercepted.
                     20: 
                     21: 2. Not even close to canonical commands, should probably be improved.
                     22: 
1.3     ! maya       23: 3. ASAN_OPTIONS=alloc_dealloc_mismatch=0 is because atf-run itself triggers a bug. Should have a look at it so this option doesn't need to be disabled.
1.2       maya       24: 
1.3     ! maya       25: 4. To workaround "Shadow memory range interleaves with an existing memory mapping. ASan cannot proceed correctly". An alternative is to LD_PRELOAD and LD_LIBRARY_PATH an entirely separate libc, ld.elf_so, etc.
        !            26: 
        !            27: 5. ASan can be wrong about which function is faulting, if we're talking about functions internal to the library. Running it on a separate file or in GDB can be helpful. Worth trying if the failure doesn't make sense.
1.1       maya       28: 
                     29: Important note: ASan should not be run on production systems. [It can pose a
                     30: security risk](http://www.openwall.com/lists/oss-security/2016/02/17/9).
                     31: 
                     32: ## Coverity ##
                     33: 
                     34: Coverity is a static analyzer.
                     35: 
                     36: You can see a part of its output in coverity-updates@, and a lot more
                     37: if you go to the website (sign up with your netbsd email or poke someone
                     38: for access).
                     39: 
                     40: A lot of the reports are about strncpy/strcpy or in code that belongs
                     41: to GCC (in the case of userland), you can tackle this by limiting
                     42: results to a particular directory (click the folder icon). You can
                     43: also sort by issue.
                     44: 
                     45: Some suggestions for things to focus on, as there are many defects
                     46: reported:
                     47: - Setuid programs
                     48: - Anything kernel
                     49: - Stuff that runs as root
                     50: - Library or other code you know well already
                     51: - Drivers for hardware you actually own and can test
                     52: 
                     53: Future ideas:
                     54: 
1.2       maya       55: - GCC could be told to add ASan flags for all shared objects, making it easier to build world with those flags
1.1       maya       56: - We could run all of NetBSD with ASan for some real world tests.
1.2       maya       57: - ASan for kernel? (subr_kmem.c has some flags which do some of the work, could it do more?)
1.1       maya       58: - Fuzzers are cool.

CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb