Loading core/java/android/app/ActivityManagerInternal.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -268,4 +268,9 @@ public abstract class ActivityManagerInternal { * @param token The IApplicationToken for the activity * @param token The IApplicationToken for the activity */ */ public abstract void setFocusedActivity(IBinder token); public abstract void setFocusedActivity(IBinder token); /** * Returns {@code true} if {@code uid} is running an activity from {@code packageName}. */ public abstract boolean hasRunningActivity(int uid, @Nullable String packageName); } } services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +6 −3 Original line number Original line Diff line number Diff line Loading @@ -26,6 +26,7 @@ import static com.android.server.autofill.Helper.sVerbose; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.app.AppGlobals; import android.app.AppGlobals; import android.app.IActivityManager; import android.app.IActivityManager; import android.content.ComponentName; import android.content.ComponentName; Loading Loading @@ -69,6 +70,7 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.os.HandlerCaller; import com.android.internal.os.HandlerCaller; import com.android.server.LocalServices; import com.android.server.autofill.ui.AutoFillUI; import com.android.server.autofill.ui.AutoFillUI; import java.io.PrintWriter; import java.io.PrintWriter; Loading Loading @@ -417,16 +419,17 @@ final class AutofillManagerServiceImpl { * Asserts the component is owned by the caller. * Asserts the component is owned by the caller. */ */ private void assertCallerLocked(@NonNull ComponentName componentName) { private void assertCallerLocked(@NonNull ComponentName componentName) { final String packageName = componentName.getPackageName(); final PackageManager pm = mContext.getPackageManager(); final PackageManager pm = mContext.getPackageManager(); final int callingUid = Binder.getCallingUid(); final int callingUid = Binder.getCallingUid(); final int packageUid; final int packageUid; try { try { packageUid = pm.getPackageUidAsUser(componentName.getPackageName(), packageUid = pm.getPackageUidAsUser(packageName, UserHandle.getCallingUserId()); UserHandle.getCallingUserId()); } catch (NameNotFoundException e) { } catch (NameNotFoundException e) { throw new SecurityException("Could not verify UID for " + componentName); throw new SecurityException("Could not verify UID for " + componentName); } } if (callingUid != packageUid) { if (callingUid != packageUid && !LocalServices.getService(ActivityManagerInternal.class) .hasRunningActivity(callingUid, packageName)) { final String[] packages = pm.getPackagesForUid(callingUid); final String[] packages = pm.getPackagesForUid(callingUid); final String callingPackage = packages != null ? packages[0] : "uid-" + callingUid; final String callingPackage = packages != null ? packages[0] : "uid-" + callingUid; Slog.w(TAG, "App (package=" + callingPackage + ", UID=" + callingUid Slog.w(TAG, "App (package=" + callingPackage + ", UID=" + callingUid Loading services/core/java/com/android/server/am/ActivityManagerService.java +20 −0 Original line number Original line Diff line number Diff line Loading @@ -24248,6 +24248,26 @@ public class ActivityManagerService extends IActivityManager.Stub } } } } } } @Override public boolean hasRunningActivity(int uid, @Nullable String packageName) { if (packageName == null) return false; synchronized (ActivityManagerService.this) { for (int i = 0; i < mLruProcesses.size(); i++) { final ProcessRecord processRecord = mLruProcesses.get(i); if (processRecord.uid == uid) { for (int j = 0; j < processRecord.activities.size(); j++) { final ActivityRecord activityRecord = processRecord.activities.get(j); if (packageName.equals(activityRecord.packageName)) { return true; } } } } } return false; } } } /** /** Loading
core/java/android/app/ActivityManagerInternal.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -268,4 +268,9 @@ public abstract class ActivityManagerInternal { * @param token The IApplicationToken for the activity * @param token The IApplicationToken for the activity */ */ public abstract void setFocusedActivity(IBinder token); public abstract void setFocusedActivity(IBinder token); /** * Returns {@code true} if {@code uid} is running an activity from {@code packageName}. */ public abstract boolean hasRunningActivity(int uid, @Nullable String packageName); } }
services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +6 −3 Original line number Original line Diff line number Diff line Loading @@ -26,6 +26,7 @@ import static com.android.server.autofill.Helper.sVerbose; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.app.AppGlobals; import android.app.AppGlobals; import android.app.IActivityManager; import android.app.IActivityManager; import android.content.ComponentName; import android.content.ComponentName; Loading Loading @@ -69,6 +70,7 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.os.HandlerCaller; import com.android.internal.os.HandlerCaller; import com.android.server.LocalServices; import com.android.server.autofill.ui.AutoFillUI; import com.android.server.autofill.ui.AutoFillUI; import java.io.PrintWriter; import java.io.PrintWriter; Loading Loading @@ -417,16 +419,17 @@ final class AutofillManagerServiceImpl { * Asserts the component is owned by the caller. * Asserts the component is owned by the caller. */ */ private void assertCallerLocked(@NonNull ComponentName componentName) { private void assertCallerLocked(@NonNull ComponentName componentName) { final String packageName = componentName.getPackageName(); final PackageManager pm = mContext.getPackageManager(); final PackageManager pm = mContext.getPackageManager(); final int callingUid = Binder.getCallingUid(); final int callingUid = Binder.getCallingUid(); final int packageUid; final int packageUid; try { try { packageUid = pm.getPackageUidAsUser(componentName.getPackageName(), packageUid = pm.getPackageUidAsUser(packageName, UserHandle.getCallingUserId()); UserHandle.getCallingUserId()); } catch (NameNotFoundException e) { } catch (NameNotFoundException e) { throw new SecurityException("Could not verify UID for " + componentName); throw new SecurityException("Could not verify UID for " + componentName); } } if (callingUid != packageUid) { if (callingUid != packageUid && !LocalServices.getService(ActivityManagerInternal.class) .hasRunningActivity(callingUid, packageName)) { final String[] packages = pm.getPackagesForUid(callingUid); final String[] packages = pm.getPackagesForUid(callingUid); final String callingPackage = packages != null ? packages[0] : "uid-" + callingUid; final String callingPackage = packages != null ? packages[0] : "uid-" + callingUid; Slog.w(TAG, "App (package=" + callingPackage + ", UID=" + callingUid Slog.w(TAG, "App (package=" + callingPackage + ", UID=" + callingUid Loading
services/core/java/com/android/server/am/ActivityManagerService.java +20 −0 Original line number Original line Diff line number Diff line Loading @@ -24248,6 +24248,26 @@ public class ActivityManagerService extends IActivityManager.Stub } } } } } } @Override public boolean hasRunningActivity(int uid, @Nullable String packageName) { if (packageName == null) return false; synchronized (ActivityManagerService.this) { for (int i = 0; i < mLruProcesses.size(); i++) { final ProcessRecord processRecord = mLruProcesses.get(i); if (processRecord.uid == uid) { for (int j = 0; j < processRecord.activities.size(); j++) { final ActivityRecord activityRecord = processRecord.activities.get(j); if (packageName.equals(activityRecord.packageName)) { return true; } } } } } return false; } } } /** /**