| Предыдущий | Следующий |
| 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, относящуюся к ваучеру, с помощью документированных макросов, а не жёстко заданных битовых значений. - Убедитесь, что код передачи или освобождения прав портов не израсходовал единственное пригодное право ваучера.
- Если платформа автоматически добавляет ваучеры, сохраняйте сформированный ею заголовок, а не восстанавливайте значение по необработанному имени порта.
Ссылки
- Исходный код Apple XNU: mach/message.h
- Справочник интерфейса ядра Mach: mach_msg
- Справочное руководство GNU Mach: межпроцессное взаимодействие
Нужно найти другой код? Найти другой код состояния или ошибки.
