Как защитить память, разделяемую между процессами в Linux - PullRequest
2 голосов
/ 27 августа 2011

В Linux или других современных ОС память каждого процесса защищена, так что произвольная запись в одном процессе не приводит к сбою любого другого процесса. Теперь предположим, что у нас есть общая память между процессом A и процессом B. Теперь, скажем, из-за мягкой ошибки процесс A непреднамеренно что-то записывает в эту область памяти. Есть ли способ защитить это, учитывая, что и процесс A, и процесс B имеют полный доступ на запись в эту память.

Ответы [ 2 ]

2 голосов
/ 27 августа 2011

Когда вы звоните shm_open, вы можете передать ему флаг O_RDONLY параметру режима.

В качестве альтернативы вы можете использовать mprotect, чтобы пометить определенные страницы как (например, только для чтения). Для этого вам понадобится сотрудничество и доверие между двумя процессами, у B нет способа сказать, что A не может писать в него, используя mprotect.

Если вы действительно хотите быть уверены, что другой процесс не может вмешиваться, тогда разумной идеей может быть общение через каналы или сокеты некоторого описания.

Вы также можете использовать mmap для сопоставления чего-либо (например, в /dev/shm?), В котором права доступа к файлам делают невозможным запись для одного из двух процессов, если они выполняются как отдельные UID. Например, если у вас есть /dev/shm/myprocess, принадлежащий производителю пользователя и потребителю группы, и вы установили права доступа к файлу на 0640 перед сопоставлением его процессом, выполняющимся с этим UID и GID, тогда вы можете запретить записи второго процесса в него.

1 голос
/ 27 августа 2011

Вы можете использовать простую контрольную сумму при каждой записи.Таким образом, когда процесс обнаруживает неправильную контрольную сумму при операции чтения, это признак сбоя другого процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...