ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Control
CxxUtils
CxxUtils
PageAccessControl.h
Go to the documentation of this file.
1
// This file's extension implies that it's C, but it's really -*- C++ -*-.
2
3
/*
4
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
5
*/
6
7
#ifndef CXXUTILS_PAGEACCESSCONTROL_H
8
#define CXXUTILS_PAGEACCESSCONTROL_H 1
9
21
22
#include <vector>
23
#include <sys/mman.h>
/*PROT_NONE*/
24
25
#include "
CxxUtils/procmaps.h
"
26
27
class
PageAccessControl
{
28
public
:
29
PageAccessControl
(
size_t
reservedSize=65535) :
30
m_pmaps
(),
31
m_protectedIsSorted
(false)
32
{
33
//we must reserve enough elements, or we risk vector allocating in a protected page during handle()...
34
m_protected
.reserve(reservedSize);
35
}
36
PageAccessControl
(
procmaps
& pmaps,
size_t
reservedSize=65535) :
37
m_pmaps
(pmaps),
38
m_protectedIsSorted
(false)
39
{
40
//we must reserve enough elements, or we risk vector allocating in a protected page during handle()...
41
m_protected
.reserve(reservedSize);
42
}
43
48
template
<
typename
T>
49
bool
protectPage
(T* addr,
int
prot) {
50
return
protectPage
(addr,
sizeof
(T), prot);
51
}
52
54
template
<
typename
T>
55
bool
forbidPage
(
const
T* addr) {
56
return
forbidPage
(addr,
sizeof
(T));
57
}
58
60
bool
forbidPage
(
const
void
* addr,
size_t
objSize) {
61
return
protectPage
(addr, objSize, PROT_NONE);
62
}
63
65
bool
forbidPage
(
const
void
* addr) {
66
return
protectPage
(addr, 4, PROT_NONE);
67
}
68
70
bool
protectPage
(
const
void
* addr,
size_t
objSize,
int
prot);
71
72
bool
restorePageProt
(
const
void
* addr);
73
void
sort
();
74
76
struct
Entry
{
77
Entry
(
const
void
*
a
,
size_t
l,
int
p,
void
* pl);
79
const
void
*
addr
;
81
size_t
lenProt
;
82
int
prot
;
84
void
*
leak
;
87
int
restored
;
88
};
89
91
typedef
std::vector<Entry>
protected_t
;
92
typedef
protected_t::const_iterator
const_iterator
;
93
const
protected_t
&
protectedPtrs
()
const
{
return
m_protected
; }
94
const_iterator
beginProtectedPtrs
()
const
{
return
m_protected
.begin(); }
95
const_iterator
endProtectedPtrs
()
const
{
return
m_protected
.end(); }
96
void
reset
() {
m_protected
.clear(); }
97
99
bool
accessed
(
const
void
* address)
const
;
100
101
private
:
102
104
procmaps
m_pmaps
;
105
106
// can not preallocate map
107
// typedef std::map<void*, size_t, std::less<void*>,
108
// boost::pool_allocator<std::map<void*, size_t>::value_type > > protected_t;
109
protected_t
m_protected
;
110
bool
m_protectedIsSorted
;
111
};
112
inline
113
bool
operator <
(
const
PageAccessControl::Entry
& lhs,
const
PageAccessControl::Entry
& rhs) {
114
return
lhs.
addr
< rhs.
addr
;
115
}
116
#endif
a
static Double_t a
Definition
LArPhysWaveHECTool.cxx:38
operator<
bool operator<(const PageAccessControl::Entry &lhs, const PageAccessControl::Entry &rhs)
Definition
PageAccessControl.h:113
PageAccessControl
FIXME Access to the underlying protect/restore page access.
PageAccessControl::forbidPage
bool forbidPage(const void *addr)
FIXME this will not work well for objects spanning across pages.
Definition
PageAccessControl.h:65
PageAccessControl::sort
void sort()
Definition
PageAccessControl.cxx:20
PageAccessControl::m_pmaps
procmaps m_pmaps
the content of /proc/self/maps
Definition
PageAccessControl.h:104
PageAccessControl::accessed
bool accessed(const void *address) const
was the page containing address accessed?
Definition
PageAccessControl.cxx:118
PageAccessControl::m_protected
protected_t m_protected
Definition
PageAccessControl.h:109
PageAccessControl::restorePageProt
bool restorePageProt(const void *addr)
Definition
PageAccessControl.cxx:27
PageAccessControl::forbidPage
bool forbidPage(const T *addr)
forbid access to the page containing addr, setting its prot to PROT_NONE
Definition
PageAccessControl.h:55
PageAccessControl::reset
void reset()
Definition
PageAccessControl.h:96
PageAccessControl::PageAccessControl
PageAccessControl(size_t reservedSize=65535)
Definition
PageAccessControl.h:29
PageAccessControl::beginProtectedPtrs
const_iterator beginProtectedPtrs() const
Definition
PageAccessControl.h:94
PageAccessControl::m_protectedIsSorted
bool m_protectedIsSorted
Definition
PageAccessControl.h:110
PageAccessControl::protectPage
bool protectPage(T *addr, int prot)
protect the page containing addr, record the amount of memory we protected NOTE To avoid SEGV,...
Definition
PageAccessControl.h:49
PageAccessControl::PageAccessControl
PageAccessControl(procmaps &pmaps, size_t reservedSize=65535)
Definition
PageAccessControl.h:36
PageAccessControl::protected_t
std::vector< Entry > protected_t
the list of protected pages
Definition
PageAccessControl.h:91
PageAccessControl::forbidPage
bool forbidPage(const void *addr, size_t objSize)
forbid access to the page containing addr, setting its prot to PROT_NONE
Definition
PageAccessControl.h:60
PageAccessControl::const_iterator
protected_t::const_iterator const_iterator
Definition
PageAccessControl.h:92
PageAccessControl::protectedPtrs
const protected_t & protectedPtrs() const
Definition
PageAccessControl.h:93
PageAccessControl::endProtectedPtrs
const_iterator endProtectedPtrs() const
Definition
PageAccessControl.h:95
procmaps
On stopMonitoring/finalize the handler is uninstalled.
Definition
procmaps.h:18
procmaps.h
PageAccessControl::Entry
protection of a memory region (see mprotect(2))
Definition
PageAccessControl.h:76
PageAccessControl::Entry::leak
void * leak
pointer to the heap fragment we leaked before protecting the page
Definition
PageAccessControl.h:84
PageAccessControl::Entry::lenProt
size_t lenProt
length of the protected region, from page addr to end of protected obj
Definition
PageAccessControl.h:81
PageAccessControl::Entry::prot
int prot
Definition
PageAccessControl.h:82
PageAccessControl::Entry::addr
const void * addr
address of page for which protection was requested. Used as key
Definition
PageAccessControl.h:79
PageAccessControl::Entry::restored
int restored
Definition
PageAccessControl.h:87
PageAccessControl::Entry::Entry
Entry(const void *a, size_t l, int p, void *pl)
Definition
PageAccessControl.cxx:15
Generated on
for ATLAS Offline Software by
1.17.0