7#if !defined(INSIDE_ENCLAVE) || defined(VIRTUAL_ENCLAVE)
10# include <sys/resource.h>
14# include <openenclave/advanced/mallinfo.h>
15# include <openenclave/bits/security.h>
31#if !defined(INSIDE_ENCLAVE) || defined(VIRTUAL_ENCLAVE)
33 static inline void* safe_memcpy(
void* dest,
const void* src,
size_t count)
35 return ::memcpy(dest, src, count);
38 static inline bool get_mallinfo(MallocInfo& info)
42 auto rc = getrusage(RUSAGE_SELF, &ru);
47 const auto heap_size = ru.ru_maxrss * 1024;
49 info.current_allocated_heap_size = heap_size;
50 info.peak_allocated_heap_size = heap_size;
55 auto rc = getrlimit(RLIMIT_AS, &rl);
61 info.max_total_heap_size = rl.rlim_cur;
67 static bool require_alignment_for_untrusted_reads()
69# ifdef FORCE_ENABLE_XAPIC_MITIGATION
78 static inline void* safe_memcpy(
void* dest,
const void* src,
size_t count)
80 return oe_memcpy_with_barrier(dest, src, count);
83 static bool get_mallinfo(MallocInfo& info)
85 oe_mallinfo_t oe_info;
86 auto rc = oe_allocator_mallinfo(&oe_info);
91 info.max_total_heap_size = oe_info.max_total_heap_size;
92 info.current_allocated_heap_size = oe_info.current_allocated_heap_size;
93 info.peak_allocated_heap_size = oe_info.peak_allocated_heap_size;
97 static bool is_vulnerable_to_stale_xapic_read()
106 constexpr uint64_t proc_id_mask = 0x000F'0FF0;
107 const uint64_t proc_id = info.eax & proc_id_mask;
112 const std::set<uint64_t> vulnerable_proc_ids{
130 const auto it = vulnerable_proc_ids.find(proc_id);
131 return it != vulnerable_proc_ids.end();
134 static bool require_alignment_for_untrusted_reads()
136# ifdef FORCE_ENABLE_XAPIC_MITIGATION
139 static std::optional<bool> required = std::nullopt;
140 if (!required.has_value())
142 required = is_intel_cpu() && is_vulnerable_to_stale_xapic_read();
144 return required.value();
Definition attestation.h:28
size_t current_allocated_heap_size
Definition mem.h:27
size_t max_total_heap_size
Definition mem.h:26
size_t peak_allocated_heap_size
Definition mem.h:28
constexpr oe_result_t OE_OK
Definition virtual_enclave.h:41