diff --git a/private/adbd.te b/private/adbd.te
index 52597ebbf4335a9495ea208d9c20e1c1e42f05e0..47a6cbd8cf701a04032f8236fa3dc8f7364e43d6 100644
--- a/private/adbd.te
+++ b/private/adbd.te
@@ -3,6 +3,8 @@
 typeattribute adbd coredomain;
 typeattribute adbd mlstrustedsubject;
 
+init_daemon_domain(adbd)
+
 domain_auto_trans(adbd, shell_exec, shell)
 
 userdebug_or_eng(`
diff --git a/private/file_contexts b/private/file_contexts
index 0ec1715d5c59c419b948c5798e97ea548a2a0b87..37e6241ad35d24aa8965efbf0e21d8dbe5318027 100644
--- a/private/file_contexts
+++ b/private/file_contexts
@@ -271,6 +271,7 @@
 /system/etc/selinux/plat_sepolicy.cil       u:object_r:sepolicy_file:s0
 /system/etc/selinux/plat_and_mapping_sepolicy\.cil\.sha256 u:object_r:sepolicy_file:s0
 /system/bin/vr_hwc               u:object_r:vr_hwc_exec:s0
+/system/bin/adbd                 u:object_r:adbd_exec:s0
 
 #############################
 # Vendor files
diff --git a/private/init.te b/private/init.te
index 558ba966b016c77706d59007a0ab3688fb51f49f..5c23f66f10f8d0f98b287a67cec1237bd220494b 100644
--- a/private/init.te
+++ b/private/init.te
@@ -3,12 +3,12 @@ typeattribute init coredomain;
 tmpfs_domain(init)
 
 # Transitions to seclabel processes in init.rc
-domain_trans(init, rootfs, adbd)
 domain_trans(init, rootfs, charger)
 domain_trans(init, rootfs, healthd)
 domain_trans(init, rootfs, slideshow)
 domain_auto_trans(init, e2fs_exec, e2fs)
 recovery_only(`
+  domain_trans(init, rootfs, adbd)
   domain_trans(init, rootfs, recovery)
 ')
 domain_trans(init, shell_exec, shell)
diff --git a/public/adbd.te b/public/adbd.te
index 7ecd045fc0a8b8942b2e49056a58c4fd6c0fa36a..95854c01e7e6bcc5635ec98fd56179f9cde63829 100644
--- a/public/adbd.te
+++ b/public/adbd.te
@@ -1,3 +1,4 @@
 # adbd seclabel is specified in init.rc since
 # it lives in the rootfs and has no unique file type.
 type adbd, domain;
+type adbd_exec, exec_type, file_type;