diff --git a/private/gpuservice.te b/private/gpuservice.te
index 6cbd89c287713c543527697751a9f9d998268462..5e8aab5f33137ff721f41ee3903608456902e991 100644
--- a/private/gpuservice.te
+++ b/private/gpuservice.te
@@ -22,6 +22,9 @@ hwbinder_use(gpuservice)
 allow gpuservice graphics_device:dir search;
 allow gpuservice graphics_device:chr_file rw_file_perms;
 
+# Needed for dumpsys pipes.
+allow gpuservice shell:fifo_file write;
+
 # Use socket supplied by adbd, for cmd gpu vkjson etc.
 allow gpuservice adbd:unix_stream_socket { read write getattr };
 
diff --git a/private/shell.te b/private/shell.te
index ee5b73cac2ae23b9286910d7aea04efebccb6487..885714dc4afce8573643c78007e3bd25c3f23494 100644
--- a/private/shell.te
+++ b/private/shell.te
@@ -55,6 +55,9 @@ allow shell perfetto_traces_data_file:file r_file_perms;
 # Allow shell-based "dumpsys" to call into bufferhubd.
 binder_call(shell, bufferhubd);
 
+# Allow shell to run adb shell cmd gpu commands.
+binder_call(shell, gpuservice);
+
 # Allow shell to use atrace HAL
 hal_client_domain(shell, hal_atrace)