176e7fd84SAlexey Budankov.. _perf_security:
276e7fd84SAlexey Budankov
3902a8dccSAlexey BudankovPerf events and tool security
476e7fd84SAlexey Budankov=============================
576e7fd84SAlexey Budankov
676e7fd84SAlexey BudankovOverview
776e7fd84SAlexey Budankov--------
876e7fd84SAlexey Budankov
9e85a198eSAlexey BudankovUsage of Performance Counters for Linux (perf_events) [1]_ , [2]_ , [3]_
10e85a198eSAlexey Budankovcan impose a considerable risk of leaking sensitive data accessed by
11e85a198eSAlexey Budankovmonitored processes. The data leakage is possible both in scenarios of
12e85a198eSAlexey Budankovdirect usage of perf_events system call API [2]_ and over data files
13e85a198eSAlexey Budankovgenerated by Perf tool user mode utility (Perf) [3]_ , [4]_ . The risk
14e85a198eSAlexey Budankovdepends on the nature of data that perf_events performance monitoring
15e85a198eSAlexey Budankovunits (PMU) [2]_ and Perf collect and expose for performance analysis.
16e85a198eSAlexey BudankovCollected system and performance data may be split into several
17e85a198eSAlexey Budankovcategories:
1868570ca0SAlexey Budankov
19e85a198eSAlexey Budankov1. System hardware and software configuration data, for example: a CPU
20e85a198eSAlexey Budankov   model and its cache configuration, an amount of available memory and
21e85a198eSAlexey Budankov   its topology, used kernel and Perf versions, performance monitoring
22e85a198eSAlexey Budankov   setup including experiment time, events configuration, Perf command
23e85a198eSAlexey Budankov   line parameters, etc.
2468570ca0SAlexey Budankov
25e85a198eSAlexey Budankov2. User and kernel module paths and their load addresses with sizes,
26e85a198eSAlexey Budankov   process and thread names with their PIDs and TIDs, timestamps for
27e85a198eSAlexey Budankov   captured hardware and software events.
2868570ca0SAlexey Budankov
29e85a198eSAlexey Budankov3. Content of kernel software counters (e.g., for context switches, page
30e85a198eSAlexey Budankov   faults, CPU migrations), architectural hardware performance counters
31e85a198eSAlexey Budankov   (PMC) [8]_ and machine specific registers (MSR) [9]_ that provide
32e85a198eSAlexey Budankov   execution metrics for various monitored parts of the system (e.g.,
33e85a198eSAlexey Budankov   memory controller (IMC), interconnect (QPI/UPI) or peripheral (PCIe)
34e85a198eSAlexey Budankov   uncore counters) without direct attribution to any execution context
35e85a198eSAlexey Budankov   state.
3668570ca0SAlexey Budankov
37e85a198eSAlexey Budankov4. Content of architectural execution context registers (e.g., RIP, RSP,
38e85a198eSAlexey Budankov   RBP on x86_64), process user and kernel space memory addresses and
39e85a198eSAlexey Budankov   data, content of various architectural MSRs that capture data from
40e85a198eSAlexey Budankov   this category.
4168570ca0SAlexey Budankov
42e85a198eSAlexey BudankovData that belong to the fourth category can potentially contain
43e85a198eSAlexey Budankovsensitive process data. If PMUs in some monitoring modes capture values
44e85a198eSAlexey Budankovof execution context registers or data from process memory then access
45902a8dccSAlexey Budankovto such monitoring modes requires to be ordered and secured properly.
46902a8dccSAlexey BudankovSo, perf_events performance monitoring and observability operations are
47902a8dccSAlexey Budankovthe subject for security access control management [5]_ .
4876e7fd84SAlexey Budankov
49902a8dccSAlexey Budankovperf_events access control
5076e7fd84SAlexey Budankov-------------------------------
5176e7fd84SAlexey Budankov
52e85a198eSAlexey BudankovTo perform security checks, the Linux implementation splits processes
53e85a198eSAlexey Budankovinto two categories [6]_ : a) privileged processes (whose effective user
54e85a198eSAlexey BudankovID is 0, referred to as superuser or root), and b) unprivileged
55e85a198eSAlexey Budankovprocesses (whose effective UID is nonzero). Privileged processes bypass
56e85a198eSAlexey Budankovall kernel security permission checks so perf_events performance
57e85a198eSAlexey Budankovmonitoring is fully available to privileged processes without access,
58e85a198eSAlexey Budankovscope and resource restrictions.
5976e7fd84SAlexey Budankov
60e85a198eSAlexey BudankovUnprivileged processes are subject to a full security permission check
61e85a198eSAlexey Budankovbased on the process's credentials [5]_ (usually: effective UID,
62e85a198eSAlexey Budankoveffective GID, and supplementary group list).
6376e7fd84SAlexey Budankov
64e85a198eSAlexey BudankovLinux divides the privileges traditionally associated with superuser
65e85a198eSAlexey Budankovinto distinct units, known as capabilities [6]_ , which can be
66e85a198eSAlexey Budankovindependently enabled and disabled on per-thread basis for processes and
67e85a198eSAlexey Budankovfiles of unprivileged users.
6876e7fd84SAlexey Budankov
69902a8dccSAlexey BudankovUnprivileged processes with enabled CAP_PERFMON capability are treated
70e85a198eSAlexey Budankovas privileged processes with respect to perf_events performance
71902a8dccSAlexey Budankovmonitoring and observability operations, thus, bypass *scope* permissions
72902a8dccSAlexey Budankovchecks in the kernel. CAP_PERFMON implements the principle of least
73902a8dccSAlexey Budankovprivilege [13]_ (POSIX 1003.1e: 2.2.2.39) for performance monitoring and
74902a8dccSAlexey Budankovobservability operations in the kernel and provides a secure approach to
75*a15cb2c1SColin Ian Kingperformance monitoring and observability in the system.
7676e7fd84SAlexey Budankov
77902a8dccSAlexey BudankovFor backward compatibility reasons the access to perf_events monitoring and
78902a8dccSAlexey Budankovobservability operations is also open for CAP_SYS_ADMIN privileged
79902a8dccSAlexey Budankovprocesses but CAP_SYS_ADMIN usage for secure monitoring and observability
80902a8dccSAlexey Budankovuse cases is discouraged with respect to the CAP_PERFMON capability.
81902a8dccSAlexey BudankovIf system audit records [14]_ for a process using perf_events system call
82902a8dccSAlexey BudankovAPI contain denial records of acquiring both CAP_PERFMON and CAP_SYS_ADMIN
83902a8dccSAlexey Budankovcapabilities then providing the process with CAP_PERFMON capability singly
84902a8dccSAlexey Budankovis recommended as the preferred secure approach to resolve double access
85902a8dccSAlexey Budankovdenial logging related to usage of performance monitoring and observability.
86902a8dccSAlexey Budankov
874cb3fb1cSAlexey BudankovPrior Linux v5.9 unprivileged processes using perf_events system call
884cb3fb1cSAlexey Budankovare also subject for PTRACE_MODE_READ_REALCREDS ptrace access mode check
894cb3fb1cSAlexey Budankov[7]_ , whose outcome determines whether monitoring is permitted.
904cb3fb1cSAlexey BudankovSo unprivileged processes provided with CAP_SYS_PTRACE capability are
914cb3fb1cSAlexey Budankoveffectively permitted to pass the check. Starting from Linux v5.9
924cb3fb1cSAlexey BudankovCAP_SYS_PTRACE capability is not required and CAP_PERFMON is enough to
934cb3fb1cSAlexey Budankovbe provided for processes to make performance monitoring and observability
944cb3fb1cSAlexey Budankovoperations.
9576e7fd84SAlexey Budankov
96e85a198eSAlexey BudankovOther capabilities being granted to unprivileged processes can
97e85a198eSAlexey Budankoveffectively enable capturing of additional data required for later
98e85a198eSAlexey Budankovperformance analysis of monitored processes or a system. For example,
99e85a198eSAlexey BudankovCAP_SYSLOG capability permits reading kernel space memory addresses from
100e85a198eSAlexey Budankov/proc/kallsyms file.
10176e7fd84SAlexey Budankov
102902a8dccSAlexey BudankovPrivileged Perf users groups
103e152c7b7SAlexey Budankov---------------------------------
104e152c7b7SAlexey Budankov
1051dd88c19SAlexey BudankovMechanisms of capabilities, privileged capability-dumb files [6]_,
1061dd88c19SAlexey Budankovfile system ACLs [10]_ and sudo [15]_ utility can be used to create
1071dd88c19SAlexey Budankovdedicated groups of privileged Perf users who are permitted to execute
1081dd88c19SAlexey Budankovperformance monitoring and observability without limits. The following
1091dd88c19SAlexey Budankovsteps can be taken to create such groups of privileged Perf users.
110e152c7b7SAlexey Budankov
111e85a198eSAlexey Budankov1. Create perf_users group of privileged Perf users, assign perf_users
112e85a198eSAlexey Budankov   group to Perf tool executable and limit access to the executable for
113e85a198eSAlexey Budankov   other users in the system who are not in the perf_users group:
114e152c7b7SAlexey Budankov
115e152c7b7SAlexey Budankov::
116e152c7b7SAlexey Budankov
117e152c7b7SAlexey Budankov   # groupadd perf_users
118e152c7b7SAlexey Budankov   # ls -alhF
119e152c7b7SAlexey Budankov   -rwxr-xr-x  2 root root  11M Oct 19 15:12 perf
120e152c7b7SAlexey Budankov   # chgrp perf_users perf
121e152c7b7SAlexey Budankov   # ls -alhF
122e152c7b7SAlexey Budankov   -rwxr-xr-x  2 root perf_users  11M Oct 19 15:12 perf
123e152c7b7SAlexey Budankov   # chmod o-rwx perf
124e152c7b7SAlexey Budankov   # ls -alhF
125e152c7b7SAlexey Budankov   -rwxr-x---  2 root perf_users  11M Oct 19 15:12 perf
126e152c7b7SAlexey Budankov
127e85a198eSAlexey Budankov2. Assign the required capabilities to the Perf tool executable file and
128902a8dccSAlexey Budankov   enable members of perf_users group with monitoring and observability
129e85a198eSAlexey Budankov   privileges [6]_ :
130e152c7b7SAlexey Budankov
131e152c7b7SAlexey Budankov::
132e152c7b7SAlexey Budankov
133902a8dccSAlexey Budankov   # setcap "cap_perfmon,cap_sys_ptrace,cap_syslog=ep" perf
134902a8dccSAlexey Budankov   # setcap -v "cap_perfmon,cap_sys_ptrace,cap_syslog=ep" perf
135e152c7b7SAlexey Budankov   perf: OK
136e152c7b7SAlexey Budankov   # getcap perf
137902a8dccSAlexey Budankov   perf = cap_sys_ptrace,cap_syslog,cap_perfmon+ep
138902a8dccSAlexey Budankov
1391dd88c19SAlexey BudankovIf the libcap [16]_ installed doesn't yet support "cap_perfmon", use "38" instead,
140902a8dccSAlexey Budankovi.e.:
141902a8dccSAlexey Budankov
142902a8dccSAlexey Budankov::
143902a8dccSAlexey Budankov
144902a8dccSAlexey Budankov   # setcap "38,cap_ipc_lock,cap_sys_ptrace,cap_syslog=ep" perf
145902a8dccSAlexey Budankov
146902a8dccSAlexey BudankovNote that you may need to have 'cap_ipc_lock' in the mix for tools such as
147902a8dccSAlexey Budankov'perf top', alternatively use 'perf top -m N', to reduce the memory that
148902a8dccSAlexey Budankovit uses for the perf ring buffer, see the memory allocation section below.
149902a8dccSAlexey Budankov
150902a8dccSAlexey BudankovUsing a libcap without support for CAP_PERFMON will make cap_get_flag(caps, 38,
151902a8dccSAlexey BudankovCAP_EFFECTIVE, &val) fail, which will lead the default event to be 'cycles:u',
152902a8dccSAlexey Budankovso as a workaround explicitly ask for the 'cycles' event, i.e.:
153902a8dccSAlexey Budankov
154902a8dccSAlexey Budankov::
155902a8dccSAlexey Budankov
156902a8dccSAlexey Budankov  # perf top -e cycles
157902a8dccSAlexey Budankov
158902a8dccSAlexey BudankovTo get kernel and user samples with a perf binary with just CAP_PERFMON.
159e152c7b7SAlexey Budankov
160e85a198eSAlexey BudankovAs a result, members of perf_users group are capable of conducting
161902a8dccSAlexey Budankovperformance monitoring and observability by using functionality of the
162902a8dccSAlexey Budankovconfigured Perf tool executable that, when executes, passes perf_events
163902a8dccSAlexey Budankovsubsystem scope checks.
164e152c7b7SAlexey Budankov
1651dd88c19SAlexey BudankovIn case Perf tool executable can't be assigned required capabilities (e.g.
1661dd88c19SAlexey Budankovfile system is mounted with nosuid option or extended attributes are
1671dd88c19SAlexey Budankovnot supported by the file system) then creation of the capabilities
1681dd88c19SAlexey Budankovprivileged environment, naturally shell, is possible. The shell provides
1691dd88c19SAlexey Budankovinherent processes with CAP_PERFMON and other required capabilities so that
1701dd88c19SAlexey Budankovperformance monitoring and observability operations are available in the
1711dd88c19SAlexey Budankovenvironment without limits. Access to the environment can be open via sudo
1721dd88c19SAlexey Budankovutility for members of perf_users group only. In order to create such
1731dd88c19SAlexey Budankovenvironment:
1741dd88c19SAlexey Budankov
1751dd88c19SAlexey Budankov1. Create shell script that uses capsh utility [16]_ to assign CAP_PERFMON
1761dd88c19SAlexey Budankov   and other required capabilities into ambient capability set of the shell
1771dd88c19SAlexey Budankov   process, lock the process security bits after enabling SECBIT_NO_SETUID_FIXUP,
1781dd88c19SAlexey Budankov   SECBIT_NOROOT and SECBIT_NO_CAP_AMBIENT_RAISE bits and then change
1791dd88c19SAlexey Budankov   the process identity to sudo caller of the script who should essentially
1801dd88c19SAlexey Budankov   be a member of perf_users group:
1811dd88c19SAlexey Budankov
1821dd88c19SAlexey Budankov::
1831dd88c19SAlexey Budankov
1841dd88c19SAlexey Budankov   # ls -alh /usr/local/bin/perf.shell
1851dd88c19SAlexey Budankov   -rwxr-xr-x. 1 root root 83 Oct 13 23:57 /usr/local/bin/perf.shell
1861dd88c19SAlexey Budankov   # cat /usr/local/bin/perf.shell
1871dd88c19SAlexey Budankov   exec /usr/sbin/capsh --iab=^cap_perfmon --secbits=239 --user=$SUDO_USER -- -l
1881dd88c19SAlexey Budankov
1891dd88c19SAlexey Budankov2. Extend sudo policy at /etc/sudoers file with a rule for perf_users group:
1901dd88c19SAlexey Budankov
1911dd88c19SAlexey Budankov::
1921dd88c19SAlexey Budankov
1931dd88c19SAlexey Budankov   # grep perf_users /etc/sudoers
1941dd88c19SAlexey Budankov   %perf_users    ALL=/usr/local/bin/perf.shell
1951dd88c19SAlexey Budankov
1961dd88c19SAlexey Budankov3. Check that members of perf_users group have access to the privileged
1971dd88c19SAlexey Budankov   shell and have CAP_PERFMON and other required capabilities enabled
1981dd88c19SAlexey Budankov   in permitted, effective and ambient capability sets of an inherent process:
1991dd88c19SAlexey Budankov
2001dd88c19SAlexey Budankov::
2011dd88c19SAlexey Budankov
2021dd88c19SAlexey Budankov  $ id
2031dd88c19SAlexey Budankov  uid=1003(capsh_test) gid=1004(capsh_test) groups=1004(capsh_test),1000(perf_users) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
2041dd88c19SAlexey Budankov  $ sudo perf.shell
2051dd88c19SAlexey Budankov  [sudo] password for capsh_test:
2061dd88c19SAlexey Budankov  $ grep Cap /proc/self/status
2071dd88c19SAlexey Budankov  CapInh:        0000004000000000
2081dd88c19SAlexey Budankov  CapPrm:        0000004000000000
2091dd88c19SAlexey Budankov  CapEff:        0000004000000000
2101dd88c19SAlexey Budankov  CapBnd:        000000ffffffffff
2111dd88c19SAlexey Budankov  CapAmb:        0000004000000000
2121dd88c19SAlexey Budankov  $ capsh --decode=0000004000000000
2131dd88c19SAlexey Budankov  0x0000004000000000=cap_perfmon
2141dd88c19SAlexey Budankov
2151dd88c19SAlexey BudankovAs a result, members of perf_users group have access to the privileged
2161dd88c19SAlexey Budankovenvironment where they can use tools employing performance monitoring APIs
2171dd88c19SAlexey Budankovgoverned by CAP_PERFMON Linux capability.
2181dd88c19SAlexey Budankov
219e85a198eSAlexey BudankovThis specific access control management is only available to superuser
220e85a198eSAlexey Budankovor root running processes with CAP_SETPCAP, CAP_SETFCAP [6]_
221e85a198eSAlexey Budankovcapabilities.
222e152c7b7SAlexey Budankov
223902a8dccSAlexey BudankovUnprivileged users
22476e7fd84SAlexey Budankov-----------------------------------
22576e7fd84SAlexey Budankov
226902a8dccSAlexey Budankovperf_events *scope* and *access* control for unprivileged processes
227e85a198eSAlexey Budankovis governed by perf_event_paranoid [2]_ setting:
22876e7fd84SAlexey Budankov
22976e7fd84SAlexey Budankov-1:
230e85a198eSAlexey Budankov     Impose no *scope* and *access* restrictions on using perf_events
231e85a198eSAlexey Budankov     performance monitoring. Per-user per-cpu perf_event_mlock_kb [2]_
232e85a198eSAlexey Budankov     locking limit is ignored when allocating memory buffers for storing
233e85a198eSAlexey Budankov     performance data. This is the least secure mode since allowed
234e85a198eSAlexey Budankov     monitored *scope* is maximized and no perf_events specific limits
235e85a198eSAlexey Budankov     are imposed on *resources* allocated for performance monitoring.
23676e7fd84SAlexey Budankov
23776e7fd84SAlexey Budankov>=0:
23876e7fd84SAlexey Budankov     *scope* includes per-process and system wide performance monitoring
239e85a198eSAlexey Budankov     but excludes raw tracepoints and ftrace function tracepoints
240e85a198eSAlexey Budankov     monitoring. CPU and system events happened when executing either in
241e85a198eSAlexey Budankov     user or in kernel space can be monitored and captured for later
242e85a198eSAlexey Budankov     analysis. Per-user per-cpu perf_event_mlock_kb locking limit is
243e85a198eSAlexey Budankov     imposed but ignored for unprivileged processes with CAP_IPC_LOCK
244e85a198eSAlexey Budankov     [6]_ capability.
24576e7fd84SAlexey Budankov
24676e7fd84SAlexey Budankov>=1:
247e85a198eSAlexey Budankov     *scope* includes per-process performance monitoring only and
248e85a198eSAlexey Budankov     excludes system wide performance monitoring. CPU and system events
249e85a198eSAlexey Budankov     happened when executing either in user or in kernel space can be
250e85a198eSAlexey Budankov     monitored and captured for later analysis. Per-user per-cpu
251e85a198eSAlexey Budankov     perf_event_mlock_kb locking limit is imposed but ignored for
252e85a198eSAlexey Budankov     unprivileged processes with CAP_IPC_LOCK capability.
25376e7fd84SAlexey Budankov
25476e7fd84SAlexey Budankov>=2:
255e85a198eSAlexey Budankov     *scope* includes per-process performance monitoring only. CPU and
256e85a198eSAlexey Budankov     system events happened when executing in user space only can be
257e85a198eSAlexey Budankov     monitored and captured for later analysis. Per-user per-cpu
258e85a198eSAlexey Budankov     perf_event_mlock_kb locking limit is imposed but ignored for
259e85a198eSAlexey Budankov     unprivileged processes with CAP_IPC_LOCK capability.
26076e7fd84SAlexey Budankov
261902a8dccSAlexey BudankovResource control
2629d87bbaeSAlexey Budankov---------------------------------
2639d87bbaeSAlexey Budankov
2649d87bbaeSAlexey BudankovOpen file descriptors
2659d87bbaeSAlexey Budankov+++++++++++++++++++++
2669d87bbaeSAlexey Budankov
267e85a198eSAlexey BudankovThe perf_events system call API [2]_ allocates file descriptors for
268e85a198eSAlexey Budankovevery configured PMU event. Open file descriptors are a per-process
269e85a198eSAlexey Budankovaccountable resource governed by the RLIMIT_NOFILE [11]_ limit
270e85a198eSAlexey Budankov(ulimit -n), which is usually derived from the login shell process. When
271e85a198eSAlexey Budankovconfiguring Perf collection for a long list of events on a large server
272e85a198eSAlexey Budankovsystem, this limit can be easily hit preventing required monitoring
273e85a198eSAlexey Budankovconfiguration. RLIMIT_NOFILE limit can be increased on per-user basis
274e85a198eSAlexey Budankovmodifying content of the limits.conf file [12]_ . Ordinarily, a Perf
275e85a198eSAlexey Budankovsampling session (perf record) requires an amount of open perf_event
276e85a198eSAlexey Budankovfile descriptors that is not less than the number of monitored events
277e85a198eSAlexey Budankovmultiplied by the number of monitored CPUs.
2789d87bbaeSAlexey Budankov
2799d87bbaeSAlexey BudankovMemory allocation
2809d87bbaeSAlexey Budankov+++++++++++++++++
2819d87bbaeSAlexey Budankov
282e85a198eSAlexey BudankovThe amount of memory available to user processes for capturing
283e85a198eSAlexey Budankovperformance monitoring data is governed by the perf_event_mlock_kb [2]_
284e85a198eSAlexey Budankovsetting. This perf_event specific resource setting defines overall
285e85a198eSAlexey Budankovper-cpu limits of memory allowed for mapping by the user processes to
286e85a198eSAlexey Budankovexecute performance monitoring. The setting essentially extends the
287e85a198eSAlexey BudankovRLIMIT_MEMLOCK [11]_ limit, but only for memory regions mapped
288e85a198eSAlexey Budankovspecifically for capturing monitored performance events and related data.
2899d87bbaeSAlexey Budankov
290e85a198eSAlexey BudankovFor example, if a machine has eight cores and perf_event_mlock_kb limit
291e85a198eSAlexey Budankovis set to 516 KiB, then a user process is provided with 516 KiB * 8 =
292e85a198eSAlexey Budankov4128 KiB of memory above the RLIMIT_MEMLOCK limit (ulimit -l) for
293e85a198eSAlexey Budankovperf_event mmap buffers. In particular, this means that, if the user
294e85a198eSAlexey Budankovwants to start two or more performance monitoring processes, the user is
295e85a198eSAlexey Budankovrequired to manually distribute the available 4128 KiB between the
296e85a198eSAlexey Budankovmonitoring processes, for example, using the --mmap-pages Perf record
297e85a198eSAlexey Budankovmode option. Otherwise, the first started performance monitoring process
298e85a198eSAlexey Budankovallocates all available 4128 KiB and the other processes will fail to
299e85a198eSAlexey Budankovproceed due to the lack of memory.
3009d87bbaeSAlexey Budankov
301e85a198eSAlexey BudankovRLIMIT_MEMLOCK and perf_event_mlock_kb resource constraints are ignored
302e85a198eSAlexey Budankovfor processes with the CAP_IPC_LOCK capability. Thus, perf_events/Perf
303e85a198eSAlexey Budankovprivileged users can be provided with memory above the constraints for
304e85a198eSAlexey Budankovperf_events/Perf performance monitoring purpose by providing the Perf
305e85a198eSAlexey Budankovexecutable with CAP_IPC_LOCK capability.
3069d87bbaeSAlexey Budankov
30776e7fd84SAlexey BudankovBibliography
30876e7fd84SAlexey Budankov------------
30976e7fd84SAlexey Budankov
31076e7fd84SAlexey Budankov.. [1] `<https://lwn.net/Articles/337493/>`_
31176e7fd84SAlexey Budankov.. [2] `<http://man7.org/linux/man-pages/man2/perf_event_open.2.html>`_
31276e7fd84SAlexey Budankov.. [3] `<http://web.eece.maine.edu/~vweaver/projects/perf_events/>`_
31376e7fd84SAlexey Budankov.. [4] `<https://perf.wiki.kernel.org/index.php/Main_Page>`_
31476e7fd84SAlexey Budankov.. [5] `<https://www.kernel.org/doc/html/latest/security/credentials.html>`_
31576e7fd84SAlexey Budankov.. [6] `<http://man7.org/linux/man-pages/man7/capabilities.7.html>`_
31676e7fd84SAlexey Budankov.. [7] `<http://man7.org/linux/man-pages/man2/ptrace.2.html>`_
31768570ca0SAlexey Budankov.. [8] `<https://en.wikipedia.org/wiki/Hardware_performance_counter>`_
31868570ca0SAlexey Budankov.. [9] `<https://en.wikipedia.org/wiki/Model-specific_register>`_
319e152c7b7SAlexey Budankov.. [10] `<http://man7.org/linux/man-pages/man5/acl.5.html>`_
3209d87bbaeSAlexey Budankov.. [11] `<http://man7.org/linux/man-pages/man2/getrlimit.2.html>`_
3219d87bbaeSAlexey Budankov.. [12] `<http://man7.org/linux/man-pages/man5/limits.conf.5.html>`_
322902a8dccSAlexey Budankov.. [13] `<https://sites.google.com/site/fullycapable>`_
323902a8dccSAlexey Budankov.. [14] `<http://man7.org/linux/man-pages/man8/auditd.8.html>`_
3241dd88c19SAlexey Budankov.. [15] `<https://man7.org/linux/man-pages/man8/sudo.8.html>`_
3251dd88c19SAlexey Budankov.. [16] `<https://git.kernel.org/pub/scm/libs/libcap/libcap.git/>`_
326