Loading services/core/java/com/android/server/BinaryTransparencyService.java +89 −60 Original line number Diff line number Diff line Loading @@ -278,16 +278,54 @@ public class BinaryTransparencyService extends SystemService { + " and is now updated to: " + currentTimeMs); mMeasurementsLastRecordedMs = currentTimeMs; PackageManager pm = mContext.getPackageManager(); Set<String> packagesMeasured = new HashSet<>(); // measure all APEXs first if (DEBUG) { Slog.d(TAG, "Measuring APEXs..."); } for (PackageInfo packageInfo : getCurrentInstalledApexs()) { packagesMeasured.add(packageInfo.packageName); List<IBinaryTransparencyService.ApexInfo> allApexInfo = collectAllApexInfo(); for (IBinaryTransparencyService.ApexInfo apexInfo : allApexInfo) { packagesMeasured.add(apexInfo.packageName); recordApexInfo(apexInfo); } if (DEBUG) { Slog.d(TAG, "Measured " + packagesMeasured.size() + " packages after considering APEXs."); } // proceed with all preloaded apps List<IBinaryTransparencyService.AppInfo> allUpdatedPreloadInfo = collectAllUpdatedPreloadInfo(packagesMeasured); for (IBinaryTransparencyService.AppInfo appInfo : allUpdatedPreloadInfo) { packagesMeasured.add(appInfo.packageName); writeAppInfoToLog(appInfo); } if (DEBUG) { Slog.d(TAG, "Measured " + packagesMeasured.size() + " packages after considering preloads"); } if (CompatChanges.isChangeEnabled(LOG_MBA_INFO)) { // lastly measure all newly installed MBAs List<IBinaryTransparencyService.AppInfo> allMbaInfo = collectAllMbaInfo(packagesMeasured); for (IBinaryTransparencyService.AppInfo appInfo : allUpdatedPreloadInfo) { packagesMeasured.add(appInfo.packageName); writeAppInfoToLog(appInfo); } } if (DEBUG) { long timeSpentMeasuring = System.currentTimeMillis() - currentTimeMs; Slog.d(TAG, "Measured " + packagesMeasured.size() + " packages altogether in " + timeSpentMeasuring + "ms"); } } private List<IBinaryTransparencyService.ApexInfo> collectAllApexInfo() { var results = new ArrayList<IBinaryTransparencyService.ApexInfo>(); for (PackageInfo packageInfo : getCurrentInstalledApexs()) { Bundle apexMeasurement = measurePackage(packageInfo); var apexInfo = new IBinaryTransparencyService.ApexInfo(); Loading @@ -299,22 +337,21 @@ public class BinaryTransparencyService extends SystemService { apexInfo.signerDigests = computePackageSignerSha256Digests(packageInfo.signingInfo); recordApexInfo(apexInfo); results.add(apexInfo); } if (DEBUG) { Slog.d(TAG, "Measured " + packagesMeasured.size() + " packages after considering APEXs."); return results; } // proceed with all preloaded apps private List<IBinaryTransparencyService.AppInfo> collectAllUpdatedPreloadInfo( Set<String> packagesToSkip) { var results = new ArrayList<IBinaryTransparencyService.AppInfo>(); PackageManager pm = mContext.getPackageManager(); for (PackageInfo packageInfo : pm.getInstalledPackages( PackageManager.PackageInfoFlags.of(PackageManager.MATCH_FACTORY_ONLY | PackageManager.GET_SIGNING_CERTIFICATES))) { if (packagesMeasured.contains(packageInfo.packageName)) { if (packagesToSkip.contains(packageInfo.packageName)) { continue; } packagesMeasured.add(packageInfo.packageName); int mbaStatus = MBA_STATUS_PRELOADED; if (packageInfo.signingInfo == null) { Slog.d(TAG, "Preload " + packageInfo.packageName + " at " Loading Loading @@ -347,24 +384,21 @@ public class BinaryTransparencyService extends SystemService { computePackageSignerSha256Digests(packageInfo.signingInfo); appInfo.mbaStatus = mbaStatus; writeAppInfoToLog(appInfo); results.add(appInfo); } } if (DEBUG) { Slog.d(TAG, "Measured " + packagesMeasured.size() + " packages after considering preloads"); return results; } if (CompatChanges.isChangeEnabled(LOG_MBA_INFO)) { // lastly measure all newly installed MBAs private List<IBinaryTransparencyService.AppInfo> collectAllMbaInfo( Set<String> packagesToSkip) { var results = new ArrayList<IBinaryTransparencyService.AppInfo>(); for (PackageInfo packageInfo : getNewlyInstalledMbas()) { if (packagesMeasured.contains(packageInfo.packageName)) { if (packagesToSkip.contains(packageInfo.packageName)) { continue; } packagesMeasured.add(packageInfo.packageName); Bundle packageMeasurement = measurePackage(packageInfo); if (DEBUG) { Slog.d(TAG, "Extracting InstallSourceInfo for " + packageInfo.packageName); Loading Loading @@ -394,14 +428,9 @@ public class BinaryTransparencyService extends SystemService { appInfo.originator = installSourceInfo.getOriginatingPackageName(); } writeAppInfoToLog(appInfo); } } if (DEBUG) { long timeSpentMeasuring = System.currentTimeMillis() - currentTimeMs; Slog.d(TAG, "Measured " + packagesMeasured.size() + " packages altogether in " + timeSpentMeasuring + "ms"); results.add(appInfo); } return results; } private void recordApexInfo(IBinaryTransparencyService.ApexInfo apexInfo) { Loading Loading
services/core/java/com/android/server/BinaryTransparencyService.java +89 −60 Original line number Diff line number Diff line Loading @@ -278,16 +278,54 @@ public class BinaryTransparencyService extends SystemService { + " and is now updated to: " + currentTimeMs); mMeasurementsLastRecordedMs = currentTimeMs; PackageManager pm = mContext.getPackageManager(); Set<String> packagesMeasured = new HashSet<>(); // measure all APEXs first if (DEBUG) { Slog.d(TAG, "Measuring APEXs..."); } for (PackageInfo packageInfo : getCurrentInstalledApexs()) { packagesMeasured.add(packageInfo.packageName); List<IBinaryTransparencyService.ApexInfo> allApexInfo = collectAllApexInfo(); for (IBinaryTransparencyService.ApexInfo apexInfo : allApexInfo) { packagesMeasured.add(apexInfo.packageName); recordApexInfo(apexInfo); } if (DEBUG) { Slog.d(TAG, "Measured " + packagesMeasured.size() + " packages after considering APEXs."); } // proceed with all preloaded apps List<IBinaryTransparencyService.AppInfo> allUpdatedPreloadInfo = collectAllUpdatedPreloadInfo(packagesMeasured); for (IBinaryTransparencyService.AppInfo appInfo : allUpdatedPreloadInfo) { packagesMeasured.add(appInfo.packageName); writeAppInfoToLog(appInfo); } if (DEBUG) { Slog.d(TAG, "Measured " + packagesMeasured.size() + " packages after considering preloads"); } if (CompatChanges.isChangeEnabled(LOG_MBA_INFO)) { // lastly measure all newly installed MBAs List<IBinaryTransparencyService.AppInfo> allMbaInfo = collectAllMbaInfo(packagesMeasured); for (IBinaryTransparencyService.AppInfo appInfo : allUpdatedPreloadInfo) { packagesMeasured.add(appInfo.packageName); writeAppInfoToLog(appInfo); } } if (DEBUG) { long timeSpentMeasuring = System.currentTimeMillis() - currentTimeMs; Slog.d(TAG, "Measured " + packagesMeasured.size() + " packages altogether in " + timeSpentMeasuring + "ms"); } } private List<IBinaryTransparencyService.ApexInfo> collectAllApexInfo() { var results = new ArrayList<IBinaryTransparencyService.ApexInfo>(); for (PackageInfo packageInfo : getCurrentInstalledApexs()) { Bundle apexMeasurement = measurePackage(packageInfo); var apexInfo = new IBinaryTransparencyService.ApexInfo(); Loading @@ -299,22 +337,21 @@ public class BinaryTransparencyService extends SystemService { apexInfo.signerDigests = computePackageSignerSha256Digests(packageInfo.signingInfo); recordApexInfo(apexInfo); results.add(apexInfo); } if (DEBUG) { Slog.d(TAG, "Measured " + packagesMeasured.size() + " packages after considering APEXs."); return results; } // proceed with all preloaded apps private List<IBinaryTransparencyService.AppInfo> collectAllUpdatedPreloadInfo( Set<String> packagesToSkip) { var results = new ArrayList<IBinaryTransparencyService.AppInfo>(); PackageManager pm = mContext.getPackageManager(); for (PackageInfo packageInfo : pm.getInstalledPackages( PackageManager.PackageInfoFlags.of(PackageManager.MATCH_FACTORY_ONLY | PackageManager.GET_SIGNING_CERTIFICATES))) { if (packagesMeasured.contains(packageInfo.packageName)) { if (packagesToSkip.contains(packageInfo.packageName)) { continue; } packagesMeasured.add(packageInfo.packageName); int mbaStatus = MBA_STATUS_PRELOADED; if (packageInfo.signingInfo == null) { Slog.d(TAG, "Preload " + packageInfo.packageName + " at " Loading Loading @@ -347,24 +384,21 @@ public class BinaryTransparencyService extends SystemService { computePackageSignerSha256Digests(packageInfo.signingInfo); appInfo.mbaStatus = mbaStatus; writeAppInfoToLog(appInfo); results.add(appInfo); } } if (DEBUG) { Slog.d(TAG, "Measured " + packagesMeasured.size() + " packages after considering preloads"); return results; } if (CompatChanges.isChangeEnabled(LOG_MBA_INFO)) { // lastly measure all newly installed MBAs private List<IBinaryTransparencyService.AppInfo> collectAllMbaInfo( Set<String> packagesToSkip) { var results = new ArrayList<IBinaryTransparencyService.AppInfo>(); for (PackageInfo packageInfo : getNewlyInstalledMbas()) { if (packagesMeasured.contains(packageInfo.packageName)) { if (packagesToSkip.contains(packageInfo.packageName)) { continue; } packagesMeasured.add(packageInfo.packageName); Bundle packageMeasurement = measurePackage(packageInfo); if (DEBUG) { Slog.d(TAG, "Extracting InstallSourceInfo for " + packageInfo.packageName); Loading Loading @@ -394,14 +428,9 @@ public class BinaryTransparencyService extends SystemService { appInfo.originator = installSourceInfo.getOriginatingPackageName(); } writeAppInfoToLog(appInfo); } } if (DEBUG) { long timeSpentMeasuring = System.currentTimeMillis() - currentTimeMs; Slog.d(TAG, "Measured " + packagesMeasured.size() + " packages altogether in " + timeSpentMeasuring + "ms"); results.add(appInfo); } return results; } private void recordApexInfo(IBinaryTransparencyService.ApexInfo apexInfo) { Loading