| Предыдущий | Следующий |
| MACH_SEND_INVALID_RT_OOL_SIZE | MACH_SEND_MSG_FILTERED |
MACH_SEND_NO_GRANT_DEST
Сообщение пытается передать порт назначению, которое это запрещает
MACH_SEND_NO_GRANT_DEST означает, что целевой порт не принимает порты в теле сообщения. Это имеет значение только для сложного сообщения Mach с дескрипторами портов: отправитель пытается передать возможность, а не просто обычные байты. Поэтому даже допустимое право назначения может отклонить именно такое тело.
Результат не является общей ошибкой отказа в доступе и не доказывает, что удалённая служба не работает. Он обозначает несоответствие между набором дескрипторов сообщения и тем, что разрешено принимать целевому порту. Повтор без понимания, какой дескриптор переносит право порта, может случайно изменить владение или скрыть ошибку протокола.
Что исследовать
- Определите, является ли сообщение сложным, и перечислите все дескрипторы тела, особенно дескрипторы портов и внестрочных портов.
- Сравните контракт интерфейса с фактическими диспозициями, используемыми для каждого передаваемого права.
- Если контракт службы не разрешает передачу возможностей, используйте путь протокола, отправляющий только данные.
- Перед повторным формированием сообщения учтите последствия для владения: диспозиции перемещения могли изменить права отправителя во время предыдущей попытки.
Ссылки
- Исходный код Apple XNU: mach/message.h
- Справочник интерфейса ядра Mach: mach_msg
- Справочное руководство GNU Mach: межпроцессное взаимодействие
Нужно найти другой код? Найти другой код состояния или ошибки.
