summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2017-08-04 09:49:45 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2017-08-04 09:49:45 +0000
commitb50651e390c1494d6abba1039361d4f5caf0eaae (patch)
tree0b0a9a3815030aade024b775f4975202a7c228e1 /service
parenteaad2273924e57b361c31d2f97c07409f41ac85e (diff)
parentd79fe7b2896c389d9304919763066a49913219db (diff)
Merge "Fix various issues of getConnectionInfo" into oc-mr1-dev
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java4
-rw-r--r--service/java/com/android/server/wifi/WifiStateMachine.java4
-rw-r--r--service/java/com/android/server/wifi/util/WifiPermissionsUtil.java28
3 files changed, 21 insertions, 15 deletions
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index d6faf9b5d..6ef102066 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -1737,14 +1737,14 @@ public class WifiServiceImpl extends IWifiManager.Stub {
* @return the Wi-Fi information, contained in {@link WifiInfo}.
*/
@Override
- public WifiInfo getConnectionInfo() {
+ public WifiInfo getConnectionInfo(String callingPackage) {
enforceAccessPermission();
mLog.trace("getConnectionInfo uid=%").c(Binder.getCallingUid()).flush();
/*
* Make sure we have the latest information, by sending
* a status request to the supplicant.
*/
- return mWifiStateMachine.syncRequestConnectionInfo();
+ return mWifiStateMachine.syncRequestConnectionInfo(callingPackage);
}
/**
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index 5f970026f..67713c2e1 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -1756,7 +1756,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss
*
* @return a {@link WifiInfo} object containing information about the current connection
*/
- public WifiInfo syncRequestConnectionInfo() {
+ public WifiInfo syncRequestConnectionInfo(String callingPackage) {
int uid = Binder.getCallingUid();
WifiInfo result = new WifiInfo(mWifiInfo);
if (uid == Process.myUid()) return result;
@@ -1771,7 +1771,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss
result.setMacAddress(mWifiInfo.getMacAddress());
}
if (mWifiPermissionsUtil.canAccessScanResults(
- packageManager.getNameForUid(uid),
+ callingPackage,
uid,
Build.VERSION_CODES.O)) {
hideBssidAndSsid = false;
diff --git a/service/java/com/android/server/wifi/util/WifiPermissionsUtil.java b/service/java/com/android/server/wifi/util/WifiPermissionsUtil.java
index c5eea7d70..6caca46dd 100644
--- a/service/java/com/android/server/wifi/util/WifiPermissionsUtil.java
+++ b/service/java/com/android/server/wifi/util/WifiPermissionsUtil.java
@@ -23,6 +23,7 @@ import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.net.ConnectivityManager;
import android.net.NetworkScoreManager;
+import android.os.Binder;
import android.os.RemoteException;
import android.os.UserManager;
import android.provider.Settings;
@@ -116,7 +117,7 @@ public class WifiPermissionsUtil {
/**
* API to determine if the caller has permissions to get
* scan results.
- * @param pkgName Packagename of the application requesting access
+ * @param pkgName package name of the application requesting access
* @param uid The uid of the package
* @param minVersion Minimum app API Version number to enforce location permission
* @return boolean true or false if permissions is granted
@@ -193,19 +194,24 @@ public class WifiPermissionsUtil {
* current user.
*/
private boolean isCurrentProfile(int uid) {
- int currentUser = mWifiPermissionsWrapper.getCurrentUser();
- int callingUserId = mWifiPermissionsWrapper.getCallingUserId(uid);
- if (callingUserId == currentUser) {
- return true;
- } else {
- List<UserInfo> userProfiles = mUserManager.getProfiles(currentUser);
- for (UserInfo user: userProfiles) {
- if (user.id == callingUserId) {
- return true;
+ final long token = Binder.clearCallingIdentity();
+ try {
+ int currentUser = mWifiPermissionsWrapper.getCurrentUser();
+ int callingUserId = mWifiPermissionsWrapper.getCallingUserId(uid);
+ if (callingUserId == currentUser) {
+ return true;
+ } else {
+ List<UserInfo> userProfiles = mUserManager.getProfiles(currentUser);
+ for (UserInfo user : userProfiles) {
+ if (user.id == callingUserId) {
+ return true;
+ }
}
}
+ return false;
+ } finally {
+ Binder.restoreCallingIdentity(token);
}
- return false;
}
/**