Loading core/java/android/app/ActivityManagerInternal.java +5 −0 Original line number Diff line number Diff line Loading @@ -299,4 +299,9 @@ public abstract class ActivityManagerInternal { * @return true if runtime was restarted, false if it's normal boot */ public abstract boolean isRuntimeRestarted(); /** * 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 −7 Original line number 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.Nullable; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.app.AppGlobals; import android.app.IActivityManager; import android.content.ComponentName; Loading Loading @@ -75,11 +76,11 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.os.HandlerCaller; import com.android.server.LocalServices; import com.android.server.autofill.ui.AutoFillUI; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Random; /** Loading Loading @@ -483,19 +484,17 @@ final class AutofillManagerServiceImpl { * Asserts the component is owned by the caller. */ private void assertCallerLocked(@NonNull ComponentName componentName) { final String packageName = componentName.getPackageName(); final PackageManager pm = mContext.getPackageManager(); final int callingUid = Binder.getCallingUid(); final int packageUid; try { packageUid = pm.getPackageUidAsUser(componentName.getPackageName(), UserHandle.getCallingUserId()); packageUid = pm.getPackageUidAsUser(packageName, UserHandle.getCallingUserId()); } catch (NameNotFoundException e) { throw new SecurityException("Could not verify UID for " + componentName); } // TODO(b/70506888): allow all system UIDs to call it is too broad, we should call // something like am.isActivityRunningInProcess(componentName, callingPid), but there is // no such API yet. if (callingUid != packageUid && Process.isApplicationUid(callingUid)) { if (callingUid != packageUid && !LocalServices.getService(ActivityManagerInternal.class) .hasRunningActivity(callingUid, packageName)) { final String[] packages = pm.getPackagesForUid(callingUid); final String callingPackage = packages != null ? packages[0] : "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 Diff line number Diff line Loading @@ -24493,6 +24493,26 @@ public class ActivityManagerService extends IActivityManager.Stub public boolean isRuntimeRestarted() { return mSystemServiceManager.isRuntimeRestarted(); } @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 Diff line number Diff line Loading @@ -299,4 +299,9 @@ public abstract class ActivityManagerInternal { * @return true if runtime was restarted, false if it's normal boot */ public abstract boolean isRuntimeRestarted(); /** * 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 −7 Original line number 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.Nullable; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.app.AppGlobals; import android.app.IActivityManager; import android.content.ComponentName; Loading Loading @@ -75,11 +76,11 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.os.HandlerCaller; import com.android.server.LocalServices; import com.android.server.autofill.ui.AutoFillUI; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Random; /** Loading Loading @@ -483,19 +484,17 @@ final class AutofillManagerServiceImpl { * Asserts the component is owned by the caller. */ private void assertCallerLocked(@NonNull ComponentName componentName) { final String packageName = componentName.getPackageName(); final PackageManager pm = mContext.getPackageManager(); final int callingUid = Binder.getCallingUid(); final int packageUid; try { packageUid = pm.getPackageUidAsUser(componentName.getPackageName(), UserHandle.getCallingUserId()); packageUid = pm.getPackageUidAsUser(packageName, UserHandle.getCallingUserId()); } catch (NameNotFoundException e) { throw new SecurityException("Could not verify UID for " + componentName); } // TODO(b/70506888): allow all system UIDs to call it is too broad, we should call // something like am.isActivityRunningInProcess(componentName, callingPid), but there is // no such API yet. if (callingUid != packageUid && Process.isApplicationUid(callingUid)) { if (callingUid != packageUid && !LocalServices.getService(ActivityManagerInternal.class) .hasRunningActivity(callingUid, packageName)) { final String[] packages = pm.getPackagesForUid(callingUid); final String callingPackage = packages != null ? packages[0] : "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 Diff line number Diff line Loading @@ -24493,6 +24493,26 @@ public class ActivityManagerService extends IActivityManager.Stub public boolean isRuntimeRestarted() { return mSystemServiceManager.isRuntimeRestarted(); } @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; } } /**