| Предыдущий | Следующий |
| kOSReturnSuccess | MACH_MSG_SUCCESS |
KERN_SUCCESS
Для успешного примитива ядра Mach числовой результат полезен только вместе с точной операцией и состоянием объекта. KERN_SUCCESS равен нулю в пространстве kern_return_t и сообщает об успешном завершении вернувшего его интерфейса ядра Mach. Результат подтверждает контракт вызова, но вызывающая сторона всё равно должна проверить выходные счётчики, возвращённые права и состояние объекта, определённые конкретной процедурой.
Практический смысл
Несколько низкоуровневых API Apple используют ноль как успех, однако каждый typedef относится к отдельному контракту. Тип результата, проверка выходных данных и правила владения ресурсами остаются частью корректной обработки KERN_SUCCESS.
KERN_SUCCESS не является универсальным признаком успеха для POSIX, IOKit или обмена сообщениями Mach. Нулевое значение errno, IOReturn или mach_msg_return_t принадлежит другому контракту, даже если двоичное представление совпадает. Сохраняйте числовое значение, объявленный тип и первую вернувшую его операцию вместе с KERN_SUCCESS; то же целое число может принадлежать другому пространству статусов в другом API.
Соберите воспроизводимую запись
| Что сохранить | Диагностическая ценность |
|---|---|
| Процедуру MIG или вызов ядра Mach, интерфейс подсистемы и точное значение kern_return_t. | Определяет конкретный объект и операцию, связанные с успешным примитивом ядра Mach. |
| Имена входных и выходных портов вместе с типами прав до и после вызова. | Отделяет состояние аргумента или жизненного цикла от нижележащего провайдера при анализе успешного завершения примитива Mach. |
| Возвращённые счётчики, selector flavor, версии структур и размеры буферов, использованные процедурой. | Создаёт устойчивое сравнение состояния до и после операции при анализе успешного завершения примитива Mach. |
| Идентичность task, thread, host или memory object и событие жизненного цикла сразу после успеха. | Показывает, является ли KERN_SUCCESS первичным результатом или преобразованной сводкой. |
Для успешного примитива ядра Mach сохраните процедуру MIG или вызов ядра Mach, интерфейс подсистемы и точное значение kern_return_t до переустановки, перезагрузки или очистки состояния. Успех только после такого изменения полезен как сравнительный результат для успешного примитива ядра Mach, но не устанавливает исходную причину.
Проверки, разделяющие причины
- Повторите процедуру с одним намеренно недействительным правом или flavor и убедитесь, что возвращается ненулевой kern_return_t. Остальные входные данные оставьте неизменными.
- Проверьте выходной счётчик до чтения данных переменной длины, предоставленных ядром. Запишите первый статус и переход состояния.
- Освободите или передайте каждое возвращённое право Mach согласно контракту процедуры и проверьте отсутствие утечек прав. Изменившийся результат означает новую границу, а не автоматическое устранение при анализе успешного завершения примитива Mach.
Интерпретация сравнения
| Наблюдаемое сравнение | Следующий проверяемый вывод |
|---|---|
| Первая контрольная проверка изменила результат | Сосредоточьтесь на намеренно изменённом праве или flavor, изолированном первой проверкой. |
| Вторая проверка успешного примитива ядра Mach воспроизводит тот же первый статус | Сохраните данные нижележащей подсистемы до изменения данных приложения. Вторая проверка подтверждала выходной счётчик перед чтением переменных данных. |
| После ограниченного изменения успешный результат сменился другим статусом | После третьей проверки операция перешла к другой границе при анализе успешного завершения примитива Mach. Проверка освобождала или передавала права Mach и выявляла их утечки. Сохраните оба результата и интерпретируйте новый статус по его контракту API при анализе успешного завершения примитива Mach. |
Критерии устранения
Целевое исправление. После KERN_SUCCESS сохраняйте проверки и правила владения конкретной процедуры, не сводя любой нулевой kern_return_t к одному общему пути успеха. Для успешного примитива ядра Mach изменяйте только объект, аргумент, политику, провайдер или состояние жизненного цикла, на которые указывают собранные данные.
Критерий приёмки. Процедура Mach возвращает KERN_SUCCESS, все выходные счётчики и права соответствуют определению интерфейса, а повторное выполнение не оставляет утечек и неожиданно потреблённых прав. Повторите исходную операцию, давшую успешный примитив ядра Mach с исходной идентичностью и поддерживаемой конфигурацией, затем сохраните одну отрицательную контрольную проверку с ожидаемым соседним результатом.
Технические ссылки
Эти источники определяют пространство имён и контракт подсистемы, необходимые для проверки KERN_SUCCESS в используемой версии платформы.
- Apple XNU: определения kern_return_t — определяет пространство статусов примитивов ядра Mach.
- Apple: обзор Mach — описывает границу API и жизненного цикла вызовов Mach.
- Репозиторий исходного кода Apple XNU — предоставляет контекст ABI, реализации и протокола при анализе успешного завершения примитива Mach.
- Apple XNU: определения сообщений Mach — помогает учитывать ограничения переносимости и проверки.
Нужно найти другой код? Найти другой код состояния или ошибки.