Per-uid timeouts.

- don't allow read restrictions for system uids,
- calling into incfs per-uid function.

Bug: 162345970
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest PackageManagerServiceTest

Change-Id: If52ab97e67f867f5905f8919e886262dab7aa859
Merged-In: If52ab97e67f867f5905f8919e886262dab7aa859
This commit is contained in:
Alex Buynytskyy
2021-01-26 13:29:24 -08:00
parent 47c04289f8
commit fe6b4c0d9d
2 changed files with 18 additions and 1 deletions

View File

@@ -28304,6 +28304,13 @@ public class PackageManagerService extends IPackageManager.Stub
}
continue;
}
if (ps.appId < Process.FIRST_APPLICATION_UID) {
if (DEBUG_PER_UID_READ_TIMEOUTS) {
Slog.i(TAG, "PerUidReadTimeouts: package is system, appId=" + ps.appId);
}
continue;
}
final AndroidPackage pkg = ps.getPkg();
if (pkg.getLongVersionCode() < perPackage.versionCodes.minVersionCode
|| pkg.getLongVersionCode() > perPackage.versionCodes.maxVersionCode) {

View File

@@ -210,7 +210,17 @@ public:
ErrorCode setUidReadTimeouts(const Control& control,
const std::vector<android::os::incremental::PerUidReadTimeouts>&
perUidReadTimeouts) const final {
return -ENOTSUP;
std::vector<incfs::UidReadTimeouts> timeouts;
timeouts.resize(perUidReadTimeouts.size());
for (int i = 0, size = perUidReadTimeouts.size(); i < size; ++i) {
auto&& timeout = timeouts[i];
const auto& perUidTimeout = perUidReadTimeouts[i];
timeout.uid = perUidTimeout.uid;
timeout.minTimeUs = perUidTimeout.minTimeUs;
timeout.minPendingTimeUs = perUidTimeout.minPendingTimeUs;
timeout.maxPendingTimeUs = perUidTimeout.maxPendingTimeUs;
}
return incfs::setUidReadTimeouts(control, timeouts);
}
};