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