diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index 430a5b950f14e..50f43b5c1bae8 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -49,6 +49,7 @@ import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.app.ServiceStartArgs; +import android.app.admin.DevicePolicyEventLogger; import android.appwidget.AppWidgetManagerInternal; import android.content.ComponentName; import android.content.ComponentName.WithComponentName; @@ -79,6 +80,7 @@ import android.os.SystemProperties; import android.os.TransactionTooLargeException; import android.os.UserHandle; import android.provider.Settings; +import android.stats.devicepolicy.DevicePolicyEnums; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; @@ -1912,6 +1914,8 @@ public final class ActiveServices { requestServiceBindingLocked(s, b.intent, callerFg, false); } + maybeLogBindCrossProfileService(userId, callingPackage, callerApp.info.uid); + getServiceMapLocked(s.userId).ensureNotStartingBackgroundLocked(s); } finally { @@ -1921,6 +1925,21 @@ public final class ActiveServices { return 1; } + private void maybeLogBindCrossProfileService( + int userId, String callingPackage, int callingUid) { + if (UserHandle.isCore(callingUid)) { + return; + } + final int callingUserId = UserHandle.getCallingUserId(); + if (callingUserId == userId + || !mAm.mUserController.isSameProfileGroup(callingUserId, userId)) { + return; + } + DevicePolicyEventLogger.createEvent(DevicePolicyEnums.BIND_CROSS_PROFILE_SERVICE) + .setStrings(callingPackage) + .write(); + } + void publishServiceLocked(ServiceRecord r, Intent intent, IBinder service) { final long origId = Binder.clearCallingIdentity(); try {