C SIGSEGV Handler & Mprotect

Estoy construyendo un programa que usa mprotect () para restringir el acceso a un bloque de memoria. Cuando se solicita la memoria, se lanza un SIGSEGV que escucho mediante una llamada de señal ().

Una vez que se ha detectado el SIGSEGV, necesito acceder de alguna manera al puntero a la memoria solicitada (que arrojó la falla) y al tamaño del segmento solicitado. es posible?

void fifoSigHandler(){

    // Needs to only remove protection from requested block of virtual memory
    mprotect(fifoVm,(size_t)fifoVm_size,PROT_WRITE);
    printf("Caught Seg Fault");
}

void fifo_init(void* vm, int vm_size, int n_frames, int page_size)
{
    fifoVm = vm;
    fifoVm_size = vm_size;
    fifoFrames = n_frames;
    fifoPageSize = page_size;

    mprotect(fifoVm,(size_t)fifoVm_size,PROT_NONE);

    signal(SIGSEGV, fifoSigHandler);
}

Además, ¿hay alguna manera de determinar el nivel de mprotect () que un bloque de memoria está asignado actualmente (PROT_NONE, PROT_READ, etc.)?

Respuestas a la pregunta(3)

Su respuesta a la pregunta