summaryrefslogtreecommitdiffstats
path: root/service/java/com/android/server/wifi
diff options
context:
space:
mode:
authorEtan Cohen <etancohen@google.com>2019-01-19 17:39:42 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-01-19 17:39:42 +0000
commitcc7a0e4d7a2427db4a8bd9473ba361748547b0d1 (patch)
treedd5845191754d10e308a549020eb845306267a82 /service/java/com/android/server/wifi
parent9d8a06dc30b31caffc9c957fc07265fec69aa95c (diff)
parentaeaf59e186fedc91679aeb2d22fd5dc9e35636f2 (diff)
downloadandroid_frameworks_opt_net_wifi-cc7a0e4d7a2427db4a8bd9473ba361748547b0d1.tar.gz
android_frameworks_opt_net_wifi-cc7a0e4d7a2427db4a8bd9473ba361748547b0d1.tar.bz2
android_frameworks_opt_net_wifi-cc7a0e4d7a2427db4a8bd9473ba361748547b0d1.zip
Merge "[WIFI] Add exemptions to allow DO/PO/Carrier apps to obtain randomized MAC address"
Diffstat (limited to 'service/java/com/android/server/wifi')
-rw-r--r--service/java/com/android/server/wifi/ClientModeImpl.java11
-rw-r--r--service/java/com/android/server/wifi/SavedNetworkEvaluator.java5
-rw-r--r--service/java/com/android/server/wifi/WakeupController.java4
-rw-r--r--service/java/com/android/server/wifi/WifiConfigManager.java32
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkSelector.java4
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java12
6 files changed, 46 insertions, 22 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java
index f9590147c..daab813af 100644
--- a/service/java/com/android/server/wifi/ClientModeImpl.java
+++ b/service/java/com/android/server/wifi/ClientModeImpl.java
@@ -1593,8 +1593,10 @@ public class ClientModeImpl extends StateMachine {
* @param channel
* @return
*/
- public List<WifiConfiguration> syncGetConfiguredNetworks(int uuid, AsyncChannel channel) {
- Message resultMsg = channel.sendMessageSynchronously(CMD_GET_CONFIGURED_NETWORKS, uuid);
+ public List<WifiConfiguration> syncGetConfiguredNetworks(int uuid, AsyncChannel channel,
+ int targetUid) {
+ Message resultMsg = channel.sendMessageSynchronously(CMD_GET_CONFIGURED_NETWORKS, uuid,
+ targetUid);
if (resultMsg == null) { // an error has occurred
return null;
} else {
@@ -3469,7 +3471,8 @@ public class ClientModeImpl extends StateMachine {
deleteNetworkConfigAndSendReply(message, false);
break;
case CMD_GET_CONFIGURED_NETWORKS:
- replyToMessage(message, message.what, mWifiConfigManager.getSavedNetworks());
+ replyToMessage(message, message.what,
+ mWifiConfigManager.getSavedNetworks(message.arg2));
break;
case CMD_GET_PRIVILEGED_CONFIGURED_NETWORKS:
replyToMessage(message, message.what,
@@ -5840,7 +5843,7 @@ public class ClientModeImpl extends StateMachine {
* Update WifiMetrics before dumping
*/
public void updateWifiMetrics() {
- mWifiMetrics.updateSavedNetworks(mWifiConfigManager.getSavedNetworks());
+ mWifiMetrics.updateSavedNetworks(mWifiConfigManager.getSavedNetworks(Process.WIFI_UID));
mPasspointManager.updateMetrics();
}
diff --git a/service/java/com/android/server/wifi/SavedNetworkEvaluator.java b/service/java/com/android/server/wifi/SavedNetworkEvaluator.java
index a6699d264..cacc48365 100644
--- a/service/java/com/android/server/wifi/SavedNetworkEvaluator.java
+++ b/service/java/com/android/server/wifi/SavedNetworkEvaluator.java
@@ -20,11 +20,11 @@ import android.annotation.NonNull;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
+import android.os.Process;
import android.util.LocalLog;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.server.wifi.WifiNetworkSelector.NetworkEvaluator.OnConnectableListener;
import com.android.server.wifi.util.TelephonyUtil;
import java.util.List;
@@ -95,7 +95,8 @@ public class SavedNetworkEvaluator implements WifiNetworkSelector.NetworkEvaluat
* Update all the saved networks' selection status
*/
private void updateSavedNetworkSelectionStatus() {
- List<WifiConfiguration> savedNetworks = mWifiConfigManager.getSavedNetworks();
+ List<WifiConfiguration> savedNetworks = mWifiConfigManager.getSavedNetworks(
+ Process.WIFI_UID);
if (savedNetworks.size() == 0) {
localLog("No saved networks.");
return;
diff --git a/service/java/com/android/server/wifi/WakeupController.java b/service/java/com/android/server/wifi/WakeupController.java
index 75c7e53f0..ce3c3af20 100644
--- a/service/java/com/android/server/wifi/WakeupController.java
+++ b/service/java/com/android/server/wifi/WakeupController.java
@@ -25,6 +25,7 @@ import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiScanner;
import android.os.Handler;
import android.os.Looper;
+import android.os.Process;
import android.provider.Settings;
import android.util.Log;
@@ -310,7 +311,8 @@ public class WakeupController {
/** Returns a filtered set of saved networks from WifiConfigManager. */
private Set<ScanResultMatchInfo> getGoodSavedNetworks() {
- List<WifiConfiguration> savedNetworks = mWifiConfigManager.getSavedNetworks();
+ List<WifiConfiguration> savedNetworks = mWifiConfigManager.getSavedNetworks(
+ Process.WIFI_UID);
Set<ScanResultMatchInfo> goodSavedNetworks = new HashSet<>(savedNetworks.size());
for (WifiConfiguration config : savedNetworks) {
diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java
index 1f613556f..a17c8c908 100644
--- a/service/java/com/android/server/wifi/WifiConfigManager.java
+++ b/service/java/com/android/server/wifi/WifiConfigManager.java
@@ -506,15 +506,20 @@ public class WifiConfigManager {
*
* @param configuration provided WifiConfiguration object.
* @param maskPasswords Mask passwords or not.
+ * @param targetUid Target UID for MAC address reading: -1 = mask all, 0 = mask none, >0 =
+ * mask all but the targetUid (carrier app).
* @return Copy of the WifiConfiguration object.
*/
private WifiConfiguration createExternalWifiConfiguration(
- WifiConfiguration configuration, boolean maskPasswords) {
+ WifiConfiguration configuration, boolean maskPasswords, int targetUid) {
WifiConfiguration network = new WifiConfiguration(configuration);
if (maskPasswords) {
maskPasswordsInWifiConfiguration(network);
}
- maskRandomizedMacAddressInWifiConfiguration(network);
+ if (targetUid != Process.WIFI_UID && targetUid != Process.SYSTEM_UID
+ && targetUid != configuration.creatorUid) {
+ maskRandomizedMacAddressInWifiConfiguration(network);
+ }
return network;
}
@@ -526,16 +531,19 @@ public class WifiConfigManager {
*
* @param savedOnly Retrieve only saved networks.
* @param maskPasswords Mask passwords or not.
+ * @param targetUid Target UID for MAC address reading: -1 (Invalid UID) = mask all,
+ * WIFI||SYSTEM = mask none, <other> = mask all but the targetUid (carrier
+ * app).
* @return List of WifiConfiguration objects representing the networks.
*/
private List<WifiConfiguration> getConfiguredNetworks(
- boolean savedOnly, boolean maskPasswords) {
+ boolean savedOnly, boolean maskPasswords, int targetUid) {
List<WifiConfiguration> networks = new ArrayList<>();
for (WifiConfiguration config : getInternalConfiguredNetworks()) {
if (savedOnly && config.ephemeral) {
continue;
}
- networks.add(createExternalWifiConfiguration(config, maskPasswords));
+ networks.add(createExternalWifiConfiguration(config, maskPasswords, targetUid));
}
return networks;
}
@@ -546,7 +554,7 @@ public class WifiConfigManager {
* @return List of WifiConfiguration objects representing the networks.
*/
public List<WifiConfiguration> getConfiguredNetworks() {
- return getConfiguredNetworks(false, true);
+ return getConfiguredNetworks(false, true, Process.WIFI_UID);
}
/**
@@ -559,7 +567,7 @@ public class WifiConfigManager {
* @return List of WifiConfiguration objects representing the networks.
*/
public List<WifiConfiguration> getConfiguredNetworksWithPasswords() {
- return getConfiguredNetworks(false, false);
+ return getConfiguredNetworks(false, false, Process.WIFI_UID);
}
/**
@@ -567,8 +575,8 @@ public class WifiConfigManager {
*
* @return List of WifiConfiguration objects representing the networks.
*/
- public List<WifiConfiguration> getSavedNetworks() {
- return getConfiguredNetworks(true, true);
+ public List<WifiConfiguration> getSavedNetworks(int targetUid) {
+ return getConfiguredNetworks(true, true, targetUid);
}
/**
@@ -585,7 +593,7 @@ public class WifiConfigManager {
}
// Create a new configuration object with the passwords masked to send out to the external
// world.
- return createExternalWifiConfiguration(config, true);
+ return createExternalWifiConfiguration(config, true, Process.WIFI_UID);
}
/**
@@ -602,7 +610,7 @@ public class WifiConfigManager {
}
// Create a new configuration object with the passwords masked to send out to the external
// world.
- return createExternalWifiConfiguration(config, true);
+ return createExternalWifiConfiguration(config, true, Process.WIFI_UID);
}
/**
@@ -622,7 +630,7 @@ public class WifiConfigManager {
}
// Create a new configuration object without the passwords masked to send out to the
// external world.
- return createExternalWifiConfiguration(config, false);
+ return createExternalWifiConfiguration(config, false, Process.WIFI_UID);
}
/**
@@ -2146,7 +2154,7 @@ public class WifiConfigManager {
&& scanDetail.getNetworkDetail().getDtimInterval() > 0) {
network.dtimInterval = scanDetail.getNetworkDetail().getDtimInterval();
}
- return createExternalWifiConfiguration(network, true);
+ return createExternalWifiConfiguration(network, true, Process.WIFI_UID);
}
/**
diff --git a/service/java/com/android/server/wifi/WifiNetworkSelector.java b/service/java/com/android/server/wifi/WifiNetworkSelector.java
index 16d10d348..cf1874776 100644
--- a/service/java/com/android/server/wifi/WifiNetworkSelector.java
+++ b/service/java/com/android/server/wifi/WifiNetworkSelector.java
@@ -24,6 +24,7 @@ import android.net.wifi.ScanResult;
import android.net.wifi.SupplicantState;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
+import android.os.Process;
import android.text.TextUtils;
import android.util.LocalLog;
import android.util.Pair;
@@ -460,7 +461,8 @@ public class WifiNetworkSelector {
String key = selected.configKey();
// This is only used for setting the connect choice timestamp for debugging purposes.
long currentTime = mClock.getWallClockMillis();
- List<WifiConfiguration> savedNetworks = mWifiConfigManager.getSavedNetworks();
+ List<WifiConfiguration> savedNetworks = mWifiConfigManager.getSavedNetworks(
+ Process.WIFI_UID);
for (WifiConfiguration network : savedNetworks) {
WifiConfiguration.NetworkSelectionStatus status = network.getNetworkSelectionStatus();
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 85e109d9d..b3d6e9db9 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -1813,9 +1813,17 @@ public class WifiServiceImpl extends BaseWifiService {
if (mVerboseLoggingEnabled) {
mLog.info("getConfiguredNetworks uid=%").c(callingUid).flush();
}
+
+ int targetConfigUid = Process.INVALID_UID; // don't expose any MAC addresses
+ if (isPrivileged(getCallingPid(), callingUid) || isDeviceOrProfileOwner(callingUid)) {
+ targetConfigUid = Process.WIFI_UID; // expose all MAC addresses
+ } else if (isCarrierApp) {
+ targetConfigUid = callingUid; // expose only those configs created by the Carrier App
+ }
+
if (mClientModeImplChannel != null) {
List<WifiConfiguration> configs = mClientModeImpl.syncGetConfiguredNetworks(
- callingUid, mClientModeImplChannel);
+ callingUid, mClientModeImplChannel, targetConfigUid);
if (configs != null) {
if (isTargetSdkLessThanQOrPrivileged) {
return new ParceledListSlice<WifiConfiguration>(configs);
@@ -2858,7 +2866,7 @@ public class WifiServiceImpl extends BaseWifiService {
if (mClientModeImplChannel != null) {
// Delete all Wifi SSIDs
List<WifiConfiguration> networks = mClientModeImpl.syncGetConfiguredNetworks(
- Binder.getCallingUid(), mClientModeImplChannel);
+ Binder.getCallingUid(), mClientModeImplChannel, Process.WIFI_UID);
if (networks != null) {
for (WifiConfiguration config : networks) {
removeNetwork(config.networkId, packageName);