2 votes

Le Logcat d'Android est rempli de refus d'avc selinux sur tmpfs, type 1400 par kworker/kernel.

Je reçois ces avertissements dans le logcat de mon Android (rooté avec magisk).

10-15 22:02:29.039 12944 12944 W kworker/0:4: type=1400 audit(0.0:87190): avc: denied { read write } for name="sde73" dev="tmpfs" ino=28978 scontext=u:r:kernel:s0 tcontext=u:object_r:oem_device:s0 tclass=blk_file permissive=0

J'ai consulté la documentation suivante pour voir comment résoudre ce problème, mais je n'y arrive pas.

https://source.Android.com/security/selinux/device-policy

https://source.Android.com/security/selinux/validate

https://source.Android.com/security/selinux/concepts

https://source.Android.com/security/selinux/implement

https://gist.github.com/msfjarvis/ec52b48eb2df1688b7cbe32bcd39ee5f

https://Android.stackexchange.com/questions/207484/how-to-fix-selinux-avc-denied-errors-when-launching-dnscrypt-as-init-d-script

https://source.Android.com/security/selinux/customize#Android-o

https://Android.stackexchange.com/questions/218911/how-to-add-selinux-policy-on-a-user-debug-rom-that-has-split-policy-scheme

https://Android.stackexchange.com/questions/214839/how-to-run-an-Android-init-service-with-superuser-selinux-context

https://topjohnwu.github.io/Magisk/tools.html#magiskpolicy

https://topjohnwu.github.io/Magisk/details.html#magisk-booting-process

https://topjohnwu.github.io/Magisk/guides.html#boot-scripts

J'ai regardé dans /dev mais je n'ai rien de semblable.

android# ls -l /dev/ | grep sd
#returns nothing

L'inode se résout à ce fichier :

find /sys -xdev -inum 28978
/sys/firmware/devicetree/base/__symbols__/sb_7_tx

Cependant, au redémarrage suivant, le problème se résout avec un autre fichier, mais les erreurs sont toujours liées à un seul inode.

Je suppose que je devrais ajouter cette règle dans un fichier .te.

allow kernel oem_device:blk_file {read write};

adb pull /sys/fs/selinux/policy
adb logcat -b all -d | audit2allow -p policy
#this confirms the rule

J'ai trouvé quelques fichiers liés à selinux dans cette décharge :

https://git.rip/dumps/oneplus/oneplus7tpro/-/find_file/hotdog-user-10-QKQ1.190716.003-2009281542-release-keys

mais je ne suis pas très sûr de l'endroit où je dois ajouter la règle peut-être quelque part dans /vendor/etc/selinux

Quelqu'un sait-il quelles sont les étapes pour corriger ces avertissements et peut-être approfondir l'enquête pour savoir pourquoi ils se produisent en premier lieu ?

Merci

0voto

Rick Sanchez Points 1572

La raison pour laquelle elle apparaît est directement liée à l'erreur. kernel essaie de lire/écrire un blk_file étiqueté avec oem_device type.

À ce stade, vous avez deux options :

  1. Ajouter allow si vous voulez autoriser l'accès.
  2. Ajouter dontaudit si vous voulez simplement supprimer le journal. Voir aquí

La règle doit être ajoutée dans kernel.te .
Habituellement, ces éléments personnalisés sont placés dans device/XXXXXX selon le fournisseur. Par exemple dans mon arbre, pour un dispositif rockchip, je modifierais /device/rockchip/common/sepolicy/vendor/kernel.te

Pour reconstruire les polices d'assurance :

source build/envsetup.sh
lunch-yourTarget
mmm system/sepolicy

Et pour les intégrer dans le système (si vous êtes userdebug et que vous pouvez le remonter) :

adb root
adb remount
adb push out/target/product/YOUR_DEVICE/vendor/etc/selinux /vendor/etc/
adb push out/target/product/YOUR_DEVICE/system/etc/selinux /system/etc/
adb shell sync

adb reboot

Si vous ne pouvez pas les pousser, vous devrez reconstruire et flasher le système.

0voto

Future Points 339

J'ai réussi à corriger les avertissements avec cette commande :

magiskpolicy --live 'allow kernel oem_device blk_file {read write open}'

Le droit d'ouverture a également été accordé parce qu'un autre avertissement lié à ce droit apparaissait après avoir autorisé uniquement la lecture/écriture.

Je ne comprends toujours pas :

  1. pourquoi le noyau essaie-t-il d'accéder à cette
  2. ce à quoi on essaie d'accéder exactement
  3. magisk ne devrait-il pas s'occuper des politiques de selinux liées à des subventions de si bas niveau comme le noyau
  4. Je ne sais pas comment rendre cette correction permanente (pour qu'elle persiste au redémarrage). D'après mes recherches, il semble que je doive modifier un certain fichier dans boot.img, le repacker et le repousser vers Android.

Sur cette page : https://topjohnwu.github.io/Magisk/tools.html

il est spécifié un outil magiskboot qui devrait être utilisé pour un tel Parcheando mais je ne l'ai pas.

A tool to unpack / repack boot images, parse / patch / extract cpio, patch dtb, hex patch binaries, and compress / decompress files with multiple algorithms.

Je reviendrai avec toutes les conclusions..

MISE À JOUR : J'ai réussi à ajouter de façon permanente les correctifs au moment du démarrage avec un post-fs-data script qui s'exécute pendant le processus de démarrage. Ce n'est peut-être pas une solution à 100% car l'image de démarrage devrait être patchée pour que magiskinit charge les politiques avant même que init ne soit exécuté, mais cela corrige les avertissements dans logcat après la fin du processus de démarrage.

REF :

https://topjohnwu.github.io/Magisk/details.html#magisk-booting-process https://topjohnwu.github.io/Magisk/guides.html#boot-scripts

su -
cd /data/adb/post-fs-data.d
touch fix_selinux.sh
chmod +x fix_selinux.sh
vi fix_selinux.sh #add this line (and any other rules you need):
/sbin/magiskpolicy --live 'allow kernel oem_device blk_file {read write open}'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X