summaryrefslogtreecommitdiff
path: root/apex/blobstore
diff options
context:
space:
mode:
author Sudheer Shanka <sudheersai@google.com> 2021-06-02 00:23:09 -0700
committer Sudheer Shanka <sudheersai@google.com> 2021-06-02 00:23:09 -0700
commit0bfffa6b25284dd1195ce95d9b35e35546185798 (patch)
treec4c8e48c90bcb2c54e5348c9f4fb25fbb6fc40a1 /apex/blobstore
parent1dfd948440af4fa2e859b698cb0fa1770c89d4ee (diff)
Don't attribute a blob to a user if there are leasees from other users.
Bug: 187460239 Test: atest --test-mapping apex/blobstore Change-Id: I5e9c0473e4c058d430ed012a3ca3ee63f3595821
Diffstat (limited to 'apex/blobstore')
-rw-r--r--apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java13
-rw-r--r--apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java5
2 files changed, 16 insertions, 2 deletions
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java b/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java
index e116c8189f91..300b50984c6c 100644
--- a/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java
+++ b/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java
@@ -403,6 +403,19 @@ class BlobMetadata {
return null;
}
+ boolean shouldAttributeToUser(int userId) {
+ synchronized (mMetadataLock) {
+ for (int i = 0, size = mLeasees.size(); i < size; ++i) {
+ final Leasee leasee = mLeasees.valueAt(i);
+ // Don't attribute the blob to userId if there is a lease on it from another user.
+ if (userId != UserHandle.getUserId(leasee.uid)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
boolean shouldAttributeToLeasee(@NonNull String packageName, int userId,
boolean callerHasStatsPermission) {
if (!isALeaseeInUser(packageName, INVALID_UID, userId)) {
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java
index beeffd633a83..96114dcb66a7 100644
--- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java
+++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java
@@ -1333,9 +1333,10 @@ public class BlobStoreManagerService extends SystemService {
blobsDataSize.getAndAdd(session.getSize());
}, userHandle.getIdentifier());
- // TODO(http://b/187460239): Update this to only include blobs available to userId.
forEachBlob(blobMetadata -> {
- blobsDataSize.getAndAdd(blobMetadata.getSize());
+ if (blobMetadata.shouldAttributeToUser(userHandle.getIdentifier())) {
+ blobsDataSize.getAndAdd(blobMetadata.getSize());
+ }
});
stats.dataSize += blobsDataSize.get();