1 1.1 kamil //===-- msan_poisoning.h ----------------------------------------*- C++ -*-===// 2 1.1 kamil // 3 1.1 kamil // The LLVM Compiler Infrastructure 4 1.1 kamil // 5 1.1 kamil // This file is distributed under the University of Illinois Open Source 6 1.1 kamil // License. See LICENSE.TXT for details. 7 1.1 kamil // 8 1.1 kamil //===----------------------------------------------------------------------===// 9 1.1 kamil // 10 1.1 kamil // This file is a part of MemorySanitizer. 11 1.1 kamil // 12 1.1 kamil //===----------------------------------------------------------------------===// 13 1.1 kamil 14 1.1 kamil #ifndef MSAN_POISONING_H 15 1.1 kamil #define MSAN_POISONING_H 16 1.1 kamil 17 1.1 kamil #include "msan.h" 18 1.1 kamil 19 1.1 kamil namespace __msan { 20 1.1 kamil 21 1.1 kamil // Return origin for the first poisoned byte in the memory range, or 0. 22 1.1 kamil u32 GetOriginIfPoisoned(uptr addr, uptr size); 23 1.1 kamil 24 1.1 kamil // Walk [addr, addr+size) app memory region, copying origin tags from the 25 1.1 kamil // corresponding positions in [src_origin, src_origin+size) where the 26 1.1 kamil // corresponding shadow in [src_shadow, src_shadow+size) is non-zero. 27 1.1 kamil void SetOriginIfPoisoned(uptr addr, uptr src_shadow, uptr size, u32 src_origin); 28 1.1 kamil 29 1.1 kamil // Copy origin from src (app address) to dst (app address), creating chained 30 1.1 kamil // origin ids as necessary, without overriding origin for fully initialized 31 1.1 kamil // quads. 32 1.1 kamil void CopyOrigin(const void *dst, const void *src, uptr size, StackTrace *stack); 33 1.1 kamil 34 1.1 kamil // memmove() shadow and origin. Dst and src are application addresses. 35 1.1 kamil // See CopyOrigin() for the origin copying logic. 36 1.1 kamil void MoveShadowAndOrigin(const void *dst, const void *src, uptr size, 37 1.1 kamil StackTrace *stack); 38 1.1 kamil 39 1.1 kamil // memcpy() shadow and origin. Dst and src are application addresses. 40 1.1 kamil // See CopyOrigin() for the origin copying logic. 41 1.1 kamil void CopyShadowAndOrigin(const void *dst, const void *src, uptr size, 42 1.1 kamil StackTrace *stack); 43 1.1 kamil 44 1.1 kamil // memcpy() app memory, and do "the right thing" to the corresponding shadow and 45 1.1 kamil // origin regions. 46 1.1 kamil void CopyMemory(void *dst, const void *src, uptr size, StackTrace *stack); 47 1.1 kamil 48 1.1 kamil // Fill shadow will value. Ptr is an application address. 49 1.1 kamil void SetShadow(const void *ptr, uptr size, u8 value); 50 1.1 kamil 51 1.1 kamil // Set origin for the memory region. 52 1.1 kamil void SetOrigin(const void *dst, uptr size, u32 origin); 53 1.1 kamil 54 1.1 kamil // Mark memory region uninitialized, with origins. 55 1.1 kamil void PoisonMemory(const void *dst, uptr size, StackTrace *stack); 56 1.1 kamil 57 1.1 kamil } // namespace __msan 58 1.1 kamil 59 1.1 kamil #endif // MSAN_POISONING_H 60