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

 
Предыдущий Следующий
MACH_RCV_HEADER_ERROR MACH_RCV_INVALID_TYPE

MACH_RCV_BODY_ERROR

Частичный приём сложного сообщения

MACH_RCV_BODY_ERROR означает, что заголовок принят, но один или несколько элементов тела не удалось доставить из-за отсутствия у получателя или ядра необходимого ресурса IPC либо виртуальной памяти. Это относится к дескрипторам прав портов и внестрочной памяти. Mach пытается обработать тело и обозначает класс ресурса дополнительными битами статуса, однако получатель не должен считать, что каждый дескриптор сохранился без изменений.

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

Что зафиксировать

  • Запишите базовый результат, все биты нехватки ресурсов, идентификатор сообщения, количество дескрипторов и сведения о том, какие дескрипторы отсутствуют или непригодны.
  • Проверяйте каждое принятое право и каждую внестрочную область до вызова обработчика сообщения.
  • Установите ограничения приложения на число дескрипторов и объём внестрочных данных, чтобы защитить получателя под нагрузкой.
  • Спроектируйте ответ или повтор так, чтобы клиенты могли отличить неполный приём от обычной ошибки проверки на стороне сервера.

Ссылки


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