Skip to content

Commit c23f1b7

Browse files
ek9852Android (Google) Code Review
authored andcommitted
Merge "File size seal for memory mapped region" into tm-dev
2 parents f7f5abf + f2c1d9d commit c23f1b7

2 files changed

Lines changed: 11 additions & 6 deletions

File tree

libs/binder/MemoryHeapBase.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ MemoryHeapBase::MemoryHeapBase(size_t size, uint32_t flags, char const * name)
7373
ALOGV("MemoryHeapBase: Attempting to force MemFD");
7474
fd = memfd_create_region(name ? name : "MemoryHeapBase", size);
7575
if (fd < 0 || (mapfd(fd, true, size) != NO_ERROR)) return;
76-
const int SEAL_FLAGS = ((mFlags & READ_ONLY) ? F_SEAL_FUTURE_WRITE : 0) |
77-
((mFlags & MEMFD_ALLOW_SEALING) ? 0 : F_SEAL_SEAL);
76+
const int SEAL_FLAGS = ((mFlags & READ_ONLY) ? F_SEAL_FUTURE_WRITE : 0) | F_SEAL_GROW |
77+
F_SEAL_SHRINK | ((mFlags & MEMFD_ALLOW_SEALING) ? 0 : F_SEAL_SEAL);
7878
if (SEAL_FLAGS && (fcntl(fd, F_ADD_SEALS, SEAL_FLAGS) == -1)) {
7979
ALOGE("MemoryHeapBase: MemFD %s sealing with flags %x failed with error %s", name,
8080
SEAL_FLAGS, strerror(errno));

libs/binder/tests/binderMemoryHeapBaseUnitTest.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ TEST(MemoryHeapBase, MemfdSealed) {
3535
"Test mapping");
3636
int fd = mHeap->getHeapID();
3737
EXPECT_NE(fd, -1);
38-
EXPECT_EQ(fcntl(fd, F_GET_SEALS), F_SEAL_SEAL);
38+
EXPECT_EQ(fcntl(fd, F_GET_SEALS), F_SEAL_GROW | F_SEAL_SHRINK | F_SEAL_SEAL);
39+
EXPECT_EQ(ftruncate(fd, 4096), -1);
3940
}
4041

4142
TEST(MemoryHeapBase, MemfdUnsealed) {
@@ -45,7 +46,8 @@ TEST(MemoryHeapBase, MemfdUnsealed) {
4546
"Test mapping");
4647
int fd = mHeap->getHeapID();
4748
EXPECT_NE(fd, -1);
48-
EXPECT_EQ(fcntl(fd, F_GET_SEALS), 0);
49+
EXPECT_EQ(fcntl(fd, F_GET_SEALS), F_SEAL_GROW | F_SEAL_SHRINK);
50+
EXPECT_EQ(ftruncate(fd, 4096), -1);
4951
}
5052

5153
TEST(MemoryHeapBase, MemfdSealedProtected) {
@@ -55,7 +57,9 @@ TEST(MemoryHeapBase, MemfdSealedProtected) {
5557
"Test mapping");
5658
int fd = mHeap->getHeapID();
5759
EXPECT_NE(fd, -1);
58-
EXPECT_EQ(fcntl(fd, F_GET_SEALS), F_SEAL_SEAL | F_SEAL_FUTURE_WRITE);
60+
EXPECT_EQ(fcntl(fd, F_GET_SEALS),
61+
F_SEAL_GROW | F_SEAL_SHRINK | F_SEAL_SEAL | F_SEAL_FUTURE_WRITE);
62+
EXPECT_EQ(ftruncate(fd, 4096), -1);
5963
}
6064

6165
TEST(MemoryHeapBase, MemfdUnsealedProtected) {
@@ -66,7 +70,8 @@ TEST(MemoryHeapBase, MemfdUnsealedProtected) {
6670
"Test mapping");
6771
int fd = mHeap->getHeapID();
6872
EXPECT_NE(fd, -1);
69-
EXPECT_EQ(fcntl(fd, F_GET_SEALS), F_SEAL_FUTURE_WRITE);
73+
EXPECT_EQ(fcntl(fd, F_GET_SEALS), F_SEAL_GROW | F_SEAL_SHRINK | F_SEAL_FUTURE_WRITE);
74+
EXPECT_EQ(ftruncate(fd, 4096), -1);
7075
}
7176

7277
#else

0 commit comments

Comments
 (0)