Filtrowanie wywołań systemowych GPU

Android 16 QPR2 dodaje makro SELinux, aby wzmocnić sterowniki jądra. To makro blokuje w środowisku produkcyjnym ograniczone IOCTL, takie jak przestarzałe IOCTL lub te przeznaczone do tworzenia sterowników jądra. Ogranicza też IOCTL do profilowania sterowników do aplikacji powłoki lub aplikacji z możliwością debugowania. Użyj tego makra, aby zwiększyć bezpieczeństwo urządzenia.

Implementacja

Aby wzmocnić urządzenie za pomocą szczegółowego filtrowania wywołań systemowych, wywołaj makro set_xperm_filter w SEPolicy urządzenia, na przykład:

# set_xperm_filter(target_context, allowed_target, unpriv_ioctls, restricted_ioctls, instrumentation_ioctls)
# Allow targets to harden their IOCTL interfaces by specifying
# unprivileged, blocked, and instrumentation-specific IOCTLs for appdomain.
#
# Parameters:
#   target_context: The target context to apply the filter to.
#   allowed_target: Additional `appdomain` target to exempt from hardened policy.
#     Allows for an allowlist of services, or gating by a target SDK.
#   unpriv_ioctls: IOCTLs to allow across appdomain.
#   restricted_ioctls: IOCTLs to deny across appdomain.
#   instrumentation_ioctls: IOCTLs intended to be used in development.
#     IOCTLs will be allowed from `shell` or `debuggable` applications.

define(`unpriv_gpu_ioctls', `0x0000, 0x0001, 0x0002')
define(`restricted_ioctls', `0x1110, 0x1111, 0x1112')
define(`instrumentation_gpu_ioctls', `0x2220, 0x2221, 0x2222')
set_xperm_filter(
  gpu_device,
  untrusted_app_sdk_gate,
  unpriv_ioctls,
  restricted_ioctls,
  instrumentation_ioctls)

Definicja makra set_xperm_filter znajduje się w system/sepolicy/public/te_macros.

Makro zezwala na unpriv_ioctls, blokuje restricted_ioctls i ogranicza instrumentation_ioctls do procesu shell lub aplikacji debuggable. Filtr dotyczy aplikacji, które są uruchamiane z określonego target_sdk.

Ta funkcja została zaimplementowana na urządzeniach Pixel korzystających z procesora graficznego Mali (Pixel 6–9). Firma Arm oficjalnie sklasyfikowała swoje IOCTL w Documentation/ioctl-categories.rst w wersji r54p2. Ta lista będzie nadal aktualizowana w przyszłych wersjach sterowników.

Test

Aby sprawdzić działanie sterownika jądra:

  • sprawdź, czy sterownik nie blokuje prawidłowych IOCTL aplikacji,

  • sprawdź, czy niezaufane aplikacje nie mogą wykonywać IOCTL instrumentacji i ograniczonych.