la cui gestione è stata predisposta una apposita \textit{system call} che
fornisce una interfaccia generica per tutte le operazioni specialistiche. La
funzione è \funcd{prctl} ed il suo prototipo è:\footnote{la funzione non è
- standardizzata ed è specifica di Linux, anche se ne esiete una analoga in
+ standardizzata ed è specifica di Linux, anche se ne esiste una analoga in
IRIX, è stata introdotta con il kernel 2.1.57.}
\begin{functions}
\headdecl{sys/prctl.h}
nell'argomento \param{arg2} con una delle costanti di
tab.~\ref{tab:proc_capabilities} dal \textit{capabilities bounding set} del
processo. L'operazione richiede i privilegi di amministratore (la capacità
- \const{CAP\_SETPCAP}), altrimenti fallisce con un errore di \errval{EPERM};
- se il valore di \param{arg2} non è valido o se il supporto per le
- \textit{file capabilities} non è stato compilato nel kernel fallisce con un
- errore di \errval{EINVAL}. Introdotta a partire dal kernel 2.6.25.
+ \const{CAP\_SETPCAP}), altrimenti la chiamata fallirà con un errore di
+ \errval{EPERM}; se il valore di \param{arg2} non è valido o se il supporto
+ per le \textit{file capabilities} non è stato compilato nel kernel la
+ chiamata fallirà con un errore di \errval{EINVAL}. Introdotta a partire dal
+ kernel 2.6.25.
\item[\const{PR\_SET\_DUMPABLE}] Imposta il flag che determina se la
terminazione di un processo a causa di un segnale per il quale è prevista la
generazione di un file di \itindex{core~dump} \textit{core dump} (vedi
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.
+ \const{SIGFPE} (vedi sez.~\ref{sec:sig_prog_error}). 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
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
+ \const{PR\_FP\_EXC\_NONRECOV} per utilizzare la modalità di eccezione
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
+ modalità di eccezione asincrona recuperabile, \const{PR\_FP\_EXC\_PRECISE}
+ per la modalità 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.
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
+ mantenute, 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 l'uso di \const{PR\_SET\_SECUREBITS} più avanti). 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
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.
+ terminazione del proprio processo padre; 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
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
+ un \func{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 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
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.
+ \textit{securebits} per il processo chiamante al valore indicato
+ da \param{arg2}; per i dettagli sul significato dei \textit{securebits} si
+ veda sez.~\ref{sec:proc_capabilities}, ed in particolare i valori di
+ tab.~\ref{tab:securebits_values} e la relativa trattazione. L'operazione
+ richiede i privilegi di amministratore (la capacità \const{CAP\_SETPCAP}),
+ altrimenti la chiamata fallirà con un errore di \errval{EPERM}. 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\_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
+\item[\const{PR\_SET\_TSC}] Imposta il flag che indica se il processo
+ chiamante 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.
+ generazione di un segnale di \const{SIGSEGV} (vedi
+ sez.~\ref{sec:sig_prog_error}). 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
+ lettura del contattore 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://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.
+ illegali, da indicare con il valore di \param{arg2}. Si deve specificare il
+ valore \const{PR\_UNALIGN\_NOPRINT} per ignorare gli accessi non allineati,
+ ed il valore \const{PR\_UNALIGN\_SIGBUS} per generare un segnale di
+ \const{SIGBUS} (vedi sez.~\ref{sec:sig_prog_error}) 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.
+\item[\const{PR\_MCE\_KILL}] Imposta la politica di gestione degli errori
+ dovuti a corruzione della memoria per problemi hardware. Questo tipo di
+ errori vengono riportati dall'hardware di controllo della RAM e vengono
+ gestiti dal kernel,\footnote{la funzionalità è disponibile solo sulle
+ piattaforme più avanzate che hanno il supporto hardware per questo tipo di
+ controlli.} ma devono essere opportunamente riportati ai processi che
+ usano quella parte di RAM che presenta errori; nel caso specifico questo
+ avviene attraverso l'emissione di un segnale di \const{SIGBUS} (vedi
+ sez.~\ref{sec:sig_prog_error}).\footnote{in particolare viene anche
+ impostato il valore di \var{si\_code} in \struct{siginfo\_t} a
+ \const{BUS\_MCEERR\_AO}; per il significato di tutto questo si faccia
+ riferimento alla trattazione di sez.~\ref{sec:sig_sigaction}.}
+
+ Il comportamento di default prevede che per tutti i processi si applichi la
+ politica generale di sistema definita nel file
+ \procfile{/proc/sys/vm/memory\_failure\_early\_kill}, ma specificando
+ per \param{arg2} il valore \const{PR\_MCE\_KILL\_SET} è possibile impostare
+ con il contenuto di \param{arg3} una politica specifica del processo
+ chiamante. Si può tornare alla politica di default del sistema utilizzando
+ invece per \param{arg2} il valore \const{PR\_MCE\_KILL\_CLEAR}. In tutti i
+ casi, per compatibilità con eventuali estensioni future, tutti i valori
+ degli argomenti non utilizzati devono essere esplicitamente posti a zero,
+ pena il fallimento della chiamata con un errore di \errval{EINVAL}.
+
+ In caso di impostazione di una politica specifica del processo con
+ \const{PR\_MCE\_KILL\_SET} i valori di \param{arg3} possono essere soltanto
+ due, che corrispondono anche al valore che si trova nell'impostazione
+ generale di sistema di \texttt{memory\_failure\_early\_kill}, con
+ \const{PR\_MCE\_KILL\_EARLY} si richiede l'emissione immediata di
+ \const{SIGBUS} non appena viene rilevato un errore, mentre con
+ \const{PR\_MCE\_KILL\_LATE} il segnale verrà inviato solo quando il processo
+ tenterà un accesso alla memoria corrotta. Questi due valori corrispondono
+ rispettivamente ai valori 1 e 0 di
+ \texttt{memory\_failure\_early\_kill}.\footnote{in sostanza nel primo caso
+ viene immediatamente inviato il segnale a tutti i processi che hanno la
+ memoria corrotta mappata all'interno del loro spazio degli indirizzi, nel
+ secondo caso prima la pagina di memoria viene tolta dallo spazio degli
+ indirizzi di ciascun processo, mentre il segnale viene inviato solo quei
+ processi che tentano di accedervi.} Si può usare per \param{arg3} anche un
+ terzo valore, \const{PR\_MCE\_KILL\_DEFAULT}, che corrisponde a impostare
+ per il processo la politica di default.\footnote{si presume la politica di
+ default corrente, in modo da non essere influenzati da un eventuale
+ successivo cambiamento della stessa.} Introdotta a partire dal kernel
+ 2.6.32.
+\item[\const{PR\_MCE\_KILL\_GET}] Ottiene come valore di ritorno della
+ funzione la politica di gestione degli errori dovuti a corruzione della
+ memoria. Tutti gli argomenti non utilizzati (al momento tutti) devono essere
+ nulli pena la ricezione di un errore di \errval{EINVAL}. Introdotta a
+ partire dal kernel 2.6.32.
\label{sec:prctl_operation}
\end{basedescript}
% LocalWords: CONTINUED sources forking Spawned successfully executing exiting
% LocalWords: next cat for COMMAND pts bash defunct TRAPPED DUMPED Killable PR
% LocalWords: SIGKILL static RLIMIT preemption PREEMPT VOLUNTARY IDLE RTPRIO
-% LocalWords: Completely Fair compat Uniform CFQ Queuing elevator dev cfq RT
-% LocalWords: Documentation block syscall ioprio IPRIO CLASS class best effort
-% LocalWords: refresh semop dnotify MADV DONTFORK prctl WCLONE SIGCHL WALL
-% LocalWords: WNOTHREAD DUMPABLE KEEPCAPS
+% LocalWords: completely fair compat uniform CFQ queuing elevator dev cfq RT
+% LocalWords: documentation block syscall ioprio IPRIO CLASS class best effort
+% LocalWords: refresh semop dnotify MADV DONTFORK prctl WCLONE SIGCHL WALL big
+% LocalWords: WNOTHREAD DUMPABLE KEEPCAPS IRIX CAPBSET endianess endian
+% LocalWords: little PPC PowerPC FPEMU NOPRINT SIGFPE FPEXC point FP SW
+% LocalWords: exception EXC ENABLE OVF overflow UND underflow RES INV DISABLED
+% LocalWords: NONRECOV ASYNC KEEP securebits NAME NUL PDEATHSIG SECCOMP
+% LocalWords: secure computing sigreturn TIMING STATISTICAL TSC MCE
+% LocalWords: timestamp Stamp SIGSEGV UNALIGN SIGBUS MCEERR AO failure early
%%% Local Variables:
%%% mode: latex