Ancora su prctl, quasi completate le opzioni, riposizionati alcuni TODO.
[gapil.git] / prochand.tex
index 8d7487b54fd97af4d4c5cda770cc2f1129708b0c..e3aa1e0152cf5cbf79b658f9f78bd5ecad1c940a 100644 (file)
@@ -3363,7 +3363,7 @@ predefinite del seguente elenco, che illustra quelle disponibili al momento:
   kernel 2.3.20, fino al kernel 2.6.12 e per i kernel successivi al 2.6.17 era
   possibile usare solo un valore 0 di \param{arg2} per disattivare il flag ed
   un valore 1 per attivarlo, nei kernel dal 2.6.13 al 2.6.17 è stato
-  supportato anche il valore 2 che causava la generazione di un
+  supportato anche il valore 2, che causava la generazione di un
   \itindex{core~dump} \textit{core dump} leggibile solo
   dall'amministratore.\footnote{la funzionalità è stata rimossa per motivi di
     sicurezza, in quanto consentiva ad un utente normale di creare un file di
@@ -3378,40 +3378,143 @@ predefinite del seguente elenco, che illustra quelle disponibili al momento:
   sono: \const{PR\_ENDIAN\_BIG} (\textit{big endian}),
   \const{PR\_ENDIAN\_LITTLE} (\textit{little endian}), e
   \const{PR\_ENDIAN\_PPC\_LITTLE} (lo pseudo \textit{little endian} del
-  PowerPC) Introdotta a partire dal kernel 2.6.18, solo per architettura
+  PowerPC). Introdotta a partire dal kernel 2.6.18, solo per architettura
   PowerPC.
 \item[\const{PR\_GET\_ENDIAN}] Ottiene il valore della \textit{endianess} del
   processo chiamante, salvato sulla variabile puntata da \param{arg2} che deve
   essere passata come di tipo \type{(int *)}. Introdotta a partire dal kernel
   2.6.18, solo su PowerPC.
-\item[\const{PR\_SET\_FPEMU}] Introdotta a partire dal kernel 2.4.18, solo su
-  ia64.
-\item[\const{PR\_GET\_FPEMU}] Introdotta a partire dal kernel 2.4.18, solo su
-  ia64.
-\item[\const{PR\_SET\_FPEXC}] Introdotta a partire dal kernel 2.4.21, solo su
-  PowerPC.
-\item[\const{PR\_GET\_FPEXC}] Introdotta a partire dal kernel 2.4.21, solo su
-  PowerPC.
-\item[\const{PR\_SET\_KEEPCAPS}] Introdotta  a partire dal kernel 2.2.18.
-\item[\const{PR\_GET\_KEEPCAPS}] Introdotta a partire dal kernel 2.2.18.
-\item[\const{PR\_SET\_NAME}] Introdotta a partire  dal kernel 2.6.9.
-\item[\const{PR\_GET\_NAME}] Introdotta a partire  dal kernel 2.6.9.
-\item[\const{PR\_SET\_PDEATHSIG}] Introdotta  a partire dal kernel 2.1.57.
-\item[\const{PR\_GET\_PDEATHSIG}] Introdotta a partire  dal kernel 2.3.15.
-\item[\const{PR\_SET\_SECCOMP}] Introdotta a partire  dal kernel 2.6.23.
-\item[\const{PR\_GET\_SECCOMP}] Introdotta a partire  dal kernel 2.6.23.
-\item[\const{PR\_SET\_SECUREBITS}] Introdotta a partire  dal kernel 2.6.26.
-\item[\const{PR\_GET\_SECUREBITS}] Introdotta a partire  dal kernel 2.6.26.
-\item[\const{PR\_SET\_TIMING}] Introdotta a partire  dal kernel 2.6.0-test4.
-\item[\const{PR\_GET\_TIMING}] Introdotta a partire dal kernel 2.6.0-test4.
-\item[\const{PR\_SET\_TSC}] Introdotta a partire dal kernel 2.6.26, solo su
-  x86.
-\item[\const{PR\_GET\_TSC}] Introdotta a partire dal kernel 2.6.26, solo su
-  x86.
-\item[\const{PR\_SET\_UNALIGN}] Introdotta con diverse versioni su diverse
-  architetture.
-\item[\const{PR\_GET\_UNALIGN}] Introdotta con diverse versioni su diverse
+\item[\const{PR\_SET\_FPEMU}] Imposta i bit di controllo per l'emulazione
+  della virgola mobile su architettura ia64, secondo il valore
+  di \param{arg2}, si deve passare \const{PR\_FPEMU\_NOPRINT} per emulare in
+  maniera trasparente l'accesso alle operazioni in virgola mobile, o
+  \const{PR\_FPEMU\_SIGFPE} per non emularle ed inviare il segnale
+  \const{SIGFPE}. Introdotta a partire dal kernel 2.4.18, solo su ia64.
+\item[\const{PR\_GET\_FPEMU}] Ottiene il valore dei flag di controllo
+  dell'emulazione della virgola mobile, salvato all'indirizzo puntato
+  da \param{arg2}, che deve essere di tipo \code{(int *)}. Introdotta a
+  partire dal kernel 2.4.18, solo su ia64.
+\item[\const{PR\_SET\_FPEXC}] Imposta la modalità delle eccezioni in virgola
+  mobile (\textit{floating-point exception mode}) al valore di \param{arg2}.
+  I valori possibili sono: \const{PR\_FP\_EXC\_SW\_ENABLE} per usare FPEXC per
+  le eccezioni, \const{PR\_FP\_EXC\_DIV} per la divisione per zero in virgola
+  mobile, \const{PR\_FP\_EXC\_OVF} per gli overflow, \const{PR\_FP\_EXC\_UND}
+  per gli underflow, \const{PR\_FP\_EXC\_RES} per risultati non esatti,
+  \const{PR\_FP\_EXC\_INV} per operazioni invalide,
+  \const{PR\_FP\_EXC\_DISABLED} per disabilitare le eccezioni,
+  \const{PR\_FP\_EXC\_NONRECOV} per utilizzare la modalità di eccesione
+  asincrona non recuperabile, \const{PR\_FP\_EXC\_ASYNC} per utilizzare la
+  modalità di eccesione asincrona recuperabile, \const{PR\_FP\_EXC\_PRECISE}
+  per la modalita precisa di eccezione.\footnote{trattasi di gestione
+    specialistica della gestione delle eccezioni dei calcoli in virgola mobile
+    che, i cui dettagli al momento vanno al di là dello scopo di questo
+    testo.} Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
+\item[\const{PR\_GET\_FPEXC}] Ottiene il valore della modalità delle eccezioni
+  delle operazioni in virgola mobile, salvata all'indirizzo
+  puntato \param{arg2}, che deve essere di tipo \code{(int *)}.  Introdotta a
+  partire dal kernel 2.4.21, solo su PowerPC.
+\item[\const{PR\_SET\_KEEPCAPS}] Consente di controllare quali
+  \textit{capabilities} vengono cancellate quando si esegue un cambiamento di
+  \textit{user-ID} del processo (per i dettagli si veda
+  sez.~\ref{sec:proc_capabilities}, in particolare quanto illustrato a
+  pag.~\pageref{sec:capability-uid-transition}). Un valore nullo (il default)
+  per \param{arg2} comporta che vengano cancellate, il valore 1 che vengano
+  manenute, questo valore viene sempre cancellato attraverso una
+  \func{exec}. L'uso di questo flag è stato sostituito, a partire dal kernel
+  2.6.26, dal flag \const{SECURE\_KEEP\_CAPS} dei \itindex{securebits}
+  \textit{securebits} (vedi \const{PR\_SET\_SECUREBITS}). Introdotta a partire
+  dal kernel 2.2.18.
+\item[\const{PR\_GET\_KEEPCAPS}] Ottiene come valore di ritorno della funzione
+  il valore del flag di controllo impostato con
+  \const{PR\_SET\_KEEPCAPS}. Introdotta a partire dal kernel 2.2.18.
+\item[\const{PR\_SET\_NAME}] Imposta il nome del processo chiamante alla
+  stringa puntata da \param{arg2}, che deve essere di tipo \code{(char *)}. Il
+  nome può essere lungo al massimo 16 caratteri, e la stringa deve essere
+  terminata da NUL se più corta.  Introdotta a partire dal kernel 2.6.9.
+\item[\const{PR\_GET\_NAME}] Ottiene il nome del processo chiamante nella
+  stringa puntata da \param{arg2}, che deve essere di tipo \code{(char *)}; si
+  devono allocare per questo almeno 16 byte, e il nome sarà terminato da NUL
+  se più corto. Introdotta a partire dal kernel 2.6.9.
+\item[\const{PR\_SET\_PDEATHSIG}] Consente di richiedere l'emissione di un
+  segnale, che sarà ricevuto dal processo chiamante, in occorrenza della
+  terminazione del proprio processo padre.\footnote{in sostanza consente di
+    invertire il ruolo di \const{SIGCHLD}.} Il valore di \param{arg2} deve
+  indicare il numero del segnale, o 0 per disabilitare l'emissione. Il valore
+  viene automaticamente cancellato per un processo figlio creato con
+  \func{fork}.  Introdotta a partire dal kernel 2.1.57.
+\item[\const{PR\_GET\_PDEATHSIG}] Ottiene il valore dell'eventuale segnale
+  emesso alla terminazione del padre, salvato all'indirizzo
+  puntato \param{arg2}, che deve essere di tipo \code{(int *)}. Introdotta a
+  partire dal kernel 2.3.15.
+\item[\const{PR\_SET\_SECCOMP}] Imposta il cosiddetto
+  \itindex{secure~computing~mode} \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
+  \func{sigreturn}, ogni altra \textit{system call} porterà all'emissione di
+  un \func{SIGKILL}.  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 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}.
+\item[\const{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 \texttt{SIGKILL}, è stata comunque definita per
+  eventuali estensioni future.  Introdotta a partire dal kernel 2.6.23.
+\item[\const{PR\_SET\_SECUREBITS}] Imposta i \itindex{securebits}
+  \textit{securebits} per il processo corrente al valore indicato
+  da \param{arg2}; per i dettagli si veda sez.~\ref{sec:proc_capabilities}, ed
+  in particolare i valori di tab.~\ref{tab:securebits_values} e la relativa
+  trattazione. Introdotta a partire dal kernel 2.6.26.
+\item[\const{PR\_GET\_SECUREBITS}] Ottiene come valore di ritorno della
+  funzione l'impostazione corrente per i \itindex{securebits}
+  \textit{securebits}. Introdotta a partire dal kernel 2.6.26.
+\item[\const{PR\_SET\_TIMING}] Imposta il metodo di temporizzazione del
+  processo da indicare con il valore di \param{arg2}, con
+  \const{PR\_TIMING\_STATISTICAL} si usa il metodo statistico tradizionale,
+  con \const{PR\_TIMING\_TIMESTAMP} il più accurato basato su dei
+  \textit{timestamp}, quest'ultimo però non è ancora implementato ed il suo
+  uso comporta la restituzione di un errore di \errval{EINVAL}. Introdotta a
+  partire dal kernel 2.6.0-test4.
+\item[\const{PR\_GET\_TIMING}] Ottiene come valore di ritorno della funzione
+  il metodo di temporizzazione del processo attualmente in uso. Introdotta a
+  partire dal kernel 2.6.0-test4.
+\item[\const{PR\_SET\_TSC}] Imposta il flag che indica se il processo può
+  leggere il registro di processore contenente il contatore dei
+  \textit{timestamp} (TSC, o \textit{Time Stamp Counter}) da indicare con il
+  valore di \param{arg2}. Si deve specificare \const{PR\_TSC\_ENABLE} per
+  abilitare la lettura o \const{PR\_TSC\_SIGSEGV} per disabilitarla con la
+  generazione di un segnale di \const{SIGSEGV}. La lettura viene
+  automaticamente disabilitata se si attiva il \textit{secure computing mode}.
+  Introdotta a partire dal kernel 2.6.26, solo su x86.
+\item[\const{PR\_GET\_TSC}] Ottiene il valore del flag che controlla la
+  lettura del contatatore dei \textit{timestamp}, salvato all'indirizzo
+  puntato \param{arg2}, che deve essere di tipo \code{(int *)}. Introdotta a
+  partire dal kernel 2.6.26, solo su x86.
+% articoli sul TSC e relativi problemi: http://lwn.net/Articles/209101/,
+% http://blog.cr0.org/2009/05/time-stamp-counter-disabling-oddities.html,
+% http://en.wikipedia.org/wiki/Time_Stamp_Counter 
+\item[\const{PR\_SET\_UNALIGN}] Imposta la modalità di controllo per l'accesso
+  a indirizzi di memoria non allineati, che in varie architetture risultano
+  illegali, da indicare con il valore di \param{arg2}. Si deve specificare
+  \const{PR\_UNALIGN\_NOPRINT} per ignorare gli accessi non allineati, e
+  \const{PR\_UNALIGN\_SIGBUS} per generare un segnale di \const{SIGBUS} in
+  caso di accesso non allineato.  Introdotta con diverse versioni su diverse
   architetture.
+\item[\const{PR\_GET\_UNALIGN}] Ottiene il valore della modalità di controllo
+  per l'accesso a indirizzi di memoria non allineati, salvato all'indirizzo
+  puntato \param{arg2}, che deve essere di tipo \code{(int *)}. Introdotta con
+  diverse versioni su diverse architetture.
+\item[\const{PR\_MCE\_KILL}] Introdotta a partire dal kernel 2.6.32.
+\item[\const{PR\_MCE\_KILL\_GET}] Introdotta a partire dal kernel 2.6.32.
 \label{sec:prctl_operation}
 \end{basedescript}
 
@@ -3432,6 +3535,10 @@ Da fare
 
 Da fare
 
+% TODO: funzioni varie sparse citate da qualche parte e da trattare forse in
+% una sezione a parte: sigreturn,
+
+
 \section{Problematiche di programmazione multitasking}
 \label{sec:proc_multi_prog}