| Previous | Next |
| MACH_SEND_INVALID_RT_OOL_SIZE | MACH_SEND_MSG_FILTERED |
MACH_SEND_NO_GRANT_DEST
The message tries to transfer a port to a destination that forbids it
MACH_SEND_NO_GRANT_DEST means that the destination port does not accept ports in the message body. This matters only for a complex Mach message that contains port-related descriptors: the sender is attempting to transfer a capability, not merely to send ordinary bytes. A valid destination right can therefore still reject this particular body.
The result is not a generic access-denied status and does not prove that the remote service is down. It identifies a mismatch between the message’s descriptor set and what the destination port is permitted to receive. Retrying without understanding which descriptor carries a port right can accidentally change ownership or hide a protocol error.
What to inspect
- Determine whether the message is complex and enumerate every body descriptor, especially port and out-of-line ports descriptors.
- Compare the interface contract with the actual dispositions used for each transferred right.
- Use a protocol path that sends only data when the service contract does not allow capability transfer.
- Account for ownership effects before rebuilding the message, because move dispositions may have changed the sender’s rights during earlier work.
References
- Apple XNU source: mach/message.h
- Mach Kernel Interface Reference: mach_msg
- GNU Mach Reference Manual: interprocess communication
Looking for a different code? Search another status or error code.