Get a hack in place for broken quotas.
Sadly we mixed together both UID and GID quotas in such a way that
we couldn't detangle the actual data-vs-cache usage in all cases.
Temporarily patch over this to get CTS passing until we can circle
back and try again.
Test: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest
Bug: 36731175, 37193650
Change-Id: I5870b4e9c22398762fc47672e4d5d78c06bef79f
diff --git a/cmds/installd/InstalldNativeService.cpp b/cmds/installd/InstalldNativeService.cpp
index e9a135c..3e0f6f0 100644
--- a/cmds/installd/InstalldNativeService.cpp
+++ b/cmds/installd/InstalldNativeService.cpp
@@ -1152,6 +1152,9 @@
}
}
+#if HACK_FOR_37193650
+ extStats->dataSize = extStats->dataSize;
+#else
int extGid = multiuser_get_ext_gid(userId, appId);
if (extGid != -1) {
if (quotactl(QCMD(Q_GETQUOTA, GRPQUOTA), device.c_str(), extGid,
@@ -1166,6 +1169,7 @@
extStats->dataSize += dq.dqb_curspace;
}
}
+#endif
int sharedGid = multiuser_get_shared_gid(userId, appId);
if (sharedGid != -1) {
@@ -1363,6 +1367,17 @@
collectQuotaStats(device, userId, appId, &stats, &extStats);
ATRACE_END();
+#if HACK_FOR_37193650
+ ATRACE_BEGIN("external");
+ for (size_t i = 0; i < packageNames.size(); i++) {
+ const char* pkgname = packageNames[i].c_str();
+ auto extPath = create_data_media_package_path(uuid_, userId, "data", pkgname);
+ calculate_tree_size(extPath, &extStats.dataSize);
+ auto mediaPath = create_data_media_package_path(uuid_, userId, "media", pkgname);
+ calculate_tree_size(mediaPath, &extStats.dataSize);
+ }
+ ATRACE_END();
+#endif
} else {
ATRACE_BEGIN("code");
for (auto codePath : codePaths) {
@@ -1447,6 +1462,12 @@
flags &= ~FLAG_USE_QUOTA;
}
+#if HACK_FOR_37193650
+ if (userId != 0) {
+ flags &= ~FLAG_USE_QUOTA;
+ }
+#endif
+
if (flags & FLAG_USE_QUOTA) {
struct dqblk dq;
@@ -1508,6 +1529,7 @@
for (auto appId : appIds) {
if (appId >= AID_APP_START) {
collectQuotaStats(device, userId, appId, &stats, &extStats);
+
#if MEASURE_DEBUG
// Sleep to make sure we don't lose logs
usleep(1);