From: Simone Piccardi Date: Thu, 15 Oct 2020 08:48:23 +0000 (+0200) Subject: Merge branch 'master' of ssh://roach.truelite.it/srv/git/gapil X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=29f18e0581de602762b8ba590132f85d7888bdc2;hp=50cb83b3eca389e435527390884aa7d6cbf15929 Merge branch 'master' of ssh://roach.truelite.it/srv/git/gapil --- diff --git a/fileio.tex b/fileio.tex index 8657720..f630562 100644 --- a/fileio.tex +++ b/fileio.tex @@ -1957,7 +1957,9 @@ Si tenga presente che non tutte le funzioni che prevedono l'argomento 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 diff --git a/ipc.tex b/ipc.tex index ddf28dc..9e7e459 100644 --- a/ipc.tex +++ b/ipc.tex @@ -5020,6 +5020,17 @@ fig.~\ref{fig:ipc_posix_sem_shm_message_setter}), e riprenderanno con il nuovo testo alla terminazione di quest'ultimo. + +% TODO: trattare i futex (segnalati altrove come sezione xxx_futex), non mi è +% chiaro ancora dove mettere questa parte. Per gli argomenti vedi comunque: +% man futex, https://lwn.net/Articles/360699/, +% https://www.man7.org/linux/man-pages/man7/futex.7.html ed inoltre +% https://lwn.net/Articles/172149/, https://lwn.net/Articles/387246/, +% https://lwn.net/Articles/178253/, https://lwn.net/Articles/823513/, +% https://lwn.net/Articles/655044/ + + + % LocalWords: like fifo System POSIX RPC Calls Common Object Request Brocker % LocalWords: Architecture descriptor kernel unistd int filedes errno EMFILE % LocalWords: ENFILE EFAULT BUF sez fig fork Stevens siblings EOF read SIGPIPE diff --git a/listati/siginfo_t.h b/listati/siginfo_t.h index 7045a66..3e9b488 100644 --- a/listati/siginfo_t.h +++ b/listati/siginfo_t.h @@ -17,4 +17,11 @@ siginfo_t { void * si_addr; /* Memory location which caused fault */ long si_band; /* Band event (was int before glibc 2.3.2) */ int si_fd; /* File descriptor */ -} + short si_addr_lsb;/* Least significant bit of address (since Linux 2.6.32) */ + void *si_lower; /* Lower bound when address violation occurred (since Linux 3.19) */ + void *si_upper; /* Upper bound when address violation occurred (since Linux 3.19) */ + int si_pkey; /* Protection key on PTE that caused fault (since Linux 4.6) */ + void *si_call_addr; /* Address of system call instruction (since Linux 3.5) */ + int si_syscall; /* Number of attempted system call (since Linux 3.5) */ + unsigned int si_arch;/* Architecture of attempted system call (since Linux 3.5) */ + } diff --git a/procadv.tex b/procadv.tex index 006a844..ebef643 100644 --- a/procadv.tex +++ b/procadv.tex @@ -572,6 +572,9 @@ opportuno dettagliare maggiormente. \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 diff --git a/signal.tex b/signal.tex index 0cdf0ab..2ec1761 100644 --- a/signal.tex +++ b/signal.tex @@ -2049,13 +2049,6 @@ sia \param{act} che \param{oldact} sono nulli la funzione può essere 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} @@ -2066,13 +2059,19 @@ più usato. \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 @@ -2127,6 +2126,11 @@ tab.~\ref{tab:sig_sa_flag}. 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 @@ -2137,6 +2141,13 @@ tab.~\ref{tab:sig_sa_flag}. \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 @@ -2182,15 +2193,6 @@ viene sempre espresso come una costante,\footnote{le definizioni di tutti i 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 @@ -2223,6 +2225,15 @@ altre informazioni specifiche. \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