diff --git a/domain.te b/domain.te
index 733a0952341cbd79271afb7b334b76d9483b5c8a..32aa9004c06ab4be6f44a353547f1bdc86aef32a 100644
--- a/domain.te
+++ b/domain.te
@@ -177,7 +177,14 @@ neverallow { domain -init -recovery } unlabeled:dir_file_class_set create;
 
 # Limit ability to ptrace or read sensitive /proc/pid files of processes
 # with other UIDs to these whitelisted domains.
-neverallow { domain -debuggerd -vold -dumpstate -system_server } self:capability sys_ptrace;
+neverallow {
+  domain
+  -debuggerd
+  -vold
+  -dumpstate
+  -system_server
+  userdebug_or_eng(`-procrank')
+} self:capability sys_ptrace;
 
 # Limit device node creation to these whitelisted domains.
 neverallow { domain -kernel -init -recovery -ueventd -watchdogd -healthd -vold -uncrypt -slideshow } self:capability mknod;
diff --git a/file_contexts b/file_contexts
index ce55cc874cc8b4014a692c3446afd8400c484fcb..27d5842d8fc94f90ce477367ba5a3e5b1f0f8bda 100644
--- a/file_contexts
+++ b/file_contexts
@@ -156,6 +156,7 @@
 /system/bin/tf_daemon	u:object_r:tee_exec:s0
 /system/bin/racoon	u:object_r:racoon_exec:s0
 /system/xbin/su		u:object_r:su_exec:s0
+/system/xbin/procrank   u:object_r:procrank_exec:s0
 /system/vendor/bin/gpsd u:object_r:gpsd_exec:s0
 /system/bin/dnsmasq     u:object_r:dnsmasq_exec:s0
 /system/bin/hostapd     u:object_r:hostapd_exec:s0
diff --git a/procrank.te b/procrank.te
new file mode 100644
index 0000000000000000000000000000000000000000..06b33f8d8ecff02e7318f84967126ef7be5fa25e
--- /dev/null
+++ b/procrank.te
@@ -0,0 +1,13 @@
+# File types must be defined for file_contexts.
+type procrank_exec, exec_type, file_type;
+
+userdebug_or_eng(`
+  type procrank, domain, mlstrustedsubject;
+
+  domain_auto_trans(shell, procrank_exec, procrank)
+  allow procrank self:capability sys_ptrace;
+  allow procrank devpts:chr_file { read write getattr ioctl };
+  r_dir_file(procrank, domain)
+  allow procrank shell:fd use;
+  allow procrank adbd:process sigchld;
+')