diff --git a/public/perfprofd.te b/public/perfprofd.te
index 499e2a91f288d83b3403ab94fe7747e684b11662..f0df6a0aa89859e3923652e1f2ea8cf8b1d2ca1e 100644
--- a/public/perfprofd.te
+++ b/public/perfprofd.te
@@ -1,9 +1,12 @@
 # perfprofd - perf profile collection daemon
+type perfprofd, domain;
 type perfprofd_exec, exec_type, file_type;
 
 userdebug_or_eng(`
 
-  type perfprofd, domain, domain_deprecated, mlstrustedsubject, coredomain;
+  typeattribute perfprofd domain_deprecated;
+  typeattribute perfprofd coredomain;
+  typeattribute perfprofd mlstrustedsubject;
 
   # perfprofd needs to control CPU hot-plug in order to avoid kernel
   # perfevents problems in cases where CPU goes on/off during measurement;
diff --git a/public/su.te b/public/su.te
index 47349d88f52e0ddb4ec4a032d03e3678f2101697..8ddd1622459af1ac864e90686680e91396cb3045 100644
--- a/public/su.te
+++ b/public/su.te
@@ -1,3 +1,7 @@
+# All types must be defined regardless of build variant to ensure
+# policy compilation succeeds with userdebug/user combination at boot
+type su, domain;
+
 # File types must be defined for file_contexts.
 type su_exec, exec_type, file_type;
 
@@ -5,7 +9,7 @@ userdebug_or_eng(`
   # Domain used for su processes, as well as for adbd and adb shell
   # after performing an adb root command.  The domain definition is
   # wrapped to ensure that it does not exist at all on -user builds.
-  type su, domain, mlstrustedsubject;
+  typeattribute su mlstrustedsubject;
 
   # Add su to various domains
   net_domain(su)