Après l'ajout de permissions, une erreur de compilation apparaît avec un message neverallow
La cause fondamentale est que les permissions accordées sont trop larges, il suffit de réduire la portée pour résoudre le problème. La solution consiste à réduire la portée (déclarer et spécifier les nœuds d'accès nécessaires) afin que la compilation réussisse.
- Approche générale ====
Caractéristiques des permissions sensibles : les journaux contiennent les identifiants c512, c768
Après avoir ajouté dans un fichier untrusted_app.te :
allow untrusted_app audio_device:chr_file { open write read };
Une erreur de permissions persiste :
[ 141.935275] type=1400 audit(1546939304.786:43): avc: denied { write } for
pid=1836 comm="Thread-4" name="pcmC0D1c" dev="tmpfs" ino=11947
scontext=u:r:untrusted_app:s0:c512,c768 tcontext=
u:object_r:audio_device:s0 tclass=chr_file permissive=1
Vérifiez d'abord si le nœud à accéder est bien audio_device. Ce nœud est sensible, si possible, modifiez le répertoire et les fichiers d'accès
pour réduire la portée d'audio_device
Méthode 1 : Déterminez la position du nœud d'accès, via le code source ou les journaux pour identifier le nœud spécifique, par exemple
/dev/pcmc00xx
2 : Dans le fichier te correspondant, déclarez un nouveau nom de type, comme : file.te: type test_audio_device, dev_type;
3 : Dans file_context, liez le nœud spécifique au nouveau type : file_context: /dev/pcmc00xx
u:object_r:test_audio_device:s0
4. Ajoutez ou modifiez les permissions nécessaires : allow untrusted_app test_audio_device:chr_file {
open write read };
Si la certification GMS n'est pas requise, pour les permissions sensibles (c512,c768), vous pouvez associer directement l'objet à mlstrustedobject, mais cette modification n'est pas recommandée
car elle pose des problèmes de sécurité importants :
Par exemple : typeattribute audio_device mlstrustedobject;
- Application pratique ====
Erreur rencotnrée :
libsepol.report_failure: neverallow on line 129 of system/sepolicy/private/coredomain.te (or line 39405 of policy.conf) violated by allow system_app sysfs:file { read open };
libsepol.report_failure: neverallow on line 579 of system/sepolicy/public/domain.te (or line 12247 of policy.conf) violated by allow system_app serialno_prop:file { read getattr map open };
Pour la première erreur : réduire la portée d'accès et spécifier les fichiers de type sysfs
Analyse du problème d'inefficacité de u:object_r dans Android P pour sysfs
- Définir un nouveau type dans device/marque/common/sepolicy/vendor/file.te
system/sepolicy/public/property.te
- Spécifier le fichier correspondant au nouveau type dans device/marque/common/sepolicy/vendor/file_contexts
/sys/devices/platform/fd800000.usb(/.)? u:object_r:sysfs_specifique:s0
- Utiliser le nouveau type défini
allow system_app sysfs_specifique:file { getattr open read };
Pour la deuxième erreur : définir un nouveau type de propriété
Ajout de propriétés système | Projet Open Source Android | Android Open Source Project
1. Définir le type de propriété dans device/marque/common/sepolicy/vendor/property.te
system_public_prop(proprietes_systeme_specifique)
- Spécifier les propriétés correspondant au nouveau type dans device/marque/common/sepolicy/vendor/property_contexts
ro.serialno u:object_r:proprietes_systeme_specifique:s0
ro.boot.serialno u:object_r:proprietes_systeme_specifique:s0
- Utiliser le nouveau type de propriété défini
set_prop(system_app, proprietes_systeme_specifique) référence de propriété<br></br>allow system_app proprietes_systeme_specifique:file { getattr map open read };