diff options
author | 2021-06-02 00:23:09 -0700 | |
---|---|---|
committer | 2021-06-02 00:23:09 -0700 | |
commit | 0bfffa6b25284dd1195ce95d9b35e35546185798 (patch) | |
tree | c4c8e48c90bcb2c54e5348c9f4fb25fbb6fc40a1 /apex/blobstore | |
parent | 1dfd948440af4fa2e859b698cb0fa1770c89d4ee (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.java | 13 | ||||
-rw-r--r-- | apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java | 5 |
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(); |