Filtrage des appels système GPU

Android 16 QPR2 ajoute une macro SELinux pour renforcer les pilotes du noyau. Cette macro bloque les IOCTL restreints en production, tels que les IOCTL obsolètes ou ceux destinés au développement de pilotes de noyau. Il limite également les IOCTL pour le profilage des pilotes au shell ou aux applications débogables. Utilisez cette macro pour renforcer la sécurité de votre appareil.

Implémentation

Pour renforcer votre appareil avec un filtrage précis des appels système, appelez la macro set_xperm_filter dans la SEPolicy de votre appareil, par exemple :

# 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)

La définition de la macro pour set_xperm_filter se trouve dans system/sepolicy/public/te_macros.

La macro autorise unpriv_ioctls, bloque restricted_ioctls et limite instrumentation_ioctls au processus shell ou aux applications debuggable. Le filtre s'applique aux applications qui démarrent à partir d'un target_sdk spécifié.

Cette fonctionnalité a été implémentée sur les appareils Pixel utilisant le GPU Mali (Pixel 6 à 9). Arm a fourni une catégorisation officielle de ses IOCTL dans Documentation/ioctl-categories.rst de sa version r54p2. Cette liste continuera d'être mise à jour dans les prochaines versions du pilote.

Test

Pour vérifier le comportement du pilote du noyau, procédez comme suit :

  • Vérifiez que le pilote ne bloque pas les IOCTL d'application légitimes.

  • Vérifiez que les applications non fiables ne peuvent pas exécuter d'instrumentation ni d'IOCTL restreints.