diff --git a/private/system_server.te b/private/system_server.te
index a1f989935ec3de76829a198e1a826856173554a8..5db68504ac11df12d46707af57228dd85510f9ae 100644
--- a/private/system_server.te
+++ b/private/system_server.te
@@ -193,7 +193,7 @@ binder_call(system_server, hal_thermal)
 binder_call(system_server, hal_usb)
 binder_call(system_server, hal_vibrator)
 binder_call(system_server, hal_vr)
-binder_call(system_server, hal_wifi)
+hal_client_domain(system_server, hal_wifi)
 binder_call(system_server, wpa)
 
 # Talk to tombstoned to get ANR traces.
diff --git a/public/attributes b/public/attributes
index 0864638dcc42394855d0d43af18c76e00cc26f67..d418375ce0290454bc7cb44f746fe95af9d0acbd 100644
--- a/public/attributes
+++ b/public/attributes
@@ -161,3 +161,5 @@ attribute hal_usb;
 attribute hal_vibrator;
 attribute hal_vr;
 attribute hal_wifi;
+attribute hal_wifi_client;
+attribute hal_wifi_server;
diff --git a/public/hal_wifi.te b/public/hal_wifi.te
index 960f1aceb4aaf7c71ad5735cafad7020d2d48b05..edd30fb38e39fb2841ba51b08515c3fbfe17ae39 100644
--- a/public/hal_wifi.te
+++ b/public/hal_wifi.te
@@ -1,5 +1,6 @@
-## call into system_server process (for invoking callbacks)
-binder_call(hal_wifi, system_server)
+# HwBinder IPC from client to server, and callbacks
+binder_call(hal_wifi_client, hal_wifi_server)
+binder_call(hal_wifi_server, hal_wifi_client)
 
 r_dir_file(hal_wifi, proc_net)
 r_dir_file(hal_wifi, sysfs_type)
diff --git a/vendor/hal_wifi_default.te b/vendor/hal_wifi_default.te
index 5946ba43f05f7ae059205d111b68d759cd53a2c4..7c3949e662791b554c80097ba4ecb340c6600243 100644
--- a/vendor/hal_wifi_default.te
+++ b/vendor/hal_wifi_default.te
@@ -1,5 +1,5 @@
 type hal_wifi_default, domain;
-hal_impl_domain(hal_wifi_default, hal_wifi)
+hal_server_domain(hal_wifi_default, hal_wifi)
 
 type hal_wifi_default_exec, exec_type, file_type;
 init_daemon_domain(hal_wifi_default)