003 File Manager
Current Path:
/usr/src/contrib/llvm-project/compiler-rt/lib/hwasan
usr
/
src
/
contrib
/
llvm-project
/
compiler-rt
/
lib
/
hwasan
/
📁
..
📄
hwasan.cpp
(15.25 KB)
📄
hwasan.h
(5.69 KB)
📄
hwasan.syms.extra
(21 B)
📄
hwasan_allocator.cpp
(13.71 KB)
📄
hwasan_allocator.h
(3.26 KB)
📄
hwasan_blacklist.txt
(282 B)
📄
hwasan_checks.h
(4.04 KB)
📄
hwasan_dynamic_shadow.cpp
(5.17 KB)
📄
hwasan_dynamic_shadow.h
(838 B)
📄
hwasan_exceptions.cpp
(2.68 KB)
📄
hwasan_flags.h
(799 B)
📄
hwasan_flags.inc
(3.27 KB)
📄
hwasan_globals.cpp
(3.03 KB)
📄
hwasan_globals.h
(1.85 KB)
📄
hwasan_interceptors.cpp
(11.1 KB)
📄
hwasan_interceptors_vfork.S
(409 B)
📄
hwasan_interface_internal.h
(6.32 KB)
📄
hwasan_linux.cpp
(15.83 KB)
📄
hwasan_malloc_bisect.h
(1.67 KB)
📄
hwasan_mapping.h
(2.01 KB)
📄
hwasan_memintrinsics.cpp
(1.6 KB)
📄
hwasan_new_delete.cpp
(2.29 KB)
📄
hwasan_poisoning.cpp
(1.89 KB)
📄
hwasan_poisoning.h
(756 B)
📄
hwasan_report.cpp
(24.11 KB)
📄
hwasan_report.h
(1.2 KB)
📄
hwasan_setjmp.S
(2.81 KB)
📄
hwasan_tag_mismatch_aarch64.S
(5.89 KB)
📄
hwasan_thread.cpp
(3.9 KB)
📄
hwasan_thread.h
(2.82 KB)
📄
hwasan_thread_list.cpp
(442 B)
📄
hwasan_thread_list.h
(6.2 KB)
📄
hwasan_type_test.cpp
(918 B)
Editing: hwasan_globals.cpp
//===-- hwasan_globals.cpp ------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file is a part of HWAddressSanitizer. // // HWAddressSanitizer globals-specific runtime. //===----------------------------------------------------------------------===// #include "hwasan_globals.h" namespace __hwasan { enum { NT_LLVM_HWASAN_GLOBALS = 3 }; struct hwasan_global_note { s32 begin_relptr; s32 end_relptr; }; // Check that the given library meets the code model requirements for tagged // globals. These properties are not checked at link time so they need to be // checked at runtime. static void CheckCodeModel(ElfW(Addr) base, const ElfW(Phdr) * phdr, ElfW(Half) phnum) { ElfW(Addr) min_addr = -1ull, max_addr = 0; for (unsigned i = 0; i != phnum; ++i) { if (phdr[i].p_type != PT_LOAD) continue; ElfW(Addr) lo = base + phdr[i].p_vaddr, hi = lo + phdr[i].p_memsz; if (min_addr > lo) min_addr = lo; if (max_addr < hi) max_addr = hi; } if (max_addr - min_addr > 1ull << 32) { Report("FATAL: HWAddressSanitizer: library size exceeds 2^32\n"); Die(); } if (max_addr > 1ull << 48) { Report("FATAL: HWAddressSanitizer: library loaded above address 2^48\n"); Die(); } } ArrayRef<const hwasan_global> HwasanGlobalsFor(ElfW(Addr) base, const ElfW(Phdr) * phdr, ElfW(Half) phnum) { // Read the phdrs from this DSO. for (unsigned i = 0; i != phnum; ++i) { if (phdr[i].p_type != PT_NOTE) continue; const char *note = reinterpret_cast<const char *>(base + phdr[i].p_vaddr); const char *nend = note + phdr[i].p_memsz; // Traverse all the notes until we find a HWASan note. while (note < nend) { auto *nhdr = reinterpret_cast<const ElfW(Nhdr) *>(note); const char *name = note + sizeof(ElfW(Nhdr)); const char *desc = name + RoundUpTo(nhdr->n_namesz, 4); // Discard non-HWASan-Globals notes. if (nhdr->n_type != NT_LLVM_HWASAN_GLOBALS || internal_strcmp(name, "LLVM") != 0) { note = desc + RoundUpTo(nhdr->n_descsz, 4); continue; } // Only libraries with instrumented globals need to be checked against the // code model since they use relocations that aren't checked at link time. CheckCodeModel(base, phdr, phnum); auto *global_note = reinterpret_cast<const hwasan_global_note *>(desc); auto *globals_begin = reinterpret_cast<const hwasan_global *>( note + global_note->begin_relptr); auto *globals_end = reinterpret_cast<const hwasan_global *>( note + global_note->end_relptr); return {globals_begin, globals_end}; } } return {}; } } // namespace __hwasan
Upload File
Create Folder