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

 
Предыдущий Следующий
MACH_SEND_TOO_LARGE MACH_SEND_INVALID_HEADER

MACH_SEND_INVALID_TYPE

Метаданные дескриптора являются частью протокола

MACH_SEND_INVALID_TYPE означает, что ядро отклонило метаданные дескриптора сложного сообщения. Тип определяет, представляет ли элемент тела порт, внешнюю память, массив портов или другую поддерживаемую форму; disposition указывает Mach, какое право или действие копирования применить. Буфер сообщения может выглядеть корректным по байтам, но оставаться недопустимым, если эти поля не описывают поддерживаемую передачу.

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

Практические проверки

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

Ссылки


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