# 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 }