Что означает код возврата ядра macOS 0x1000000A (MACH_SEND_INVALID_RIGHT)?

 
Предыдущий Следующий
MACH_SEND_INVALID_REPLY MACH_SEND_INVALID_NOTIFY

MACH_SEND_INVALID_RIGHT

Ошибка владения возможностью

MACH_SEND_INVALID_RIGHT означает, что дескриптор права порта в теле сообщения запросил перемещение, копирование или создание, которое вызывающая задача не вправе выполнить. Например, для перемещения права приёма необходимо владеть этим правом; для копирования или перемещения права отправки необходимо владеть правом отправки; а для создания права отправки требуется доступ к праву приёма. Одного имени порта недостаточно для разрешения.

В отличие от заголовка, дескрипторы тела не имеют такой же гарантии атомарности «всё или ничего». Документация предупреждает, что элементы тела могут обрабатываться в разном порядке, а ядро способно уничтожить часть или всё некорректное сообщение. Путь восстановления должен считать объект сообщения потреблённым или изменённым до его повторной сборки из авторитетного состояния приложения.

Что проверить

  • Исследуйте имя порта, тип дескриптора, диспозицию и предполагаемую передачу владения для каждого дескриптора.
  • Отслеживайте, кто освобождает или перемещает каждое право; успешная предыдущая отправка может законно удалить право у отправителя.
  • Не используйте закэшированные необработанные имена вместо явного учёта владения.
  • Для сложных RPC пересоздавайте дескрипторы из устойчивых ссылок до повторной попытки.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.