diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2017-08-04 09:49:45 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-08-04 09:49:45 +0000 |
commit | b50651e390c1494d6abba1039361d4f5caf0eaae (patch) | |
tree | 0b0a9a3815030aade024b775f4975202a7c228e1 /service | |
parent | eaad2273924e57b361c31d2f97c07409f41ac85e (diff) | |
parent | d79fe7b2896c389d9304919763066a49913219db (diff) |
Merge "Fix various issues of getConnectionInfo" into oc-mr1-dev
Diffstat (limited to 'service')
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; } /** |