Да, mmap () должен быть реентерабельным, чтобы вы могли его использовать. Обратите внимание, что mmap () часто является довольно медленной операцией, поэтому вам, вероятно, лучше использовать ее только в тех (надеюсь) немногих и далеко от случая, когда это действительно необходимо, а не в качестве замены malloc () общего назначения.
POSIX 2008 содержит список функций, безопасных для асинхронных сигналов, которые можно безопасно вызывать из функции обработчика сигналов (см. Таблицу в разделе 2.4.2 в ссылке). mmap () отсутствует в этом списке, то есть вызов mmap () из функции обработки сигналов может привести к неопределенному поведению.
Что вы можете сделать, это избежать выделения памяти в обработчиках сигналов, просто установить флаг и выполнить фактическую работу позже.