\textit{pathname} assoluto, nel qual caso, come detto, il valore di
\param{dirfd} sarà completamente ignorato.
+% TODO: trattare openat2, introdotta con il kernel 5.6, vedi
+% https://lwn.net/Articles/796868/ e https://git.kernel.org/linus/b55eef872a96
+
\begin{table}[htb]
\centering
\footnotesize
aggiuntivo sono \textit{system call}, ad esempio \func{faccessat} e
\func{fchmodat} sono realizzate con dei \textit{wrapper} nella \acr{glibc} per
aderenza allo standard POSIX.1-2008, dato che la \textit{system call}
- sottostante non prevede l'argomento \param{flags}.
+ sottostante non prevede l'argomento \param{flags}.
+
+ % TODO: aggiornare per via di faccessat2 aggiunta con il kernel 5.8
In tab.~\ref{tab:at-functions_constant_values} si sono elencati i valori
utilizzabili per i flag (tranne quelli specifici di \func{statx} su cui
pertanto l'uso della funzione è analogo a quello delle altre funzioni che non
hanno l'argomento \param{flags} (e non la tratteremo esplicitamente).
+% TODO: documentare l'introduzione di fchmodat4() se e quando ci sarà, vedi
+% https://lwn.net/Articles/792628/
+
L'altro flag comune è \const{AT\_EMPTY\_PATH}, utilizzabile a partire dal
kernel 2.6.39, che consente di usare per \param{dirfd} un file descriptor
associato ad un file qualunque e non necessariamente ad una directory; in
\label{tab:proc_capabilities}
\end{table}
+ % TODO: verificare ed aggiungere le nuove capacità CAP_BPF, CAP_PERFMON, vedi
+ % https://lwn.net/Articles/822362/
+
\constbeg{CAP\_SETPCAP}
Prima di dettagliare il significato della capacità più generiche, conviene
% TODO documentare la syscall getrandom, introdotta con il kernel 3.17, vedi
% http://lwn.net/Articles/606141/, ed introdotta con le glibc solo con la
-% versione 2.25, vedi https://lwn.net/Articles/711013/
+% versione 2.25 con getentropy, vedi https://lwn.net/Articles/711013/ ed i
+% problemi successivi vedi https://lwn.net/Articles/800509/
%\subsection{La gestione delle chiavi crittografiche}
%\label{sec:keyctl_management}
% TODO documentare PR_SPEC_DISABLE_NOEXEC in 5.1, vedi
% https://lwn.net/Articles/782511/
+% TODO documentare PR_SET_IO_FLUSHER in 5.6, vedi
+% https://lwn.net/Articles/811230/
+
\label{sec:prctl_operation}
\end{basedescript}
% TODO: trattare userfaultfd, introdotta con il 4.23, vedi
-% http://man7.org/linux/man-pages/man2/userfaultfd.2.html
+% http://man7.org/linux/man-pages/man2/userfaultfd.2.html,
+% https://lwn.net/Articles/787308/, https://git.kernel.org/linus/57e5d4f278b9
+
% TODO: trattare process_vm_readv/process_vm_writev introdotte con il kernel
% 3.2, vedi http://man7.org/linux/man-pages/man2/process_vm_readv.2.html e i
utilizzata per verificare che il segnale indicato sia valido per la
piattaforma che si sta usando (se non lo è darà errore).
- Entrambi i puntatori fanno riferimento alla struttura \struct{sigaction},
- tramite la quale si specificano tutte le caratteristiche dell'azione associata
- ad un segnale. Anch'essa è descritta dallo standard POSIX.1 ed in Linux è
- definita secondo quanto riportato in fig.~\ref{fig:sig_sigaction}. Il campo
- \var{sa\_restorer}, non previsto dallo standard, è obsoleto e non deve essere
- più usato.
-
\begin{figure}[!htb]
\footnotesize \centering
\begin{minipage}[c]{0.8\textwidth}
\label{fig:sig_sigaction}
\end{figure}
+ Entrambi i puntatori fanno riferimento alla struttura \struct{sigaction},
+ tramite la quale si specificano tutte le caratteristiche dell'azione associata
+ ad un segnale. Anch'essa è descritta dallo standard POSIX.1 ed in Linux è
+ definita secondo quanto riportato in fig.~\ref{fig:sig_sigaction}. Il campo
+ \var{sa\_restorer}, non previsto dallo standard, è obsoleto e non deve essere
+ più usato.
+
Il campo \var{sa\_mask} serve ad indicare l'insieme dei segnali che devono
essere bloccati durante l'esecuzione del gestore, ad essi viene comunque
sempre aggiunto il segnale che ne ha causato la chiamata, a meno che non si
- sia specificato con \var{sa\_flag} un comportamento diverso. Quando il
- gestore ritorna comunque la maschera dei segnali bloccati (vedi
- sez.~\ref{sec:sig_sigmask}) viene ripristinata al valore precedente
- l'invocazione.
+ sia specificato con \var{sa\_flag} un comportamento diverso. Quando il gestore
+ ritorna la maschera dei segnali bloccati (vedi sez.~\ref{sec:sig_sigmask})
+ viene comunque ripristinata al valore precedente l'invocazione.
L'uso di questo campo permette ad esempio di risolvere il problema residuo
dell'implementazione di \code{sleep} mostrata in
call} quando vengono interrotte dal suddetto
segnale, riproduce cioè il comportamento standard
di BSD.\\
+ \constd{SA\_RESTORER} & Ad uso delle implementazioni delle liberie del C,
+ non deve essere usato nelle applicazioni, serve ad
+ indicare che il campo \var{sa\_restorer} contiene
+ l'indirizzo di un cosiddetto \textit{signal
+ trampoline}.\footnotemark \\
\constd{SA\_SIGINFO} & Deve essere specificato quando si vuole usare un
gestore in forma estesa usando
\var{sa\_sigaction} al posto di
\label{tab:sig_sa_flag}
\end{table}
+ \footnotetext{il \itindex{signal~trampoline} \textit{signal trampoline} è il
+ codice usato per tornare da un gestore di segnali, che originariamente
+ veniva inserito nello \textit{stack}, ma i kernel recenti come misura di
+ sicurezza impediscono l'esecuzione di codice dallo stack, per cui questo
+ codice viene spostato altrove (ad esempio nella libreria del C) ed il suo
+ indirizzo viene indicato al kernel nel campo \var{sa\_restorer}.}
+
Come si può notare in fig.~\ref{fig:sig_sigaction} \func{sigaction} permette
di utilizzare due forme diverse di gestore,\footnote{la possibilità è prevista
dallo standard POSIX.1b, ed è stata aggiunta nei kernel della serie 2.1.x
valori possibili si trovano in \file{bits/siginfo.h}.} ed i valori possibili
in questo caso sono riportati in tab.~\ref{tab:sig_si_code_generic}.
- Nel caso di alcuni segnali però il valore di \var{si\_code} viene usato per
- fornire una informazione specifica relativa alle motivazioni della ricezione
- dello stesso; ad esempio i vari segnali di errore (\signal{SIGILL},
- \signal{SIGFPE}, \signal{SIGSEGV} e \signal{SIGBUS}) lo usano per fornire
- maggiori dettagli riguardo l'errore, come il tipo di errore aritmetico, di
- istruzione illecita o di violazione di memoria; mentre alcuni segnali di
- controllo (\signal{SIGCHLD}, \signal{SIGTRAP} e \signal{SIGPOLL}) forniscono
- altre informazioni specifiche.
-
\begin{table}[!htb]
\footnotesize
\centering
\label{tab:sig_si_code_generic}
\end{table}
+ Nel caso di alcuni segnali però il valore di \var{si\_code} viene usato per
+ fornire una informazione specifica relativa alle motivazioni della ricezione
+ dello stesso; ad esempio i vari segnali di errore (\signal{SIGILL},
+ \signal{SIGFPE}, \signal{SIGSEGV} e \signal{SIGBUS}) lo usano per fornire
+ maggiori dettagli riguardo l'errore, come il tipo di errore aritmetico, di
+ istruzione illecita o di violazione di memoria; mentre alcuni segnali di
+ controllo (\signal{SIGCHLD}, \signal{SIGTRAP} e \signal{SIGPOLL}) forniscono
+ altre informazioni specifiche.
+
In questo caso il valore del campo \var{si\_code} deve essere verificato nei
confronti delle diverse costanti previste per ciascuno di detti segnali; dato
\label{sec:sig_pid_fd}
-% TODO: trattare (qui?) pidfd_send_signal() introdotta con il kernel 5.1 vedi
+% TODO: trattare (qui? oppure sopra in "Ulteriori funzioni di gestione?)
+% pidfd_send_signal() introdotta con il kernel 5.1 vedi
% https://lwn.net/Articles/784831/, https://lwn.net/Articles/773459/ e
-% https://lwn.net/Articles/801319/
-% oppure sopra in "Ulteriori funzioni di gestione"
+% https://lwn.net/Articles/801319/
% TODO: Nuova subsection sui pidfd, e le funzioni correlate, in particolare:
% trattare pidfd_send_signal, aggiunta con il kernel 5.1 (vedi
% trattare pure pidfd_open() (vedi https://lwn.net/Articles/789023/) per
% ottere un pid fd pollabile aggiunta con il kernel 5.3
% man pidfd_send_signal su le versioni più recenti della man pages
-
+% trattare pidfd_getfd aggiunta con il kernel 5.6