X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=procadv.tex;h=4989cee79ffa7a7dcedfa3beeb8abf2a01c06c9f;hp=98d403122e43dbf09d50c15aeb257fee4481283c;hb=4d8005673a429c8d47d1b21b84aa839afdf17dda;hpb=743ef11e68d40acfca27b95a3438b4cec6c59a8a diff --git a/procadv.tex b/procadv.tex index 98d4031..4989cee 100644 --- a/procadv.tex +++ b/procadv.tex @@ -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 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