カスタム Hal サービス selinux 権限を追加する

 カスタム hal サービスの追加については、Android 12 S 分析に基づく HIDL サービス作成プロセスを参照してください。

以下の部分の追加は必須であり、いずれもサービスの自動起動に失敗する可能性があります。

ジェネリック/ベンダー/共通/ファイルコンテキスト

/vendor/bin/hw/vendor\.qti\.hardware\.customizehidl@1\.0-service u:object_r:hal_customizehidl_exec:s0

ジェネリック/ベンダー/共通/hwservice_contexts

vendor.qti.hardware.customizehidl::ICustomizeHidl u:object_r:hal_customizehidl_hwservice:s0

ジェネリック/ベンダー/共通/サービスコンテキスト

vendor.qti.hardware.customizehidl.ICustomizeHidl/デフォルト u:object_r:hal_customizehidl_service:s0

ジェネリック/パブリック/file.te

タイプ hal_customizehidl_exec、exec_type、vendor_file_type、file_type;

ジェネリック/パブリック/hwservice.te

タイプ hal_customizehidl_hwservice、hwservice_manager_type、protected_hwservice;

ジェネリック/パブリック/サービス.te

タイプ hal_customizehidl_service、vendor_service、protected_service、service_manager_type;

以下の部分の追加は必須であり、いずれもサービスの自動起動に失敗する可能性があります。

ジェネリック/ベンダー/共通/hal_customizehidl.te

タイプ hal_customizehidl、ドメイン;

hwbinder_use(hal_customizehidl)
init_daemon_domain(hal_customizehidl);

add_hwservice(hal_customizehidl, hal_customizehidl_hwservice)
get_prop(hal_customizehidl, hwservicemanager_prop)
hwbinder_use(hal_customizehidl)
add_service(hal_customizehidl, hal_customizehidl_service)
binding_use(hal_customizehidl)

次のエラーが発生した場合は、hwservice_contexts および hwservice.te に関連する定義と宣言を追加していない可能性があります。単に追加してください。

05-30 12:39:35.856 370 4561 I hwservicemanager:[email protected]::ICustomizeHidl/default を遅延サービスとして開始しようとしましたが、できませんでした。通常、これはサービスがインストールされていない場合に発生しますが、サービスが遅延サービスとして使用されることを目的としている場合は、正しく構成されていない可能性があります。


理解を容易にするために、上記の権限のいくつかの説明を以下に追加します。

hwbinder_use(hal_customizehidl) における hwbinder_use の定義は以下のとおりです。

define(`hwbinder_use', `
 # hwservicemanager を呼び出し、それに参照を転送します。allow
 $1 hwservicemanager:binder { call tr​​ansfer };
 # hwservicemanager によるコールバックの送信を許可します
。allow hwservicemanager $1:binder { call tr​​ansfer };
 # hwservicemanager はクライアントで getpidcon を実行します。 .allow
 hwservicemanager $1:dir search; 
allowed hwservicemanager $1:file { read open map }; 
allowed hwservicemanager $1:process getattr; # /dev/hwbinderおよび/dev/ashmem
への rw アクセスは
# domain.te内のすべてのドメインに許可されています. 
')

 add_hwservice(hal_customizehidl, hal_customizehidl_hwservice) の Add_hwservice は次のように定義されています

定義(` add_hwservice ', `
   allowed $1 $2:hwservice_manager { add find }; 
  allowed $1 hidl_base_hwservice:hwservice_manager add; 
  Neverallow { ドメイン -$1 } $2:hwservice_manager add; 
')

get_prop(hal_customizehidl, hwservicemanager_prop) における get_prop の定義は次のとおりです。

define(` get_prop ', `
 allow $1 $2:file { getattr open readmap };
 ')

add_service(hal_customizehidl, hal_customizehidl_service) の add_service は次のように定義されます

define(` add_service ', `
  allowed $1 $2:service_manager { add find }; 
  Neverallow { ドメイン -$1 } $2:service_manager add; 
')

binding_use(hal_customizehidl) の binding_use は次のように定義されます。

define(` binding_use ', ` 
# サービスマネージャーを呼び出し、それに参照を転送します。allow $1 servicemanager:binder { call tr​​ansfer };
 # servicemanager によるコールバックの送信を許可します
。allow servicemanager $1:binder { call tr​​ansfer };
 # servicemanager はクライアントで getpidcon を実行します。 .allowservicemanager
 $1:dirsearch; 
allowservicemanager$1:file{readopen}; 
allowservicemanager$1:processgetattr; # /dev/binderおよび/dev/ashmem
への rw アクセスは、 # 現在、 domain.te
内のすべてのドメインに許可されています。 
')

おすすめ

転載: blog.csdn.net/weixin_41028555/article/details/131191842