\itindbeg{file~lease}
+% TODO: questa funzionalità potrebbe essere estesa vedi:
+% https://lwn.net/Articles/796000/
+
La prima di queste funzionalità è quella del cosiddetto \textit{file lease};
questo è un meccanismo che consente ad un processo, detto \textit{lease
holder}, di essere notificato quando un altro processo, chiamato a sua volta
% TODO aggiunta MADV_WIPEONFORK dal kernel 4.14 that causes the affected memory
% region to appear to be full of zeros in the child process after a fork. It
% differs from the existing MADV_DONTFORK in that the address range will
-% remain valid in the child (dalla notizia in https://lwn.net/Articles/733256/).
+% remain valid in the child (dalla notizia in
+% https://lwn.net/Articles/733256/).
+% TODO aggiunte MADV_COLD e MADV_PAGEOUT dal kernel 5.4, vedi
+% https://git.kernel.org/linus/9c276cc65a58 e
+% https://git.kernel.org/linus/1a4e58cce84e
\footnotetext{a partire dal kernel 2.6.32 è stato introdotto un meccanismo che
identifica pagine di memoria identiche e le accorpa in una unica pagina
\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
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
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) */
+ }
% 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
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
\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