Clear UIDs when sharing NetworkCapabilties for ConnectivityDiagnostics.
ConnectivityDiagnostics shares NetworkCapabilities in ConnectivityReports and DataStallReports. These NetworkCapabilities need to have their UIDs scrubbed before they are shared with callbacks. Bug: 148942124 Test: atest FrameworksNetTests Change-Id: I5bde5a8116f7e36b8f4de49adf4cab8ec45a5aa4
This commit is contained in:
@@ -7832,12 +7832,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
private void handleNetworkTestedWithExtras(
|
private void handleNetworkTestedWithExtras(
|
||||||
@NonNull ConnectivityReportEvent reportEvent, @NonNull PersistableBundle extras) {
|
@NonNull ConnectivityReportEvent reportEvent, @NonNull PersistableBundle extras) {
|
||||||
final NetworkAgentInfo nai = reportEvent.mNai;
|
final NetworkAgentInfo nai = reportEvent.mNai;
|
||||||
|
final NetworkCapabilities networkCapabilities =
|
||||||
|
new NetworkCapabilities(nai.networkCapabilities);
|
||||||
|
clearNetworkCapabilitiesUids(networkCapabilities);
|
||||||
final ConnectivityReport report =
|
final ConnectivityReport report =
|
||||||
new ConnectivityReport(
|
new ConnectivityReport(
|
||||||
reportEvent.mNai.network,
|
reportEvent.mNai.network,
|
||||||
reportEvent.mTimestampMillis,
|
reportEvent.mTimestampMillis,
|
||||||
nai.linkProperties,
|
nai.linkProperties,
|
||||||
nai.networkCapabilities,
|
networkCapabilities,
|
||||||
extras);
|
extras);
|
||||||
final List<IConnectivityDiagnosticsCallback> results =
|
final List<IConnectivityDiagnosticsCallback> results =
|
||||||
getMatchingPermissionedCallbacks(nai);
|
getMatchingPermissionedCallbacks(nai);
|
||||||
@@ -7853,13 +7856,16 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
private void handleDataStallSuspected(
|
private void handleDataStallSuspected(
|
||||||
@NonNull NetworkAgentInfo nai, long timestampMillis, int detectionMethod,
|
@NonNull NetworkAgentInfo nai, long timestampMillis, int detectionMethod,
|
||||||
@NonNull PersistableBundle extras) {
|
@NonNull PersistableBundle extras) {
|
||||||
|
final NetworkCapabilities networkCapabilities =
|
||||||
|
new NetworkCapabilities(nai.networkCapabilities);
|
||||||
|
clearNetworkCapabilitiesUids(networkCapabilities);
|
||||||
final DataStallReport report =
|
final DataStallReport report =
|
||||||
new DataStallReport(
|
new DataStallReport(
|
||||||
nai.network,
|
nai.network,
|
||||||
timestampMillis,
|
timestampMillis,
|
||||||
detectionMethod,
|
detectionMethod,
|
||||||
nai.linkProperties,
|
nai.linkProperties,
|
||||||
nai.networkCapabilities,
|
networkCapabilities,
|
||||||
extras);
|
extras);
|
||||||
final List<IConnectivityDiagnosticsCallback> results =
|
final List<IConnectivityDiagnosticsCallback> results =
|
||||||
getMatchingPermissionedCallbacks(nai);
|
getMatchingPermissionedCallbacks(nai);
|
||||||
@@ -7885,6 +7891,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void clearNetworkCapabilitiesUids(@NonNull NetworkCapabilities nc) {
|
||||||
|
nc.setUids(null);
|
||||||
|
nc.setAdministratorUids(Collections.EMPTY_LIST);
|
||||||
|
nc.setOwnerUid(Process.INVALID_UID);
|
||||||
|
}
|
||||||
|
|
||||||
private List<IConnectivityDiagnosticsCallback> getMatchingPermissionedCallbacks(
|
private List<IConnectivityDiagnosticsCallback> getMatchingPermissionedCallbacks(
|
||||||
@NonNull NetworkAgentInfo nai) {
|
@NonNull NetworkAgentInfo nai) {
|
||||||
final List<IConnectivityDiagnosticsCallback> results = new ArrayList<>();
|
final List<IConnectivityDiagnosticsCallback> results = new ArrayList<>();
|
||||||
|
|||||||
@@ -23,8 +23,6 @@ import static android.content.pm.PackageManager.GET_PERMISSIONS;
|
|||||||
import static android.content.pm.PackageManager.MATCH_ANY_USER;
|
import static android.content.pm.PackageManager.MATCH_ANY_USER;
|
||||||
import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
||||||
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||||
import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport;
|
|
||||||
import static android.net.ConnectivityDiagnosticsManager.DataStallReport;
|
|
||||||
import static android.net.ConnectivityManager.ACTION_CAPTIVE_PORTAL_SIGN_IN;
|
import static android.net.ConnectivityManager.ACTION_CAPTIVE_PORTAL_SIGN_IN;
|
||||||
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
|
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
|
||||||
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION_SUPL;
|
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION_SUPL;
|
||||||
@@ -100,6 +98,7 @@ import static org.junit.Assert.assertTrue;
|
|||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
import static org.mockito.ArgumentMatchers.anyLong;
|
import static org.mockito.ArgumentMatchers.anyLong;
|
||||||
import static org.mockito.ArgumentMatchers.anyString;
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
|
import static org.mockito.ArgumentMatchers.argThat;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.ArgumentMatchers.startsWith;
|
import static org.mockito.ArgumentMatchers.startsWith;
|
||||||
import static org.mockito.Matchers.anyInt;
|
import static org.mockito.Matchers.anyInt;
|
||||||
@@ -6840,8 +6839,13 @@ public class ConnectivityServiceTest {
|
|||||||
HandlerUtilsKt.waitForIdle(mCsHandlerThread, TIMEOUT_MS);
|
HandlerUtilsKt.waitForIdle(mCsHandlerThread, TIMEOUT_MS);
|
||||||
|
|
||||||
// Verify onConnectivityReport fired
|
// Verify onConnectivityReport fired
|
||||||
verify(mConnectivityDiagnosticsCallback)
|
verify(mConnectivityDiagnosticsCallback).onConnectivityReport(
|
||||||
.onConnectivityReport(any(ConnectivityReport.class));
|
argThat(report -> {
|
||||||
|
final NetworkCapabilities nc = report.getNetworkCapabilities();
|
||||||
|
return nc.getUids() == null
|
||||||
|
&& nc.getAdministratorUids().isEmpty()
|
||||||
|
&& nc.getOwnerUid() == Process.INVALID_UID;
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -6856,7 +6860,13 @@ public class ConnectivityServiceTest {
|
|||||||
HandlerUtilsKt.waitForIdle(mCsHandlerThread, TIMEOUT_MS);
|
HandlerUtilsKt.waitForIdle(mCsHandlerThread, TIMEOUT_MS);
|
||||||
|
|
||||||
// Verify onDataStallSuspected fired
|
// Verify onDataStallSuspected fired
|
||||||
verify(mConnectivityDiagnosticsCallback).onDataStallSuspected(any(DataStallReport.class));
|
verify(mConnectivityDiagnosticsCallback).onDataStallSuspected(
|
||||||
|
argThat(report -> {
|
||||||
|
final NetworkCapabilities nc = report.getNetworkCapabilities();
|
||||||
|
return nc.getUids() == null
|
||||||
|
&& nc.getAdministratorUids().isEmpty()
|
||||||
|
&& nc.getOwnerUid() == Process.INVALID_UID;
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user