Per essere chiari, si tratta di un progetto piuttosto che di una domanda di implementazionePerché le chiamate di sistema restituiscono EFAULT invece di inviare un segfault?
Desidero conoscere la logica alla base del perché POSIX si comporta in questo modo. Le chiamate di sistema POSIX quando viene assegnata una posizione di memoria non valida restituiscono EFAULT anziché arrestare il programma userspace (inviando un sigsegv), il che rende il loro comportamento incoerente con le funzioni userspace.
Perché? Questo non nasconde solo bug di memoria? È un errore storico o c'è una buona ragione per questo?
Anche a me un sigsegv/sigbus ha più senso. In questo momento sto giocando con 2 syscalls personalizzate che dovrebbero avere anche emulazioni di userspace (più lente). Non vedo perché l'attuale syscall e l'emulazione dovrebbero comportarsi in modo diverso se vengono passati buffer non validi. Persino POSIX sembra essere dell'opinione che gli utenti non debbano preoccuparsi se una funzione di sistema sia una funzione reale di syscall o di uno spazio utente. I miei correlati domanda: https: //stackoverflow.com/questions/44239545/generating-segfault-from-a-custom-syscall/44251112 – PSkocik