Как безопасно использовать mmap () для чтения? - PullRequest
0 голосов
/ 05 октября 2018

Мне нужно выполнить много операций чтения с произвольным доступом в большом файле, поэтому я использую mmap().Это решение кажется идеальным, если отображаемый файл не поврежден.Но это не всегда так.Если сопоставленный файл подделан, возникает несколько проблем:

  • Если изменение в файле уменьшает его длину или файл становится недоступным, то процесс для жизни должен обработать SIGBUSсигнал (по крайней мере, в реализации Linux).Это добавляет дополнительные сложности, так как я пишу библиотеку.

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

Означает ли это, что любая программа, которая отображает свободно доступный файл и не обрабатывает этипроблемы могут быть вызваны DoS-атакой?Даже если я не ожидаю, что злые хакеры пойдут за моей программой, я легко вижу, как пользователь изменяет мой сопоставленный файл, заменяет его другим или делает файл недоступным, например, извлекая USB-накопитель ,И хотя я могу написать обработчик сигнала (и это немного грязно, поэтому я ищу лучшее решение) для решения первой проблемы, я не знаю, как решить вторую.

Файл не может быть скопирован и может свободно перемещаться, если он не используется программой (как и любой другой медиа-файл).Блокировки файлов Linux не всегда работают.

Итак, как безопасно использовать mmap() для чтения?

...