Log when enforceActor fails

OverlayActorEnforcer#enforceActor reason for failure was getting
swallowed. Now the reason for failure will always be logged to logcat
instead of being part of exception message.

Bug: 180461062
Test: manual
Change-Id: I52e00cca62f14e0ebaf2ee9a0749eee7352c4bc9
This commit is contained in:
Ryan Mitchell
2021-02-17 14:28:13 -08:00
parent 2cc5ce22b5
commit fc64c58dcb

View File

@@ -23,6 +23,7 @@ import android.net.Uri;
import android.os.Process;
import android.text.TextUtils;
import android.util.Pair;
import android.util.Slog;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
@@ -42,9 +43,6 @@ import java.util.Map;
*/
public class OverlayActorEnforcer {
// By default, the reason is not logged to prevent leaks of why it failed
private static final boolean DEBUG_REASON = false;
private final PackageManagerHelper mPackageManager;
/**
@@ -85,17 +83,18 @@ public class OverlayActorEnforcer {
void enforceActor(@NonNull OverlayInfo overlayInfo, @NonNull String methodName,
int callingUid, int userId) throws SecurityException {
ActorState actorState = isAllowedActor(methodName, overlayInfo, callingUid, userId);
final ActorState actorState = isAllowedActor(methodName, overlayInfo, callingUid, userId);
if (actorState == ActorState.ALLOWED) {
return;
}
String targetOverlayableName = overlayInfo.targetOverlayableName;
throw new SecurityException("UID" + callingUid + " is not allowed to call "
+ methodName + " for "
final String targetOverlayableName = overlayInfo.targetOverlayableName;
final String errorMessage = "UID" + callingUid + " is not allowed to call " + methodName
+ " for "
+ (TextUtils.isEmpty(targetOverlayableName) ? "" : (targetOverlayableName + " in "))
+ overlayInfo.targetPackageName + (DEBUG_REASON ? (" because " + actorState) : "")
);
+ overlayInfo.targetPackageName + " for user " + userId;
Slog.w(OverlayManagerService.TAG, errorMessage + " because " + actorState);
throw new SecurityException(errorMessage);
}
/**