| Index: syzygy/agent/asan/block_unittest.cc
|
| diff --git a/syzygy/agent/asan/block_unittest.cc b/syzygy/agent/asan/block_unittest.cc
|
| index 06b4c29fc75863ea03b3e7c0099befb4a0f0d57a..fa34abcbac3aea100250e1cb6908c4fb2143dc42 100644
|
| --- a/syzygy/agent/asan/block_unittest.cc
|
| +++ b/syzygy/agent/asan/block_unittest.cc
|
| @@ -67,7 +67,6 @@ void IsValidBlockImpl(const BlockInfo& block, bool just_initialized) {
|
|
|
| // Check the header.
|
| EXPECT_EQ(kBlockHeaderMagic, block.header->magic);
|
| - EXPECT_FALSE(block.header->is_nested);
|
| EXPECT_LT(0u, block.header->body_size);
|
| EXPECT_EQ(block.header->body_size, block.body_size);
|
| if (just_initialized) {
|
| @@ -77,10 +76,6 @@ void IsValidBlockImpl(const BlockInfo& block, bool just_initialized) {
|
| EXPECT_EQ(ALLOCATED_BLOCK, block.header->state);
|
| }
|
|
|
| - // By default we assume the blocks to not be nested.
|
| - EXPECT_FALSE(block.header->is_nested);
|
| - EXPECT_EQ(static_cast<bool>(block.header->is_nested), block.is_nested);
|
| -
|
| // Check the header padding.
|
| if (block.header->has_header_padding) {
|
| EXPECT_LE(kShadowRatio, block.header_padding_size);
|
| @@ -207,19 +202,19 @@ TEST_F(BlockTest, EndToEnd) {
|
|
|
| EXPECT_TRUE(BlockPlanLayout(8, 8, 4, 0, 0, &layout));
|
| std::vector<uint8_t> block_data(layout.block_size);
|
| - BlockInitialize(layout, block_data.data(), false, &block_info);
|
| + BlockInitialize(layout, block_data.data(), &block_info);
|
| EXPECT_NO_FATAL_FAILURE(IsValidInitializedBlock(block_info));
|
| block_data.clear();
|
|
|
| EXPECT_TRUE(BlockPlanLayout(8, 8, 61, 0, 0, &layout));
|
| block_data.resize(layout.block_size);
|
| - BlockInitialize(layout, block_data.data(), false, &block_info);
|
| + BlockInitialize(layout, block_data.data(), &block_info);
|
| EXPECT_NO_FATAL_FAILURE(IsValidInitializedBlock(block_info));
|
| block_data.clear();
|
|
|
| EXPECT_TRUE(BlockPlanLayout(8, 8, 60, 32, 32, &layout));
|
| block_data.resize(layout.block_size);
|
| - BlockInitialize(layout, block_data.data(), false, &block_info);
|
| + BlockInitialize(layout, block_data.data(), &block_info);
|
| EXPECT_NO_FATAL_FAILURE(IsValidInitializedBlock(block_info));
|
| block_data.clear();
|
|
|
| @@ -228,7 +223,7 @@ TEST_F(BlockTest, EndToEnd) {
|
| void* data = ::VirtualAlloc(NULL, layout.block_size, MEM_COMMIT,
|
| PAGE_READWRITE);
|
| ::memset(data, 0, layout.block_size);
|
| - BlockInitialize(layout, data, false, &block_info);
|
| + BlockInitialize(layout, data, &block_info);
|
| EXPECT_NO_FATAL_FAILURE(IsValidInitializedBlock(block_info));
|
| ASSERT_EQ(TRUE, ::VirtualFree(data, 0, MEM_RELEASE));
|
| }
|
| @@ -245,7 +240,7 @@ TEST_F(BlockTest, GetHeaderFromBody) {
|
|
|
| // First try navigating a block without header padding.
|
| BlockInfo info = {};
|
| - BlockInitialize(layout1, data.get(), false, &info);
|
| + BlockInitialize(layout1, data.get(), &info);
|
| // This should succeed as expected.
|
| EXPECT_EQ(info.header, BlockGetHeaderFromBody(info.body));
|
| // This fails because of invalid alignment.
|
| @@ -264,7 +259,7 @@ TEST_F(BlockTest, GetHeaderFromBody) {
|
| EXPECT_TRUE(BlockGetHeaderFromBody(info.body) == nullptr);
|
|
|
| // Now navigate a block with header padding.
|
| - BlockInitialize(layout2, data.get(), false, &info);
|
| + BlockInitialize(layout2, data.get(), &info);
|
| // This should succeed as expected.
|
| EXPECT_EQ(info.header, BlockGetHeaderFromBody(info.body));
|
| // This fails because of invalid alignment.
|
| @@ -300,7 +295,7 @@ TEST_F(BlockTest, GetHeaderFromBodyProtectedMemory) {
|
| PAGE_READWRITE);
|
| ASSERT_TRUE(alloc != NULL);
|
| BlockInfo block_info = {};
|
| - BlockInitialize(layout, alloc, false, &block_info);
|
| + BlockInitialize(layout, alloc, &block_info);
|
|
|
| BlockProtectRedzones(block_info, &shadow_);
|
| EXPECT_CALL(*this, OnExceptionCallback(_));
|
| @@ -319,7 +314,7 @@ TEST_F(BlockTest, ConvertBlockInfo) {
|
| ::memset(data.get(), 0, layout.block_size);
|
|
|
| BlockInfo expanded = {};
|
| - BlockInitialize(layout, data.get(), false, &expanded);
|
| + BlockInitialize(layout, data.get(), &expanded);
|
|
|
| CompactBlockInfo compact = {};
|
| ConvertBlockInfo(expanded, &compact);
|
| @@ -347,7 +342,7 @@ TEST_F(BlockTest, BlockInfoFromMemory) {
|
|
|
| // First recover a block without header padding.
|
| BlockInfo info = {};
|
| - BlockInitialize(layout1, data.get(), false, &info);
|
| + BlockInitialize(layout1, data.get(), &info);
|
| BlockInfo info_recovered = {};
|
| EXPECT_TRUE(BlockInfoFromMemory(info.header, &info_recovered));
|
| EXPECT_EQ(info, info_recovered);
|
| @@ -365,7 +360,7 @@ TEST_F(BlockTest, BlockInfoFromMemory) {
|
| EXPECT_FALSE(BlockInfoFromMemory(info.header, &info_recovered));
|
|
|
| // Now recover a block with header padding.
|
| - BlockInitialize(layout2, data.get(), false, &info);
|
| + BlockInitialize(layout2, data.get(), &info);
|
| EXPECT_TRUE(BlockInfoFromMemory(info.header, &info_recovered));
|
| EXPECT_EQ(info, info_recovered);
|
| // Failed because the magic is invalid.
|
| @@ -388,15 +383,15 @@ TEST_F(BlockTest, BlockInfoFromMemory) {
|
| EXPECT_TRUE(BlockPlanLayout(kShadowRatio, kShadowRatio, block_size, 0, 0,
|
| &layout));
|
| ASSERT_LE(layout.block_size, kAllocSize);
|
| - BlockInitialize(layout, alloc, false, &info);
|
| + BlockInitialize(layout, alloc, &info);
|
| EXPECT_TRUE(BlockInfoFromMemory(info.header, &info_recovered));
|
| EXPECT_EQ(info.body_size, info_recovered.body_size);
|
| - EXPECT_EQ(info, info_recovered);
|
| + EXPECT_EQ(info, info_recovered) << block_size;
|
|
|
| EXPECT_TRUE(BlockPlanLayout(4096, 4096, block_size, 4096, 4096,
|
| &layout));
|
| ASSERT_LE(layout.block_size, kAllocSize);
|
| - BlockInitialize(layout, alloc, false, &info);
|
| + BlockInitialize(layout, alloc, &info);
|
| EXPECT_TRUE(BlockInfoFromMemory(info.header, &info_recovered));
|
| EXPECT_EQ(info.body_size, info_recovered.body_size);
|
| EXPECT_EQ(info, info_recovered);
|
| @@ -413,7 +408,7 @@ TEST_F(BlockTest, BlockInfoFromMemoryInvalidPadding) {
|
| ::memset(data.get(), 0, layout.block_size);
|
|
|
| BlockInfo info = {};
|
| - BlockInitialize(layout, data.get(), false, &info);
|
| + BlockInitialize(layout, data.get(), &info);
|
| EXPECT_EQ(1, info.header->has_header_padding);
|
| BlockInfo info_recovered = {};
|
| EXPECT_TRUE(BlockInfoFromMemory(info.header, &info_recovered));
|
| @@ -436,7 +431,7 @@ TEST_F(BlockTest, BlockInfoFromMemoryProtectedMemory) {
|
| PAGE_READWRITE);
|
| ASSERT_TRUE(alloc != NULL);
|
| BlockInfo block_info = {};
|
| - BlockInitialize(layout, alloc, false, &block_info);
|
| + BlockInitialize(layout, alloc, &block_info);
|
|
|
| BlockProtectRedzones(block_info, &shadow_);
|
| BlockInfo recovered_info = {};
|
| @@ -448,28 +443,13 @@ TEST_F(BlockTest, BlockInfoFromMemoryProtectedMemory) {
|
| ASSERT_EQ(TRUE, ::VirtualFree(alloc, 0, MEM_RELEASE));
|
| }
|
|
|
| -TEST_F(BlockTest, BlockInfoFromMemoryForNestedBlock) {
|
| - BlockLayout layout = {};
|
| - EXPECT_TRUE(BlockPlanLayout(kShadowRatio, kShadowRatio, 10, 0, 0, &layout));
|
| -
|
| - std::unique_ptr<uint8_t[]> data(new uint8_t[layout.block_size]);
|
| - BlockInfo block_info = {};
|
| - BlockInitialize(layout, data.get(), true, &block_info);
|
| -
|
| - BlockInfo recovered_info = {};
|
| - EXPECT_TRUE(BlockInfoFromMemory(block_info.header, &recovered_info));
|
| -
|
| - EXPECT_TRUE(recovered_info.is_nested);
|
| - EXPECT_TRUE(recovered_info.header->is_nested);
|
| -}
|
| -
|
| TEST_F(BlockTest, ChecksumWorksForAllStates) {
|
| BlockLayout layout = {};
|
| EXPECT_TRUE(BlockPlanLayout(kShadowRatio, kShadowRatio, 10, 0, 0, &layout));
|
| std::unique_ptr<uint8_t[]> data(new uint8_t[layout.block_size]);
|
| ::memset(data.get(), 0, layout.block_size);
|
| BlockInfo info = {};
|
| - BlockInitialize(layout, data.get(), false, &info);
|
| + BlockInitialize(layout, data.get(), &info);
|
| while (true) {
|
| BlockCalculateChecksum(info);
|
| ++info.header->state;
|
| @@ -698,7 +678,7 @@ TEST_F(BlockTest, ChecksumDetectsTampering) {
|
| ASSERT_GT(kAllocSize, layout.block_size);
|
|
|
| BlockInfo block_info = {};
|
| - BlockInitialize(layout, alloc, false, &block_info);
|
| + BlockInitialize(layout, alloc, &block_info);
|
| block_info.header->alloc_stack = valid_stack;
|
| block_info.trailer->heap_id = valid_heap_id;
|
|
|
|
|