1

システム証明書で署名されたアプリケーションでカスタムRenderScriptスクリプトを使用するにはどうすればよいですか?システム署名付きアプリケーションでカスタムRenderScriptを使用

LogCat出力:

E/RenderScript: Failed loading RS driver: dlopen failed: cannot locate symbol "_ZN7android12renderscript15RsdCpuReference6createEPNS0_7ContextEjjPFPKNS1_9CpuSymbolES3_PKcEPFPNS1_9CpuScriptES3_PKNS0_6ScriptEEPFPN4llvm6ModuleEPN3bcc8RSScriptESK_SK_EPFS8_S8_jES8_" referenced by "/system/vendor/lib/libRSDriver_adreno.so"... 
E/RenderScript: Failed to load runtime libRSDriver_adreno.so, loading default 
W/EventThread: type=1400 audit(0.0:200): avc: denied { execute } for path="/data/user_de/0/[packageName]/code_cache/com.android.renderscript.cache/librs.rgb2yuv.so" dev="mmcblk0p25" ino=65890 scontext=u:r:system_app:s0 tcontext=u:object_r:system_app_data_file:s0 tclass=file permissive=0 
W/EventThread: type=1300 audit(0.0:200): arch=40000028 syscall=192 per=800008 success=no exit=-13 a0=9aa80000 a1=6c0 a2=5 a3=12 items=0 ppid=336 ppcomm=main auid=4294967295 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=(none) ses=4294967295 exe="/system/bin/app_process32" subj=u:r:system_app:s0 key=(null) 
W/auditd: type=1323 audit(0.0:200): fd=120 flags=0x12 
W/auditd: type=1327 audit(0.0:200): proctitle="[packageName]" 
W/auditd: type=1320 audit(0.0:200): 
E/RenderScript: Unable to open shared library (/data/user_de/0/[packageName]/code_cache/com.android.renderscript.cache/librs.rgb2yuv.so): dlopen failed: couldn't map "/data/user_de/0/[packageName]/code_cache/com.android.renderscript.cache/librs.rgb2yuv.so" segment 0: Permission denied 

このファイル/data/user_de/0/[packageName]/code_cache/com.android.renderscript.cache/librs.rgb2yuv.soが電話に存在するため、それはアクセス許可の問題のように見えます。

私は独自のAndroid OSビルド(Lineage 14.1を特定)を使用しているため、権限を変更できます。私はすでにビデオアプリケーションにアクセスできるように管理しています(app.teファイル内のneverallowブロックからsystem_appを除外します)。しかし、私はシステムアプリとレンダスクリプト特権との間の接続を見つけることができません。

答えて

1

私はついにこの問題を解決しました。

レンダスクリプトコードが共有ライブラリファイル(.so)にコンパイルされ、/ dataディレクトリ/ partitionに配置されています。 LineageOS14.1で実装されたSELinuxポリシーは、system_app(これはポリシールールが "割り当て"され、システム証明書で署名されたアプリケーションがこのタイプとして認識されるタイプ)であり、system_app_data_fileさまざまなシステムアプリケーションデータが格納されているディレクトリを指定します。私の場合は、RenderScriptライブラリがコンパイルされています)。

ライブラリをロードするには実行権限が必要です。そのためログが印刷されます(denied {execute} ...)。

これで何ができますか? AOSPで

/system/sepolicyリポジトリは、いくつかの変更を必要とします:

system_app_data_file
diff --git a/system_app.te b/system_app.te 
index 50320c5..25ebf06 100644 
--- a/system_app.te 
+++ b/system_app.te 
@@ -11,6 +11,7 @@ binder_service(system_app) 
# Read and write /data/data subdirectory. 
allow system_app system_app_data_file:dir create_dir_perms; 
allow system_app system_app_data_file:{ file lnk_file } create_file_perms; 
+allow system_app system_app_data_file:{ file lnk_file } { execute }; 

# Read and write to /data/misc/user. 
allow system_app misc_user_data_file:dir create_dir_perms; 

上で実行するsystem_appしかし、この変更は十分ではありません許可する - ASOPの構築を今すぐ終了します他のルールがこのルールと矛盾しているというエラーが表示されます。

/data
diff --git a/app.te b/app.te 
index 19a7dac..7a34645 100644 
--- a/app.te 
+++ b/app.te 
@@ -453,18 +454,19 @@ neverallow appdomain { 
# Blacklist app domains not allowed to execute from /data 
neverallow { 
    bluetooth 
    isolated_app 
    nfc 
    radio 
    shared_relro 
    system_app 
} { 
    data_file_type 
    -dalvikcache_data_file 
    -system_data_file # shared libs in apks 
+ -system_app_data_file 
    -apk_data_file 
}:file no_x_file_perms; 

からこのルールを実行neverallowに例外としてsystem_app_data_fileを追加し、私の変更なしに、ファイル上で実行されるからsystem_appを妨げている - 修正はsystem_app_data_fileの例外を追加します。

関連する問題