Appunti dalla conferenza
[gapil.git] / procadv.tex
index 98d403122e43dbf09d50c15aeb257fee4481283c..4989cee79ffa7a7dcedfa3beeb8abf2a01c06c9f 100644 (file)
@@ -14,7 +14,7 @@ I/O ecc.
 \section{Funzioni di gestione e controllo}
 \label{sec:proc_manage_control}
 
-In questa sezione prenderemo in esame alcune specifice \textit{system call}
+In questa sezione prenderemo in esame alcune specifiche \textit{system call}
 dedicate al controllo processi sia per quanto riguarda l'impostazione di
 caratteristiche specialistiche, che per quanto riguarda l'analisi ed il
 controllo della loro esecuzione.
@@ -25,7 +25,7 @@ controllo della loro esecuzione.
 Benché la gestione ordinaria dei processi possa essere effettuata attraverso
 le funzioni che abbiamo già esaminato nei capitoli \ref{cha:process_interface}
 e \ref{cha:process_handling}, esistono una serie di proprietà e
-caratteristiche specifiche dei proecessi per la cui gestione è stata
+caratteristiche specifiche dei processi per la cui gestione è stata
 predisposta una apposita \textit{system call} che fornisce una interfaccia
 generica per tutte le operazioni specialistiche. La funzione di sistema è
 \funcd{prctl} ed il suo prototipo è:\footnote{la funzione non è standardizzata
@@ -213,8 +213,8 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   ``\textit{tracer process}''. Questa è una funzionalità fornita da
   \textit{``Yama''}, uno specifico \textit{Linux Security Modules}, e serve a
   consentire al processo indicato, quando le restrizioni introdotte da questo
-  modulo sono attive, di usare \func{ptrace}\unavref{ (vedi
-    sez.\ref{sec:process_ptrace})} sul processo chiamante, anche se quello
+  modulo sono attive, di usare \func{ptrace} (vedi
+  sez.~\ref{sec:process_ptrace}) sul processo chiamante, anche se quello
   indicato non ne è un progenitore. Il valore \constd{PR\_SET\_PTRACER\_ANY}
   consente a tutti i processi l'uso di \func{ptrace}. L'uso si \textit{Yama}
   attiene alla gestione della sicurezza dei processi, e consente di introdurre
@@ -223,44 +223,29 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   scopo di queste dispense, per i dettagli si consulti la documentazione su
   \textit{Yama} nei sorgenti del kernel. Introdotta a partire dal kernel 3.4.
 
-\itindbeg{secure~computing~mode}
-\item[\constd{PR\_SET\_SECCOMP}] Imposta il cosiddetto \textit{secure computing
-    mode} per il processo corrente. Prevede come unica possibilità
-  che \param{arg2} sia impostato ad 1. Una volta abilitato il \textit{secure
-    computing mode} il processo potrà utilizzare soltanto un insieme
-  estremamente limitato di \textit{system call}: \func{read}, \func{write},
-  \func{\_exit} e \funcm{sigreturn}. Ogni altra \textit{system call} porterà
-  all'emissione di un \signal{SIGKILL} (vedi sez.~\ref{sec:sig_termination}).
-  Il \textit{secure computing mode} è stato ideato per fornire un supporto per
-  l'esecuzione di codice esterno non fidato e non verificabile a scopo di
-  calcolo;\footnote{lo scopo è quello di poter vendere la capacità di calcolo
-    della proprio macchina ad un qualche servizio di calcolo distribuito senza
-    comprometterne la sicurezza eseguendo codice non sotto il proprio
-    controllo.} in genere i dati vengono letti o scritti grazie ad un socket o
-  una \textit{pipe}, e per evitare problemi di sicurezza non sono possibili
-  altre operazioni se non quelle citate.  Introdotta a partire dal kernel
-  2.6.23, disponibile solo se si è abilitato il supporto nel kernel con
-  \texttt{CONFIG\_SECCOMP}.
-
-% TODO a partire dal kernel 3.5 è stato introdotto la possibilità di usare un
-% terzo argomento se il secondo è SECCOMP_MODE_FILTER, vedi
-% Documentation/prctl/seccomp_filter.txt 
-% vedi anche http://lwn.net/Articles/600250/
-
-% TODO documentare PR_SET_SECCOMP introdotto a partire dal kernel 3.5. Vedi:
-% * Documentation/prctl/seccomp_filter.txt
-% * http://lwn.net/Articles/475043/
-
-% TODO a partire dal kernel 3.17 è stata introdotta la nuova syscall seccomp,
-% vedi http://lwn.net/Articles/600250/ e http://lwn.net/Articles/603321/
+\item[\constd{PR\_SET\_SECCOMP}] Attiva il \textit{secure computing mode} per
+  il processo corrente. Introdotta a partire dal kernel 2.6.23 la funzionalità
+  è stata ulteriormente estesa con il kernel 3.5, salvo poi diventare un
+  sottoinsieme della \textit{system call} \func{seccomp} a partire dal kernel
+  3.17. Prevede che si indichi per \param{arg2} il valore
+  \const{SECCOMP\_MODE\_STRICT} (unico possibile fino al kernel 2.6.23) per
+  selezionare il cosiddetto \textit{strict mode} o, dal kernel 3.5,
+  \const{SECCOMP\_MODE\_FILTER} per usare il \textit{filter mode}. Tratteremo
+  questa opzione nei dettagli più avanti, in sez.~\ref{sec:procadv_seccomp},
+  quando affronteremo l'argomento del \textit{Secure Computing}.
 
 \item[\constd{PR\_GET\_SECCOMP}] Ottiene come valore di ritorno della funzione
-  lo stato corrente del \textit{secure computing mode}, al momento attuale la
-  funzione è totalmente inutile in quanto l'unico valore ottenibile è 0, dato
-  che la chiamata di questa funzione in \textit{secure computing mode}
-  comporterebbe l'emissione di \signal{SIGKILL}, è stata comunque definita per
-  eventuali estensioni future. Introdotta a partire dal kernel 2.6.23.
-\itindend{secure~computing~mode}
+  lo stato corrente del \textit{secure computing mode}. Fino al kernel 3.5,
+  quando era possibile solo lo \textit{strict mode}, la funzione era
+  totalmente inutile in quanto l'unico valore ottenibile era 0 in assenza di
+  \textit{secure computing}, dato che la chiamata di questa funzione in
+  \textit{strict mode} avrebbe comportato l'emissione di \signal{SIGKILL} per
+  il chiamante. La funzione però, a partire dal kernel 2.6.23, era stata
+  comunque definita per eventuali estensioni future, ed infatti con
+  l'introduzione del \textit{filter mode} con il kernel 3.5, se essa viene
+  inclusa nelle funzioni consentite restituisce il valore 2 quando il
+  \textit{secure computing mode} è attivo (se non inclusa si avrà di nuovo un
+  \signal{SIGKILL}).
 
 \item[\constd{PR\_SET\_SECUREBITS}] Imposta i \textit{securebits} per il
   processo chiamante al valore indicato da \param{arg2}; per i dettagli sul
@@ -296,8 +281,8 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   generazione di un segnale di \signal{SIGSEGV} (vedi
   sez.~\ref{sec:sig_prog_error}). La lettura viene automaticamente
   disabilitata se si attiva il \textit{secure computing mode} (vedi
-  \const{PR\_SET\_SECCOMP}).  Introdotta a partire dal kernel
-  2.6.26, solo su x86.
+  \const{PR\_SET\_SECCOMP} e sez.~\ref{sec:procadv_seccomp}).  Introdotta a
+  partire dal kernel 2.6.26, solo su x86.
 
 \item[\constd{PR\_GET\_TSC}] Ottiene il valore del flag che controlla la
   lettura del contattore dei \textit{timestamp}, salvato all'indirizzo
@@ -409,8 +394,8 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 \end{basedescript}
 
 
-%\subsection{La funzione \func{ptrace}}
-%\label{sec:process_ptrace}
+\subsection{La funzione \func{ptrace}}
+\label{sec:process_ptrace}
 
 %Da fare
 
@@ -422,6 +407,12 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 % TODO: trattare PTRACE_O_SUSPEND_SECCOMP, aggiunta con il kernel 4.3, vedi
 % http://lwn.net/Articles/656675/ 
 
+\subsection{La funzione \func{kcmp}}
+\label{sec:process_kcmp}
+
+%Da fare
+% vedi man kcmp e man 2 open
+
 
 \section{La gestione avanzata della creazione dei processi}
 \label{sec:process_adv_creation}
@@ -429,7 +420,7 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 In questa sezione tratteremo le funzionalità avanzate relative alla creazione
 dei processi e del loro ambiente, sia per quanto riguarda l'utilizzo delle
 stesse per la creazione dei \textit{thread} che per la gestione dei
-\textit{namespace} che sono alla base dei cosidetti \textit{container}.
+\textit{namespace} che sono alla base dei cosiddetti \textit{container}.
 
 
 \subsection{La \textit{system call} \func{clone}}
@@ -606,10 +597,10 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa
   informazioni, che saranno così indipendenti per i due processi, come avviene
   nel comportamento ordinario di un sistema unix-like.
 
-\item[\constd{CLONE\_IO}] se questo flag viene impostato il nuovo il nuovo
-  processo condividerà con il padre il contesto dell'I/O, altrimenti, come
-  come avviene nel comportamento ordinario con una \func{fork} otterrà un suo
-  contesto dell'I/O. 
+\item[\constd{CLONE\_IO}] se questo flag viene impostato il nuovo processo
+  condividerà con il padre il contesto dell'I/O, altrimenti, come avviene nel
+  comportamento ordinario con una \func{fork} otterrà un suo contesto
+  dell'I/O.
 
   Il contesto dell'I/O viene usato dagli \textit{scheduler} di I/O (visti in
   sez.~\ref{sec:io_priority}) e se questo è lo stesso per diversi processi
@@ -716,9 +707,11 @@ degli altri gruppi, che costituisce poi quello che viene chiamato un
 \label{sec:process_security}
 
 Tratteremo in questa sezione le funzionalità più avanzate relative alla
-gestione della sicurezza, a partire dalle \textit{capabilities} e dalle
-funzionalità di \textit{Secure Computing}, fino alle funzionalità relative
-alla gestione delle chiavi crittografiche.
+gestione della sicurezza ed il controllo degli accessi all'interno dei
+processi, a partire dalle \textit{capabilities} e dalle funzionalità di
+\textit{Secure Computing}. Esamineremo inoltre tutte le altre funzionalità
+relative alla sicurezza come gestione delle chiavi crittografiche e varie
+estensioni e funzionalità disponibili su questo argomento.
 
 
 
@@ -748,7 +741,7 @@ definitivamente alcuni privilegi da un certo momento in poi.
 
 Per risolvere questo problema sono possibili varie soluzioni ed ad esempio dai
 kernel 2.5 è stata introdotta la struttura dei
-\itindex{Linux~Security~Modules} \textit{Linux Security Modules} che han
+\itindex{Linux~Security~Modules~(LSM)} \textit{Linux Security Modules} che han
 permesso di aggiungere varie forme di \itindex{Mandatory~Access~Control~(DAC)}
 \textit{Mandatory Access Control} (MAC), in cui si potessero parcellizzare e
 controllare nei minimi dettagli tutti i privilegi e le modalità in cui questi
@@ -999,7 +992,7 @@ riesce così a riottenere il comportamento classico di un sistema unix-like.
 Una seconda circostanza è quella relativa a cosa succede alle
 \textit{capabilities} di un processo nelle possibili transizioni da \ids{UID}
 nullo a \ids{UID} non nullo o viceversa (corrispondenti rispettivamente a
-cedere o riottenere i privilegi di amministratore) che si possono effettuare
+cedere o riottenere i privilegi di amministratore) che si possono effettuare
 con le varie funzioni viste in sez.~\ref{sec:proc_setuid}. In questo caso la
 casistica è di nuovo alquanto complessa, considerata anche la presenza dei
 diversi gruppi di identificatori illustrati in tab.~\ref{tab:proc_uid_gid}, si
@@ -1129,15 +1122,14 @@ operazioni si rimanda alla rilettura di sez.~\ref{sec:process_prctl}.
 % http://lwn.net/Articles/211883/
 
 
-Un elenco delle delle \textit{capabilities} disponibili su Linux, con una
-breve descrizione ed il nome delle costanti che le identificano, è riportato
-in tab.~\ref{tab:proc_capabilities};\footnote{l'elenco presentato questa
-  tabella, ripreso dalla pagina di manuale (accessibile con \texttt{man
-    capabilities}) e dalle definizioni in
-  \texttt{include/linux/capabilities.h}, è aggiornato al kernel 3.2.} la
-tabella è divisa in due parti, la prima riporta le \textit{capabilities}
-previste anche nella bozza dello standard POSIX1.e, la seconda quelle
-specifiche di Linux.  Come si può notare dalla tabella alcune
+Un elenco delle \textit{capabilities} disponibili su Linux, con una breve
+descrizione ed il nome delle costanti che le identificano, è riportato in
+tab.~\ref{tab:proc_capabilities};\footnote{l'elenco presentato questa tabella,
+  ripreso dalla pagina di manuale (accessibile con \texttt{man capabilities})
+  e dalle definizioni in \texttt{include/linux/capabilities.h}, è aggiornato
+  al kernel 3.2.} la tabella è divisa in due parti, la prima riporta le
+\textit{capabilities} previste anche nella bozza dello standard POSIX1.e, la
+seconda quelle specifiche di Linux.  Come si può notare dalla tabella alcune
 \textit{capabilities} attengono a singole funzionalità e sono molto
 specializzate, mentre altre hanno un campo di applicazione molto vasto, che è
 opportuno dettagliare maggiormente.
@@ -1333,7 +1325,7 @@ sez.~\ref{sec:sock_ioctl_netdevice}) ed impostare la tabella di instradamento.
 Una terza \textit{capability} con vasto campo di applicazione è
 \const{CAP\_SYS\_ADMIN}, che copre una serie di operazioni amministrative,
 come impostare le quote disco (vedi sez.\ref{sec:disk_quota}), attivare e
-disattivare la swap, montare, rimontare e smontare filesystem (vedi
+disattivare la \textit{swap}, montare, rimontare e smontare filesystem (vedi
 sez.~\ref{sec:filesystem_mounting}), effettuare operazioni di controllo su
 qualunque oggetto dell'IPC di SysV (vedi sez.~\ref{sec:ipc_sysv}), operare
 sugli attributi estesi dei file di classe \texttt{security} o \texttt{trusted}
@@ -2020,10 +2012,175 @@ funzione.
 
 
 
+\subsection{La gestione del \textit{Secure Computing}.}
+\label{sec:procadv_seccomp}
+
+\itindbeg{secure~computing~mode}
+
+Il \textit{secure computing mode} è un meccanismo ideato per fornire un
+supporto per l'esecuzione di codice esterno non fidato e non verificabile a
+scopo di calcolo. L'idea era quella di disporre di una modalità di esecuzione
+dei programmi che permettesse di vendere la capacità di calcolo della propria
+macchina ad un qualche servizio di calcolo distribuito, senza comprometterne
+la sicurezza eseguendo codice non sotto il proprio controllo.
+
+La prima versione del meccanismo è stata introdotta con il kernel
+2.6.23,\footnote{e disponibile solo avendo abilitato il supporto nel kernel
+  con l'opzione di configurazione \texttt{CONFIG\_SECCOMP}.} è molto semplice,
+il \textit{secure computing mode} viene attivato con \func{prctl} usando
+l'opzione \const{PR\_SET\_SECCOMP}, ed indicando \const{SECCOMP\_MODE\_STRICT}
+come valore per \param{arg2} (all'epoca unico valore possibile).  Una volta
+abilitato in questa modalità (in seguito denominata \textit{strict mode}) il
+processo o il \textit{thread} chiamante potrà utilizzare soltanto un insieme
+estremamente limitato di \textit{system call}: \func{read}, \func{write},
+\func{\_exit} e \funcm{sigreturn}; l'esecuzione di qualsiasi altra
+\textit{system call} comporta l'emissione di un \signal{SIGKILL} e conseguente
+terminazione immediata del processo.
+
+Si tenga presente che in questo caso, con versioni recenti della \acr{glibc}
+(il comportamento è stato introdotto con la 2.3), diventa impossibile usare
+anche \func{\_exit} in \textit{strict mode}, in quanto questa funzione viene
+intercettata ed al suo posto viene chiamata \func{exit\_group} (vedi
+sez.~\ref{sec:pthread_management}) che non è consentita e comporta un
+\signal{SIGKILL}.
+
+Si tenga presente che, non essendo \func{execve} fra le funzioni permesse, per
+poter eseguire un programma terzo essendo in \textit{strict mode} questo dovrà
+essere fornito in una forma di codice interpretabile fornito attraverso un
+socket o una \textit{pipe}, creati prima di lanciare il processo che eseguirà
+il codice non fidato. 
+
+
+
+% TODO a partire dal kernel 3.5 è stato introdotto la possibilità di usare un
+% terzo argomento se il secondo è SECCOMP_MODE_FILTER, vedi
+% Documentation/prctl/seccomp_filter.txt 
+% vedi anche http://lwn.net/Articles/600250/
+
+% TODO documentare PR_SET_SECCOMP introdotto a partire dal kernel 3.5. Vedi:
+% * Documentation/prctl/seccomp_filter.txt
+% * http://lwn.net/Articles/475043/
+
+% TODO a partire dal kernel 3.17 è stata introdotta la nuova syscall seccomp,
+% vedi http://lwn.net/Articles/600250/ e http://lwn.net/Articles/603321/
+
+
+\itindend{secure~computing~mode}
+
+\subsection{Altre funzionalità di sicurezza.}
+\label{sec:procadv_security_misc}
+
+Oltre alle funzionalità specifiche esaminate nelle sezioni precedenti, il
+kernel supporta una varietà di ulteriori impostazioni di sicurezza,
+accessibili nelle maniere più varie, che abbiamo raccolto in questa sezione.
+
+Una serie di modalità di sicurezza sono attivabili a richiesta attraverso
+alcune opzioni di controllo attivabili via \func{sysctl} o il filesystem
+\texttt{/proc}, un elenco delle stesse e dei loro effetti è il seguente:
+
+\begin{basedescript}{\desclabelwidth{1cm}\desclabelstyle{\nextlinelabel}}
+\item[\sysctlrelfiled{fs}{protected\_hardlinks}] Un valore nullo, il default,
+  mantiene il comportamento standard che non pone restrizioni alla creazione
+  di \textit{hard link}. Se il valore viene posto ad 1 vengono invece attivate
+  una serie di restrizioni protettive, denominate
+  \itindex{protected~hardlinks} \textit{protected hardlinks}, che se non
+  soddisfatte causano il fallimento di \func{link} con un errore di
+  \errval{EPERM}. Perché questo non avvenga almeno una delle seguenti
+  condizioni deve essere soddisfatta:
+  \begin{itemize*}
+  \item il chiamante deve avere privilegi amministrativi (la
+    \textit{capability} \const{CAP\_FOWNER}). In caso di utilizzo
+    dell'\textit{user namespace} oltre a possedere \const{CAP\_FOWNER} è
+    necessario che l'\ids{UID} del proprietario del file sia mappato nel
+    \textit{namespace}.
+  \item il \textit{filesystem} \ids{UID} del chiamante (normalmente
+    equivalente all'\ids{UID} effettivo) deve corrispondere a quello del
+    proprietario del file a cui si vuole effettuare il collegamento.
+  \item devono essere soddisfatte tutte le seguenti condizioni:
+    \begin{itemize*}
+    \item il file è un file ordinario
+    \item il file non ha il \acr{suid} bit attivo
+    \item il file non ha lo \acr{sgid} bit attivo ed il permesso di esecuzione
+      per il gruppo
+    \item il chiamante ha i permessi di lettura e scrittura sul file
+    \end{itemize*}
+  \end{itemize*}
+
+  In sostanza in questo caso un utente potrà creare un collegamento diretto ad
+  un altro file solo se ne è il proprietario o se questo è un file ordinario
+  senza permessi speciali ed a cui ha accesso in lettura e scrittura.
+
+  Questa funzionalità fornisce una protezione generica che non inficia l'uso
+  ordinario di \func{link}, ma rende impraticabili una serie di possibili
+  abusi della stessa; oltre ad impedire l'uso di un \textit{hard link} come
+  variante in un attacco di \textit{symlink race} (eludendo i
+  \textit{protected symlinks} di cui al punto successivo), evita anche che si
+  possa lasciare un riferimento ad un eventuale programma \acr{suid}
+  vulnerabile, creando un collegamento diretto allo stesso.
+
+
+\item[\sysctlrelfiled{fs}{protected\_symlinks}] Un valore nullo, il default,
+  mantiene il comportamento standard che non pone restrizioni nel seguire i
+  link simbolici. Se il valore viene posto ad 1 vengono attivate delle
+  restrizioni protettive, denominate \itindex{protected~symlinks}
+  \textit{protected symlinks}. Quando vengono attivate una qualunque funzione
+  che esegua la risoluzione di un \textit{pathname} contenente un link
+  simbolico non conforme alle restrizioni fallirà con un errore di
+  \errval{EACCESS}. Per evitare l'errore deve essere soddisfatta una delle
+  seguenti condizioni:
+  \begin{itemize*}
+  \item il link non è in una directory con permessi analoghi a \file{/tmp}
+    (scrivibile a tutti e con lo \textit{sticky bit} attivo);
+  \item il link è in una directory con permessi analoghi a \file{/tmp} ma è
+    soddisfatta una delle condizioni seguenti: 
+    \begin{itemize*}
+    \item il link simbolico appartiene al chiamante: il controllo viene fatto
+      usando il \textit{filesystem} \ids{UID} (che normalmente corrisponde
+      all'\ids{UID} effettivo).
+    \item il link simbolico ha lo stesso proprietario della directory.
+    \end{itemize*}
+  \end{itemize*}
+
+  Questa funzionalità consente di rendere impraticabili alcuni attacchi in cui
+  si approfitta di una differenza di tempo fra il controllo e l'uso di un
+  file, ed in particolare quella classe di attacchi viene usualmente chiamati
+  \textit{symlink attack},\footnote{si tratta di un sottoinsieme di quella
+    classe di attacchi chiamata genericamente \textit{TOCTTOU}, acronimo
+    appunto di \textit{Time of check to time of use}.} di cui abbiamo parlato
+  in sez.~\ref{sec:file_temp_file}.
+
+  Un possibile esempio di questo tipo di attacco è quello contro un programma
+  che viene eseguito per conto di un utente privilegiato (ad esempio un
+  programma con il \acr{suid} o lo \acr{sgid} bit attivi) che prima controlla
+  l'esistenza di un file e se non esiste lo crea. Se questa procedura, che è
+  tipica della creazione di file temporanei sotto \file{/tmp}, non viene
+  eseguita in maniera corretta,\footnote{ad esempio con le modalità che
+    abbiamo trattato in sez.~\ref{sec:file_temp_file}, che per quanto note da
+    tempo continuano ad essere ignorate.} un attaccante ha una finestra di
+  tempo in cui può creare prima del programma un \textit{link simbolico} ad un
+  file di sua scelta, compresi file di dispositivo o file a cui non avrebbe
+  accesso, facendolo poi utilizzare al programma.
+
+  Attivando la funzionalità si rende impossibile seguire un link simbolico in
+  una directory temporanea come \texttt{/tmp}, a meno che questo non sia di
+  proprietà del chiamante, o che questo non appartenga al proprietario della
+  directory. Questo impedisce che i link simbolici creati da un attaccante
+  possano essere seguiti da un programma privilegiato (perché apparterranno
+  all'attaccante) mentre quelli creati dall'amministratore (che i genere è il
+  proprietario di \texttt{/tmp}) saranno seguiti comunque.
+
+\end{basedescript}
+
+
+% TODO: trattare pure protected_regular e protected_fifos introdotti con il
+% 4.19 (vedi https://lwn.net/Articles/763106/)
+
 
 
 % TODO: trattare keyctl (man 2 keyctl)
 
+
+
 % TODO trattare le funzioni di protezione della memoria pkey_alloc, pkey_free,
 % pkey_mprotect, introdotte con il kernel 4.8, vedi
 % http://lwn.net/Articles/689395/ e Documentation/x86/protection-keys.txt 
@@ -2095,3 +2252,40 @@ Da fare
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End:
+
+%  LocalWords:  system call namespace prctl IRIX kernel sys int option long
+%  LocalWords:  unsigned arg errno EACCESS EBADF EBUSY EFAULT EINVAL ENXIO PR
+%  LocalWords:  EOPNOTSUPP EPERM CAPBSET READ capability sez tab capabilities
+%  LocalWords:  bounding CAP SETPCAP DUMPABLE dump suid sgid UID DISABLE GET
+%  LocalWords:  ENDIAN endianness BIG big endian LITTLE little PPC PowerPC ia
+%  LocalWords:  FPEMU NOPRINT SIGFPE FPEXC point exception FP EXC SW ENABLE
+%  LocalWords:  OVF overflow UND underflow RES INV DISABLED NONRECOV ASYNC AO
+%  LocalWords:  KEEPCAPS pag exec SECURE KEEP CAPS securebits LOCKED NAME NUL
+%  LocalWords:  char PDEATHSIG SIGCHLD fork PTRACER PID tracer process ptrace
+%  LocalWords:  Security Modules ANY Yama SECCOMP secure computing seccomp vm
+%  LocalWords:  STRICT strict FILTER filter SIGKILL TIMING STATISTICAL TSC fn
+%  LocalWords:  TIMESTAMP timestamp Stamp Counter SIGSEGV UNALIGN SIGBUS MCE
+%  LocalWords:  KILL siginfo MCEERR memory failure early kill CLEAR child cap
+%  LocalWords:  reaper SUBREAPER init value result thread like flags stack FS
+%  LocalWords:  race condition malloc NULL copy write glibc vsyscall sched RT
+%  LocalWords:  void pid ptid struct desc tls ctid EAGAIN ENOMEM exit Posix
+%  LocalWords:  Library PARENT SETTID SETTLS TID CLEARTID futex FILES table
+%  LocalWords:  descriptor umask dell'I scheduler SIGHAND STOPPED SYSVSEM IPC
+%  LocalWords:  UNTRACED VFORK vfork mount filesystem LSM Mandatory Access fs
+%  LocalWords:  Control DAC MAC SELinux Smack Tomoyo AppArmor Discrectionary
+%  LocalWords:  permitted inheritable effective fig security ADMIN forced new
+%  LocalWords:  allowed dall' bound MODULE nell' all' capset sendmail SETGID
+%  LocalWords:  setuid orig IMMUTABLE MKNOD OVERRIDE SEARCH CHOWN FSETID LOCK
+%  LocalWords:  FOWNER saved FIXUP NOROOT AUDIT BLOCK SUSPEND SETFCAP group
+%  LocalWords:  socket domain locking mlock mlockall shmctl mmap OWNER LEASE
+%  LocalWords:  lease immutable append only mknod BIND SERVICE BROADCAST RAW
+%  LocalWords:  broadcast multicast PACKET CHROOT chroot NICE PACCT RAWIO TTY
+%  LocalWords:  accounting ioperm iopl RESOURCE CONFIG hangup vhangup SYSLOG
+%  LocalWords:  WAKE ALARM CLOCK BOOTTIME REALTIME sticky NOATIME fcntl swap
+%  LocalWords:  multicasting dell'IPC SysV trusted IOPRIO CLASS IDLE lookup
+%  LocalWords:  scheduling dcookie NEWNS unshare nice NUMA ioctl journaling
+%  LocalWords:  ext capget header hdrp datap const ESRCH SOURCE undef version
+%  LocalWords:  libcap lcap obj to text dup clear DIFFERS get ncap caps ssize
+%  LocalWords:  argument length all setpcap from string name proc cat capgetp
+%  LocalWords:  capsetp getcap read sigreturn sysctl protected hardlinks tmp
+%  LocalWords:  dell' symlink symlinks pathname TOCTTOU of