Merge Android 12 QPR1

Bug: 210511427
Merged-In: I7361e4335701c8bdb13f817ecdc1530830eb86e0
Change-Id: I179a7841b24a81bc566f97b6b2b1a0b9604aae6d
diff --git a/service/java/com/android/server/wifi/HalDeviceManager.java b/service/java/com/android/server/wifi/HalDeviceManager.java
index 5462bb9..1f0d150 100644
--- a/service/java/com/android/server/wifi/HalDeviceManager.java
+++ b/service/java/com/android/server/wifi/HalDeviceManager.java
@@ -1522,9 +1522,13 @@
 
         @Override
         public void onSubsystemRestart(WifiStatus status) throws RemoteException {
+            Log.i(TAG, "onSubsystemRestart");
             mEventHandler.post(() -> {
+                Log.i(TAG, "IWifiEventCallback.onSubsystemRestart: " + statusString(status));
                 synchronized (mLock) {
+                    Log.i(TAG, "Attempting to invoke mSubsystemRestartListener");
                     for (SubsystemRestartListenerProxy cb : mSubsystemRestartListener) {
+                        Log.i(TAG, "Invoking mSubsystemRestartListener");
                         cb.action();
                     }
                 }
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index f7a51a5..4e33614 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -2447,6 +2447,24 @@
             String featureId, boolean callerNetworksOnly) {
         enforceAccessPermission();
         int callingUid = Binder.getCallingUid();
+        // bypass shell: can get various pkg name
+        // also bypass if caller is only retrieving networks added by itself
+        if (callingUid != Process.SHELL_UID && callingUid != Process.ROOT_UID) {
+            mWifiPermissionsUtil.checkPackage(callingUid, packageName);
+            if (!callerNetworksOnly) {
+                long ident = Binder.clearCallingIdentity();
+                try {
+                    mWifiPermissionsUtil.enforceCanAccessScanResults(packageName, featureId,
+                            callingUid, null);
+                } catch (SecurityException e) {
+                    Log.w(TAG, "Permission violation - getConfiguredNetworks not allowed for uid="
+                            + callingUid + ", packageName=" + packageName + ", reason=" + e);
+                    return new ParceledListSlice<>(new ArrayList<>());
+                } finally {
+                    Binder.restoreCallingIdentity(ident);
+                }
+            }
+        }
         boolean isDeviceOrProfileOwner = isDeviceOrProfileOwner(callingUid, packageName);
         boolean isCarrierApp = mWifiInjector.makeTelephonyManager()
                 .checkCarrierPrivilegesForPackageAnyPhone(packageName)
@@ -2459,22 +2477,6 @@
                         "Not a DO, PO, carrier or privileged app");
             }
         }
-        // bypass shell: can get various pkg name
-        // also bypass if caller is only retrieving networks added by itself
-        if (callingUid != Process.SHELL_UID && callingUid != Process.ROOT_UID
-                && !callerNetworksOnly) {
-            long ident = Binder.clearCallingIdentity();
-            try {
-                mWifiPermissionsUtil.enforceCanAccessScanResults(packageName, featureId,
-                        callingUid, null);
-            } catch (SecurityException e) {
-                Log.w(TAG, "Permission violation - getConfiguredNetworks not allowed for uid="
-                        + callingUid + ", packageName=" + packageName + ", reason=" + e);
-                return new ParceledListSlice<>(new ArrayList<>());
-            } finally {
-                Binder.restoreCallingIdentity(ident);
-            }
-        }
         boolean isTargetSdkLessThanQOrPrivileged = isTargetSdkLessThanQOrPrivileged(
                 packageName, Binder.getCallingPid(), callingUid);
         if (!isTargetSdkLessThanQOrPrivileged && !isCarrierApp) {
@@ -5068,6 +5070,7 @@
             throw new IllegalArgumentException("listener must not be null");
         }
         final int uid = Binder.getCallingUid();
+        mWifiPermissionsUtil.checkPackage(uid, packageName);
         enforceAccessPermission();
         enforceLocationPermission(packageName, featureId, uid);
         if (isVerboseLoggingEnabled()) {
diff --git a/service/java/com/android/server/wifi/rtt/RttServiceImpl.java b/service/java/com/android/server/wifi/rtt/RttServiceImpl.java
index c3267cc..d55c46a 100644
--- a/service/java/com/android/server/wifi/rtt/RttServiceImpl.java
+++ b/service/java/com/android/server/wifi/rtt/RttServiceImpl.java
@@ -426,6 +426,7 @@
         // permission checks
         enforceAccessPermission();
         enforceChangePermission();
+        mWifiPermissionsUtil.checkPackage(uid, callingPackage);
         mWifiPermissionsUtil.enforceFineLocationPermission(callingPackage, callingFeatureId, uid);
 
         final WorkSource ws;