Clear caller id when reading device config

Reading the DeviceConfig with the gmscore call id will result in a
security exception.

Also clear the caller identity when before calling into locksettings
to armRebootEscrow. This is inline with the other usage for RoR
preparation.

Bug: 183475757
Test: trigger RoR from gmscore
Change-Id: Ifc65625fc7aba05d016c127cf6672922a5ffb000
This commit is contained in:
Tianjie
2021-03-23 11:40:08 -07:00
parent fb5d22ffea
commit 18fb750cc5

View File

@@ -734,7 +734,15 @@ public class RecoverySystemService extends IRecoverySystem.Stub implements Reboo
return REBOOT_ERROR_SLOT_MISMATCH;
}
if (!mInjector.getLockSettingsService().armRebootEscrow()) {
final long origId = Binder.clearCallingIdentity();
boolean result;
try {
result = mInjector.getLockSettingsService().armRebootEscrow();
} finally {
Binder.restoreCallingIdentity(origId);
}
if (!result) {
Slog.w(TAG, "Failure to escrow key for reboot");
return REBOOT_ERROR_ARM_REBOOT_ESCROW_FAILURE;
}
@@ -742,11 +750,20 @@ public class RecoverySystemService extends IRecoverySystem.Stub implements Reboo
return REBOOT_ERROR_NONE;
}
private boolean useServerBasedRoR() {
final long origId = Binder.clearCallingIdentity();
try {
return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_OTA,
"server_based_ror_enabled", false);
} finally {
Binder.restoreCallingIdentity(origId);
}
}
private void reportMetricsOnRebootWithLskf(String packageName, boolean slotSwitch,
@ResumeOnRebootRebootErrorCode int errorCode) {
int uid = mInjector.getUidFromPackageName(packageName);
boolean serverBased = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_OTA,
"server_based_ror_enabled", false);
boolean serverBased = useServerBasedRoR();
int preparedClientCount;
synchronized (this) {
preparedClientCount = mCallerPreparedForReboot.size();