Set system UID for internal discover peer message
Internal messages doesn't have a package name. So
set sending UID to system UID in internal discover
peer message to pass the permission checks and process
the message.
Bug: 264623515
Test: atest com.android.server.wifi.p2p.WifiP2pServiceImplTest
Change-Id: Icb34b89429876c28586dd9758d14f49c813ce7d6
Merged-In: Icb34b89429876c28586dd9758d14f49c813ce7d6
diff --git a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
index 772cc63..fd35b6b 100644
--- a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
+++ b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
@@ -5618,9 +5618,12 @@
mPeersLostDuringConnection.clear();
mServiceDiscReqId = null;
+
Bundle extras = new Bundle();
extras.putBoolean(WifiP2pManager.EXTRA_PARAM_KEY_INTERNAL_MESSAGE, true);
- sendMessage(WifiP2pManager.DISCOVER_PEERS, extras);
+ final Message msg = obtainMessage(WifiP2pManager.DISCOVER_PEERS, extras);
+ msg.sendingUid = Process.myUid();
+ sendMessage(msg);
sendDisconnectWifiRequest(false);
}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
index d5f3ea3..13106ae 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
@@ -7049,4 +7049,26 @@
assertEquals(WifiP2pManager.RESPONSE_CONNECTION_INFO, mMessageCaptor.getValue().what);
assertFalse(((WifiP2pInfo) mMessageCaptor.getValue().obj).groupFormed);
}
+
+ /**
+ * Verify that GroupFailure triggers internal p2p discover
+ */
+ @Test
+ public void testGroupfailuretriggerInternalDiscoverPeers() throws Exception {
+ lenient().when(Process.myUid()).thenReturn(Process.SYSTEM_UID);
+ when(mWifiNative.p2pFind(anyInt())).thenReturn(true);
+ forceP2pEnabled(mClient1);
+ when(mWifiNative.p2pGroupAdd(anyBoolean())).thenReturn(true);
+
+ mockEnterProvisionDiscoveryState();
+
+ WifiP2pProvDiscEvent pdEvent = new WifiP2pProvDiscEvent();
+ pdEvent.device = mTestWifiP2pDevice;
+
+ /* Trigger a group failure */
+ sendSimpleMsg(null, WifiP2pManager.CANCEL_CONNECT);
+
+ /* Verify that p2p discover is triggered */
+ verify(mWifiNative).p2pFind(anyInt());
+ }
}