99#include " tests/scudo_unit_test.h"
1010
1111#include " common.h"
12+ #include " mem_map.h"
1213
1314#include < string.h>
1415#include < unistd.h>
@@ -22,11 +23,15 @@ TEST(ScudoMapTest, PageSize) {
2223
2324TEST (ScudoMapDeathTest, MapNoAccessUnmap) {
2425 const scudo::uptr Size = 4 * scudo::getPageSizeCached ();
25- scudo::MapPlatformData Data = {};
26- void *P = scudo::map (nullptr , Size, MappingName, MAP_NOACCESS, &Data);
27- EXPECT_NE (P, nullptr );
28- EXPECT_DEATH (memset (P, 0xaa , Size), " " );
29- scudo::unmap (P, Size, UNMAP_ALL, &Data);
26+ scudo::ReservedMemoryT ReservedMemory;
27+
28+ ASSERT_TRUE (ReservedMemory.create (/* Addr=*/ 0U , Size, MappingName));
29+ EXPECT_NE (ReservedMemory.getBase (), 0U );
30+ EXPECT_DEATH (
31+ memset (reinterpret_cast <void *>(ReservedMemory.getBase ()), 0xaa , Size),
32+ " " );
33+
34+ ReservedMemory.release ();
3035}
3136
3237TEST (ScudoMapDeathTest, MapUnmap) {
@@ -36,11 +41,13 @@ TEST(ScudoMapDeathTest, MapUnmap) {
3641 // Repeat few time to avoid missing crash if it's mmaped by unrelated
3742 // code.
3843 for (int i = 0 ; i < 10 ; ++i) {
39- void *P = scudo::map (nullptr , Size, MappingName, 0 , nullptr );
40- if (!P)
44+ scudo::MemMapT MemMap;
45+ MemMap.map (/* Addr=*/ 0U , Size, MappingName);
46+ scudo::uptr P = MemMap.getBase ();
47+ if (P == 0U )
4148 continue ;
42- scudo:: unmap (P , Size, 0 , nullptr );
43- memset (P , 0xbb , Size);
49+ MemMap. unmap (MemMap. getBase () , Size);
50+ memset (reinterpret_cast < void *>(P) , 0xbb , Size);
4451 }
4552 },
4653 " " );
@@ -49,30 +56,36 @@ TEST(ScudoMapDeathTest, MapUnmap) {
4956TEST (ScudoMapDeathTest, MapWithGuardUnmap) {
5057 const scudo::uptr PageSize = scudo::getPageSizeCached ();
5158 const scudo::uptr Size = 4 * PageSize;
52- scudo::MapPlatformData Data = {};
53- void *P = scudo::map (nullptr , Size + 2 * PageSize, MappingName, MAP_NOACCESS,
54- &Data);
55- EXPECT_NE (P, nullptr );
56- void *Q =
57- reinterpret_cast <void *>(reinterpret_cast <scudo::uptr>(P) + PageSize);
58- EXPECT_EQ (scudo::map (Q, Size, MappingName, 0 , &Data), Q);
59- memset (Q, 0xaa , Size);
60- EXPECT_DEATH (memset (Q, 0xaa , Size + 1 ), " " );
61- scudo::unmap (P, Size + 2 * PageSize, UNMAP_ALL, &Data);
59+ scudo::ReservedMemoryT ReservedMemory;
60+ ASSERT_TRUE (
61+ ReservedMemory.create (/* Addr=*/ 0U , Size + 2 * PageSize, MappingName));
62+ ASSERT_NE (ReservedMemory.getBase (), 0U );
63+
64+ scudo::MemMapT MemMap =
65+ ReservedMemory.dispatch (ReservedMemory.getBase (), Size + 2 * PageSize);
66+ ASSERT_TRUE (MemMap.isAllocated ());
67+ scudo::uptr Q = MemMap.getBase () + PageSize;
68+ ASSERT_TRUE (MemMap.remap (Q, Size, MappingName));
69+ memset (reinterpret_cast <void *>(Q), 0xaa , Size);
70+ EXPECT_DEATH (memset (reinterpret_cast <void *>(Q), 0xaa , Size + 1 ), " " );
71+ MemMap.unmap (MemMap.getBase (), MemMap.getCapacity ());
6272}
6373
6474TEST (ScudoMapTest, MapGrowUnmap) {
6575 const scudo::uptr PageSize = scudo::getPageSizeCached ();
6676 const scudo::uptr Size = 4 * PageSize;
67- scudo::MapPlatformData Data = {};
68- void *P = scudo::map (nullptr , Size, MappingName, MAP_NOACCESS, &Data);
69- EXPECT_NE (P, nullptr );
70- void *Q =
71- reinterpret_cast <void *>(reinterpret_cast <scudo::uptr>(P) + PageSize);
72- EXPECT_EQ (scudo::map (Q, PageSize, MappingName, 0 , &Data), Q);
73- memset (Q, 0xaa , PageSize);
74- Q = reinterpret_cast <void *>(reinterpret_cast <scudo::uptr>(Q) + PageSize);
75- EXPECT_EQ (scudo::map (Q, PageSize, MappingName, 0 , &Data), Q);
76- memset (Q, 0xbb , PageSize);
77- scudo::unmap (P, Size, UNMAP_ALL, &Data);
77+ scudo::ReservedMemoryT ReservedMemory;
78+ ReservedMemory.create (/* Addr=*/ 0U , Size, MappingName);
79+ ASSERT_TRUE (ReservedMemory.isCreated ());
80+
81+ scudo::MemMapT MemMap =
82+ ReservedMemory.dispatch (ReservedMemory.getBase (), Size);
83+ ASSERT_TRUE (MemMap.isAllocated ());
84+ scudo::uptr Q = MemMap.getBase () + PageSize;
85+ ASSERT_TRUE (MemMap.remap (Q, PageSize, MappingName));
86+ memset (reinterpret_cast <void *>(Q), 0xaa , PageSize);
87+ Q += PageSize;
88+ ASSERT_TRUE (MemMap.remap (Q, PageSize, MappingName));
89+ memset (reinterpret_cast <void *>(Q), 0xbb , PageSize);
90+ MemMap.unmap (MemMap.getBase (), MemMap.getCapacity ());
7891}
0 commit comments