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

 
Предыдущий Следующий
MACH_SEND_TIMED_OUT MACH_SEND_INTERRUPTED

MACH_SEND_INVALID_VOUCHER

Поле ваучера не определило допустимый ваучер Mach

MACH_SEND_INVALID_VOUCHER относится к msgh_voucher_port и диспозиции ваучера, закодированной в msgh_bits. XNU документирует, что это поле обрабатывается как имя порта, но с учётом разрешённых нулевого и мёртвого значений должно разрешаться в право отправки для реализованного ядром объекта ваучера Mach. Обычное имя порта, мёртвое право или несоответствующая диспозиция не могут использоваться вместо ваучера.

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

Что исследовать

  • Проверьте значение и время жизни msgh_voucher_port непосредственно в момент вызова mach_msg.
  • Формируйте часть msgh_bits, относящуюся к ваучеру, с помощью документированных макросов, а не жёстко заданных битовых значений.
  • Убедитесь, что код передачи или освобождения прав портов не израсходовал единственное пригодное право ваучера.
  • Если платформа автоматически добавляет ваучеры, сохраняйте сформированный ею заголовок, а не восстанавливайте значение по необработанному имени порта.

Ссылки


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