Что означает код возврата ядра macOS 51 (KERN_POLICY_STATIC)?

 
Также может означать:
КонстантаТипОС
ERROR_REM_NOT_LISTОшибка WindowsWindows
ippStsFeaturesCombinationСтатус Intel IPPЛюбая
EL2HLTerrnoLinux
ENETUNREACHerrnomacOS
EBADRerrnoSolaris
UNEXPECTED_INITIALIZATION_CALLКод BSODWindows
Предыдущий Следующий
KERN_CODESIGN_ERROR KERN_INSUFFICIENT_BUFFER_SIZE

KERN_POLICY_STATIC

Изменение политики, которое целевой поток не принимает

KERN_POLICY_STATIC означает, что запрошенное свойство в этот момент изменить нельзя. Для операций с политикой потока Mach это отличается и от неверно сформированного запроса, и от обычного отказа в авторизации: целевой поток имеет статические параметры политики, поэтому планировщик не применяет запрошенное изменение через этот путь.

Современная XNU проверяет состояние static_param потока перед применением изменений политики. Как реализация thread_policy_set в ядре, так и устаревший путь абсолютного приоритета могут вернуть KERN_POLICY_STATIC для такого потока.

Почему приложение может не увидеть код 51 напрямую

Общедоступные оболочки libsyscall для thread_policy_set, thread_policy и thread_set_policy после базового RPC ядра явно преобразуют KERN_POLICY_STATIC в KERN_SUCCESS. Поэтому необработанный результат Mach, внутренняя трассировка или низкоуровневый клиент могут показывать этот код, тогда как вызывающая сторона, использующая общедоступную оболочку, наблюдает только успех.

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

Что проверить

  • Запишите, был ли результат получен из общедоступной оболочки, прямого RPC Mach, расширения ядра или диагностического инструмента.
  • Определите запрошенную разновидность и целевой поток. Повтор с тем же объектом и статическим состоянием не сделает свойство изменяемым.
  • Не классифицируйте это автоматически как проблему привилегий. KERN_PROTECTION_FAILURE и KERN_DENIED описывают другие классы отказов.
  • Если целью является обычная отзывчивость приложения, используйте документированный высокоуровневый механизм планирования или QoS, подходящий приложению, а не предполагайте, что устаревший запрос политики Mach сможет переопределить статическую политику.

Ссылки


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