| # Valgrind does not recognize the ashmen ioctl() calls on ARM64, so it assumes that a size |
| # parameter is a pointer. |
| { |
| ashmem ioctl |
| Memcheck:Param |
| ioctl(generic) |
| ... |
| fun:ioctl |
| fun:ashmem_create_region |
| } |
| |
| # It seems that on ARM64 Valgrind considers the canary value used by the Clang stack protector to |
| # be an uninitialized value. |
| { |
| jemalloc chunk_alloc_cache |
| Memcheck:Cond |
| fun:je_chunk_alloc_cache |
| } |
| |
| # The VectorImpl class does not hold a pointer to the allocated SharedBuffer structure, but to the |
| # beginning of the data, which is effectively an interior pointer. Valgrind has limitations when |
| # dealing with interior pointers. |
| { |
| VectorImpl |
| Memcheck:Leak |
| match-leak-kinds:possible |
| fun:malloc |
| # The wildcards make this rule work both for 32-bit and 64-bit environments. |
| fun:_ZN7android12SharedBuffer5allocE? |
| fun:_ZN7android10VectorImpl5_growE?? |
| } |
| |
| # Clang/LLVM uses memcpy for *x = *y, even though x == y (which is undefined behavior). Ignore. |
| # b/29279679, https://llvm.org/bugs/show_bug.cgi?id=11763 |
| { |
| MemCpySelfAssign |
| Memcheck:Overlap |
| fun:memcpy |
| ... |
| fun:je_malloc_tsd_boot0 |
| } |
| |
| # Setenv is known-leaking when overwriting mappings. This is triggered by re-initializing |
| # ANDROID_DATA. Ignore all setenv leaks. |
| { |
| SetenvAndroidDataReinit |
| Memcheck:Leak |
| match-leak-kinds: definite |
| fun:malloc |
| fun:setenv |
| } |
| |
| { |
| b/31275764 |
| Memcheck:Leak |
| match-leak-kinds: definite |
| fun:malloc |
| ... |
| fun:_ZN3art7Runtime17InitNativeMethodsEv |
| } |
| |
| # art::MemMap::MapInternal() uses msync() to check for the existence of memory mappings. |
| { |
| art::MemMap::MapInternal() |
| Memcheck:Param |
| msync(start) |
| fun:msync |
| fun:_ZN3art6MemMap11MapInternalEPvmiiilb |
| } |
| |
| { |
| process_vm_readv |
| Memcheck:Param |
| process_vm_readv(lvec[...]) |
| fun:process_vm_readv |
| } |