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

 
Предыдущий Следующий
MACH_RCV_IN_SET MACH_RCV_BODY_ERROR

MACH_RCV_HEADER_ERROR

Сообщение прибыло, но передача его заголовка выполнена не полностью

MACH_RCV_HEADER_ERROR не означает «сообщения нет». Ядро уже извлекло сообщение из очереди, но нехватка ресурсов помешала передать принимающей задаче права портов, содержащиеся в заголовке. Интерфейс документирует дополнительные биты статуса, показывающие, какого ресурса не хватило: места в пространстве имён IPC, виртуального адресного пространства, ресурсов IPC ядра или ресурсов виртуальной памяти ядра.

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

Как безопасно отреагировать

  • Расшифруйте и запишите дополнительные биты MACH_MSG_IPC_SPACE, MACH_MSG_VM_SPACE, MACH_MSG_IPC_KERNEL или MACH_MSG_VM_KERNEL.
  • Не передавайте запрос обычной логике приложения, пока обязательные права из заголовка не проверены.
  • Примените меры контроля нагрузки на память и права портов; один лишь повтор не создаст место в пространстве имён задачи.
  • При очистке учитывайте, что сообщение уже могло быть извлечено из очереди и частично передано.

Ссылки


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