From 1db5dd180b9b3adb1903044ddaebf17f2f189b20 Mon Sep 17 00:00:00 2001 From: Jerry Chang Date: Thu, 4 Mar 2021 15:43:36 +0800 Subject: [PATCH] Prevent fail to get device config while dumping package service Clear binder identity when getting device config to prevent it blocks dumping package service Fix: 177371679 Test: atest PreRebootLogger Change-Id: Ia3a8e2cb3eaf3aa2e1adecabe3a474b18c02bb21 --- .../server/pm/PackageManagerService.java | 18 ++++++++++++++---- .../android/server/power/PreRebootLogger.java | 4 ---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index b751503907fd3..663d49ac91ce0 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -27759,13 +27759,23 @@ public class PackageManagerService extends IPackageManager.Stub } private static String getDefaultTimeouts() { - return DeviceConfig.getString(DeviceConfig.NAMESPACE_PACKAGE_MANAGER_SERVICE, - PROPERTY_INCFS_DEFAULT_TIMEOUTS, ""); + final long token = Binder.clearCallingIdentity(); + try { + return DeviceConfig.getString(NAMESPACE_PACKAGE_MANAGER_SERVICE, + PROPERTY_INCFS_DEFAULT_TIMEOUTS, ""); + } finally { + Binder.restoreCallingIdentity(token); + } } private static String getKnownDigestersList() { - return DeviceConfig.getString(DeviceConfig.NAMESPACE_PACKAGE_MANAGER_SERVICE, - PROPERTY_KNOWN_DIGESTERS_LIST, ""); + final long token = Binder.clearCallingIdentity(); + try { + return DeviceConfig.getString(NAMESPACE_PACKAGE_MANAGER_SERVICE, + PROPERTY_KNOWN_DIGESTERS_LIST, ""); + } finally { + Binder.restoreCallingIdentity(token); + } } /** diff --git a/services/core/java/com/android/server/power/PreRebootLogger.java b/services/core/java/com/android/server/power/PreRebootLogger.java index 2e4b054b829cf..c9e81ed7a796c 100644 --- a/services/core/java/com/android/server/power/PreRebootLogger.java +++ b/services/core/java/com/android/server/power/PreRebootLogger.java @@ -19,7 +19,6 @@ package com.android.server.power; import android.annotation.DurationMillisLong; import android.annotation.NonNull; import android.content.Context; -import android.os.Binder; import android.os.Environment; import android.os.IBinder; import android.os.ParcelFileDescriptor; @@ -147,7 +146,6 @@ final class PreRebootLogger { return; } - final long token = Binder.clearCallingIdentity(); try { final File dumpFile = new File(dumpDir, serviceName); final ParcelFileDescriptor fd = ParcelFileDescriptor.open(dumpFile, @@ -156,8 +154,6 @@ final class PreRebootLogger { binder.dump(fd.getFileDescriptor(), ArrayUtils.emptyArray(String.class)); } catch (FileNotFoundException | RemoteException e) { Slog.e(TAG, String.format("Failed to dump %s service before reboot", serviceName), e); - } finally { - Binder.restoreCallingIdentity(token); } } }