1//===-- hwasan_memintrinsics.cpp --------------------------------*- 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/// \file 10/// This file is a part of HWAddressSanitizer and contains HWASAN versions of 11/// memset, memcpy and memmove 12/// 13//===----------------------------------------------------------------------===// 14 15#include <string.h> 16#include "hwasan.h" 17#include "hwasan_checks.h" 18#include "hwasan_flags.h" 19#include "hwasan_interface_internal.h" 20#include "sanitizer_common/sanitizer_libc.h" 21 22using namespace __hwasan; 23 24void *__hwasan_memset(void *block, int c, uptr size) { 25 CheckAddressSized<ErrorAction::Recover, AccessType::Store>( 26 reinterpret_cast<uptr>(block), size); 27 return memset(block, c, size); 28} 29 30void *__hwasan_memcpy(void *to, const void *from, uptr size) { 31 CheckAddressSized<ErrorAction::Recover, AccessType::Store>( 32 reinterpret_cast<uptr>(to), size); 33 CheckAddressSized<ErrorAction::Recover, AccessType::Load>( 34 reinterpret_cast<uptr>(from), size); 35 return memcpy(to, from, size); 36} 37 38void *__hwasan_memmove(void *to, const void *from, uptr size) { 39 CheckAddressSized<ErrorAction::Recover, AccessType::Store>( 40 reinterpret_cast<uptr>(to), size); 41 CheckAddressSized<ErrorAction::Recover, AccessType::Load>( 42 reinterpret_cast<uptr>(from), size); 43 return memmove(UntagPtr(to), UntagPtr(from), size); 44} 45