From 4568f4bc0f116f097a13b1d931de93cf525ae204 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Tue, 23 Oct 2018 17:42:41 -0700 Subject: Verify that the elf matches the expected arch. To avoid a case where a malicious app might try and trick the system to create an elf and register object that mismatches, always verify that they are the same arch. Test: Ran unit tests. Change-Id: I66978e9e02f8e4f396856912e7019528ead4838e --- libunwindstack/tests/ElfCacheTest.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'libunwindstack/tests/ElfCacheTest.cpp') diff --git a/libunwindstack/tests/ElfCacheTest.cpp b/libunwindstack/tests/ElfCacheTest.cpp index 8ed697c61..d9acdec70 100644 --- a/libunwindstack/tests/ElfCacheTest.cpp +++ b/libunwindstack/tests/ElfCacheTest.cpp @@ -82,9 +82,9 @@ void ElfCacheTest::VerifySameMap(bool cache_enabled) { MapInfo info1(nullptr, start, end, 0, 0x5, tf.path); MapInfo info2(nullptr, start, end, 0, 0x5, tf.path); - Elf* elf1 = info1.GetElf(memory_); + Elf* elf1 = info1.GetElf(memory_, ARCH_ARM); ASSERT_TRUE(elf1->valid()); - Elf* elf2 = info2.GetElf(memory_); + Elf* elf2 = info2.GetElf(memory_, ARCH_ARM); ASSERT_TRUE(elf2->valid()); if (cache_enabled) { @@ -132,10 +132,10 @@ void ElfCacheTest::VerifyWithinSameMap(bool cache_enabled) { MapInfo info300_1(nullptr, start, end, 0x300, 0x5, tf.path); MapInfo info300_2(nullptr, start, end, 0x300, 0x5, tf.path); - Elf* elf0_1 = info0_1.GetElf(memory_); + Elf* elf0_1 = info0_1.GetElf(memory_, ARCH_ARM); ASSERT_TRUE(elf0_1->valid()); EXPECT_EQ(ARCH_ARM, elf0_1->arch()); - Elf* elf0_2 = info0_2.GetElf(memory_); + Elf* elf0_2 = info0_2.GetElf(memory_, ARCH_ARM); ASSERT_TRUE(elf0_2->valid()); EXPECT_EQ(ARCH_ARM, elf0_2->arch()); EXPECT_EQ(0U, info0_1.elf_offset); @@ -146,10 +146,10 @@ void ElfCacheTest::VerifyWithinSameMap(bool cache_enabled) { EXPECT_NE(elf0_1, elf0_2); } - Elf* elf100_1 = info100_1.GetElf(memory_); + Elf* elf100_1 = info100_1.GetElf(memory_, ARCH_X86); ASSERT_TRUE(elf100_1->valid()); EXPECT_EQ(ARCH_X86, elf100_1->arch()); - Elf* elf100_2 = info100_2.GetElf(memory_); + Elf* elf100_2 = info100_2.GetElf(memory_, ARCH_X86); ASSERT_TRUE(elf100_2->valid()); EXPECT_EQ(ARCH_X86, elf100_2->arch()); EXPECT_EQ(0U, info100_1.elf_offset); @@ -160,10 +160,10 @@ void ElfCacheTest::VerifyWithinSameMap(bool cache_enabled) { EXPECT_NE(elf100_1, elf100_2); } - Elf* elf200_1 = info200_1.GetElf(memory_); + Elf* elf200_1 = info200_1.GetElf(memory_, ARCH_X86_64); ASSERT_TRUE(elf200_1->valid()); EXPECT_EQ(ARCH_X86_64, elf200_1->arch()); - Elf* elf200_2 = info200_2.GetElf(memory_); + Elf* elf200_2 = info200_2.GetElf(memory_, ARCH_X86_64); ASSERT_TRUE(elf200_2->valid()); EXPECT_EQ(ARCH_X86_64, elf200_2->arch()); EXPECT_EQ(0U, info200_1.elf_offset); @@ -174,10 +174,10 @@ void ElfCacheTest::VerifyWithinSameMap(bool cache_enabled) { EXPECT_NE(elf200_1, elf200_2); } - Elf* elf300_1 = info300_1.GetElf(memory_); + Elf* elf300_1 = info300_1.GetElf(memory_, ARCH_ARM); ASSERT_TRUE(elf300_1->valid()); EXPECT_EQ(ARCH_ARM, elf300_1->arch()); - Elf* elf300_2 = info300_2.GetElf(memory_); + Elf* elf300_2 = info300_2.GetElf(memory_, ARCH_ARM); ASSERT_TRUE(elf300_2->valid()); EXPECT_EQ(ARCH_ARM, elf300_2->arch()); EXPECT_EQ(0x300U, info300_1.elf_offset); @@ -222,10 +222,10 @@ void ElfCacheTest::VerifyWithinSameMapNeverReadAtZero(bool cache_enabled) { MapInfo info400_1(nullptr, start, end, 0x400, 0x5, tf.path); MapInfo info400_2(nullptr, start, end, 0x400, 0x5, tf.path); - Elf* elf300_1 = info300_1.GetElf(memory_); + Elf* elf300_1 = info300_1.GetElf(memory_, ARCH_ARM); ASSERT_TRUE(elf300_1->valid()); EXPECT_EQ(ARCH_ARM, elf300_1->arch()); - Elf* elf300_2 = info300_2.GetElf(memory_); + Elf* elf300_2 = info300_2.GetElf(memory_, ARCH_ARM); ASSERT_TRUE(elf300_2->valid()); EXPECT_EQ(ARCH_ARM, elf300_2->arch()); EXPECT_EQ(0x300U, info300_1.elf_offset); @@ -236,10 +236,10 @@ void ElfCacheTest::VerifyWithinSameMapNeverReadAtZero(bool cache_enabled) { EXPECT_NE(elf300_1, elf300_2); } - Elf* elf400_1 = info400_1.GetElf(memory_); + Elf* elf400_1 = info400_1.GetElf(memory_, ARCH_ARM); ASSERT_TRUE(elf400_1->valid()); EXPECT_EQ(ARCH_ARM, elf400_1->arch()); - Elf* elf400_2 = info400_2.GetElf(memory_); + Elf* elf400_2 = info400_2.GetElf(memory_, ARCH_ARM); ASSERT_TRUE(elf400_2->valid()); EXPECT_EQ(ARCH_ARM, elf400_2->arch()); EXPECT_EQ(0x400U, info400_1.elf_offset); -- cgit v1.2.3