Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: syzygy/integration_tests/instrument_integration_test.cc

Issue 2983783002: Run the integration tests against the Clang instrumented DLL. (Closed)
Patch Set: Address Chris comment. Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « syzygy/integration_tests/asan_interceptors_tests.cc ('k') | syzygy/pe/unittest_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 Google Inc. All Rights Reserved. 1 // Copyright 2013 Google Inc. All Rights Reserved.
2 // 2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License. 4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at 5 // You may obtain a copy of the License at
6 // 6 //
7 // http://www.apache.org/licenses/LICENSE-2.0 7 // http://www.apache.org/licenses/LICENSE-2.0
8 // 8 //
9 // Unless required by applicable law or agreed to in writing, software 9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, 10 // distributed under the License is distributed on an "AS IS" BASIS,
(...skipping 1295 matching lines...) Expand 10 before | Expand all | Expand 10 after
1306 // Class created to enable parametrization of the tests with Clang. 1306 // Class created to enable parametrization of the tests with Clang.
1307 // Currently only Syzygy is supported but will be extended to work with CLANG. 1307 // Currently only Syzygy is supported but will be extended to work with CLANG.
1308 // Right now it just forwards the calls to the parent class. 1308 // Right now it just forwards the calls to the parent class.
1309 class ParametrizedLenientInstrumentAppIntegrationTest 1309 class ParametrizedLenientInstrumentAppIntegrationTest
1310 : public LenientInstrumentAppIntegrationTest, 1310 : public LenientInstrumentAppIntegrationTest,
1311 public ::testing::WithParamInterface<InstrumentationMode> { 1311 public ::testing::WithParamInterface<InstrumentationMode> {
1312 public: 1312 public:
1313 void EndToEndTest(const std::string& mode) override { 1313 void EndToEndTest(const std::string& mode) override {
1314 if (GetParam() == SYZYGY) { 1314 if (GetParam() == SYZYGY) {
1315 LenientInstrumentAppIntegrationTest::EndToEndTest(mode); 1315 LenientInstrumentAppIntegrationTest::EndToEndTest(mode);
1316 } else if (GetParam() == CLANG) {
1317 test_dll_path_ =
1318 testing::GetExeRelativePath(testing::kIntegrationTestsClangDllName);
1319 // Validates that the test dll loads post instrumentation.
1320 ASSERT_NO_FATAL_FAILURE(LoadTestDll(test_dll_path_, &module_));
1316 } 1321 }
1317 } 1322 }
1318 1323
1319 void EndToEndCheckTestDll() override { 1324 void EndToEndCheckTestDll() override {
1320 if (GetParam() == SYZYGY) { 1325 if (GetParam() == SYZYGY) {
1321 LenientInstrumentAppIntegrationTest::EndToEndCheckTestDll(); 1326 LenientInstrumentAppIntegrationTest::EndToEndCheckTestDll();
1322 } 1327 }
1323 } 1328 }
1324 }; 1329 };
1325 1330
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
1452 // Disable the heap checking as this is implies touching all the shadow bytes 1457 // Disable the heap checking as this is implies touching all the shadow bytes
1453 // and this make those tests really slow. 1458 // and this make those tests really slow.
1454 AddEnvironmentChange(::common::kSyzyAsanOptionsEnvVar, 1459 AddEnvironmentChange(::common::kSyzyAsanOptionsEnvVar,
1455 "--no_check_heap_on_failure"); 1460 "--no_check_heap_on_failure");
1456 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); 1461 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1457 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); 1462 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1458 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll()); 1463 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll());
1459 ASSERT_NO_FATAL_FAILURE(CheckTestDllImportsRedirected()); 1464 ASSERT_NO_FATAL_FAILURE(CheckTestDllImportsRedirected());
1460 } 1465 }
1461 1466
1462 TEST_P(ParametrizedInstrumentAppIntegrationTest, AsanEndToEndNoLiveness) {
1463 // Disable the heap checking as this is implies touching all the shadow bytes
1464 // and this make those tests really slow.
1465 AddEnvironmentChange(::common::kSyzyAsanOptionsEnvVar,
1466 "--no_check_heap_on_failure");
1467 cmd_line_.AppendSwitch("no-liveness-analysis");
1468 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1469 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1470 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll());
1471 }
1472
1473 TEST_P(ParametrizedInstrumentAppIntegrationTest,
1474 AsanEndToEndNoRedundancyAnalysis) {
1475 // Disable the heap checking as this is implies touching all the shadow bytes
1476 // and this make those tests really slow.
1477 AddEnvironmentChange(::common::kSyzyAsanOptionsEnvVar,
1478 "--no_check_heap_on_failure");
1479 cmd_line_.AppendSwitch("no-redundancy-analysis");
1480 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1481 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1482 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll());
1483 }
1484
1485 TEST_P(ParametrizedInstrumentAppIntegrationTest,
1486 AsanEndToEndNoFunctionInterceptors) {
1487 // Disable the heap checking as this is implies touching all the shadow bytes
1488 // and this make those tests really slow.
1489 AddEnvironmentChange(::common::kSyzyAsanOptionsEnvVar,
1490 "--no_check_heap_on_failure");
1491 cmd_line_.AppendSwitch("no-interceptors");
1492 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1493 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1494 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll());
1495 }
1496
1497 TEST_P(ParametrizedInstrumentAppIntegrationTest, AsanEndToEndWithRtlOptions) { 1467 TEST_P(ParametrizedInstrumentAppIntegrationTest, AsanEndToEndWithRtlOptions) {
1498 cmd_line_.AppendSwitchASCII( 1468 AddEnvironmentChange(
1499 common::kAsanRtlOptions, 1469 ::common::kSyzyAsanOptionsEnvVar,
1500 "--quarantine_size=20000000 --quarantine_block_size=1000000 " 1470 "--quarantine_size=20000000 --quarantine_block_size=1000000 "
1501 "--no_check_heap_on_failure"); 1471 "--no_check_heap_on_failure");
1502 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); 1472 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1503 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); 1473 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1504 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll()); 1474 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll());
1505 1475
1506 // Get the active runtime and validate its parameters. 1476 // Get the active runtime and validate its parameters.
1507 agent::asan::AsanRuntime* runtime = GetActiveAsanRuntime(); 1477 agent::asan::AsanRuntime* runtime = GetActiveAsanRuntime();
1508 ASSERT_TRUE(runtime != NULL); 1478 ASSERT_TRUE(runtime != NULL);
1509 ASSERT_EQ(20000000u, runtime->params().quarantine_size); 1479 ASSERT_EQ(20000000u, runtime->params().quarantine_size);
1510 ASSERT_EQ(1000000u, runtime->params().quarantine_block_size); 1480 ASSERT_EQ(1000000u, runtime->params().quarantine_block_size);
1511 } 1481 }
1512 1482
1513 TEST_P(ParametrizedInstrumentAppIntegrationTest, 1483 TEST_P(ParametrizedInstrumentAppIntegrationTest,
1514 AsanEndToEndWithRtlOptionsOverrideWithEnvironment) {
1515 std::unique_ptr<base::Environment> env(base::Environment::Create());
1516 ASSERT_NE(env.get(), nullptr);
1517 env->SetVar(::common::kSyzyAsanOptionsEnvVar,
1518 "--quarantine_block_size=800000 --ignored_stack_ids=0x1 "
1519 "--no_check_heap_on_failure");
1520 cmd_line_.AppendSwitchASCII(
1521 common::kAsanRtlOptions,
1522 "--quarantine_size=20000000 --quarantine_block_size=1000000 "
1523 "--ignored_stack_ids=0x2");
1524 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1525 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1526 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll());
1527
1528 // Get the active runtime and validate its parameters.
1529 agent::asan::AsanRuntime* runtime = GetActiveAsanRuntime();
1530 ASSERT_TRUE(runtime != NULL);
1531 ASSERT_EQ(20000000u, runtime->params().quarantine_size);
1532 ASSERT_EQ(800000u, runtime->params().quarantine_block_size);
1533 ASSERT_THAT(runtime->params().ignored_stack_ids_set,
1534 testing::ElementsAre(0x1, 0x2));
1535
1536 env->UnSetVar(::common::kSyzyAsanOptionsEnvVar);
1537 }
1538
1539 TEST_P(ParametrizedInstrumentAppIntegrationTest, FullOptimizedAsanEndToEnd) {
1540 // Disable the heap checking as this implies touching all the shadow bytes
1541 // and this make these tests really slow.
1542 AddEnvironmentChange(::common::kSyzyAsanOptionsEnvVar,
1543 "--no_check_heap_on_failure");
1544 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1545 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1546 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll());
1547 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckInterceptedFunctions());
1548 }
1549
1550 TEST_P(ParametrizedInstrumentAppIntegrationTest,
1551 AsanInvalidAccessWithCorruptAllocatedBlockHeader) { 1484 AsanInvalidAccessWithCorruptAllocatedBlockHeader) {
1552 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); 1485 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1553 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); 1486 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1487 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll());
1554 OutOfProcessAsanErrorCheckAndValidateLog( 1488 OutOfProcessAsanErrorCheckAndValidateLog(
1555 testing::kAsanInvalidAccessWithCorruptAllocatedBlockHeader, true, 1489 testing::kAsanInvalidAccessWithCorruptAllocatedBlockHeader, true,
1556 kAsanCorruptHeap, NULL); 1490 kAsanCorruptHeap, NULL);
1557 } 1491 }
1558 1492
1559 TEST_P(ParametrizedInstrumentAppIntegrationTest, 1493 TEST_P(ParametrizedInstrumentAppIntegrationTest,
1560 AsanOverflowCallsCrashForException) { 1494 AsanOverflowCallsCrashForException) {
1561 // Asan-detected violations go through CrashForException if it is available. 1495 // Asan-detected violations go through CrashForException if it is available.
1562 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); 1496 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1563 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); 1497 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
(...skipping 25 matching lines...) Expand all
1589 AsanCorruptBlockWithPageProtections) { 1523 AsanCorruptBlockWithPageProtections) {
1590 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); 1524 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1591 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); 1525 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1592 OutOfProcessAsanErrorCheckAndValidateLog( 1526 OutOfProcessAsanErrorCheckAndValidateLog(
1593 testing::kAsanCorruptBlockWithPageProtections, true, 1527 testing::kAsanCorruptBlockWithPageProtections, true,
1594 kAsanHeapUseAfterFree, kAsanCorruptHeap); 1528 kAsanHeapUseAfterFree, kAsanCorruptHeap);
1595 } 1529 }
1596 1530
1597 TEST_P(ParametrizedInstrumentAppIntegrationTest, 1531 TEST_P(ParametrizedInstrumentAppIntegrationTest,
1598 SampledAllocationsAsanEndToEnd) { 1532 SampledAllocationsAsanEndToEnd) {
1599 cmd_line_.AppendSwitchASCII("asan-rtl-options", 1533 AddEnvironmentChange(::common::kSyzyAsanOptionsEnvVar,
1600 "--allocation_guard_rate=0.5 " 1534 "--allocation_guard_rate=0.5 "
1601 "--no_check_heap_on_failure"); 1535 "--no_check_heap_on_failure");
1602 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); 1536 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1603 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); 1537 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1604 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckSampledAllocations()); 1538 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckSampledAllocations());
1605 } 1539 }
1606 1540
1607 TEST_P(ParametrizedInstrumentAppIntegrationTest, 1541 TEST_P(ParametrizedInstrumentAppIntegrationTest,
1608 AsanLargeBlockHeapEnabledTest) { 1542 AsanLargeBlockHeapEnabledTest) {
1609 cmd_line_.AppendSwitchASCII("asan-rtl-options", 1543 AddEnvironmentChange(::common::kSyzyAsanOptionsEnvVar,
1610 "--no_check_heap_on_failure " 1544 "--no_check_heap_on_failure "
1611 "--quarantine_size=4000000 " 1545 "--quarantine_size=4000000 "
1612 "--quarantine_block_size=2000000"); 1546 "--quarantine_block_size=2000000");
1613 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); 1547 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1614 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); 1548 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1615 ASSERT_NO_FATAL_FAILURE(AsanLargeBlockHeapTests(true)); 1549 ASSERT_NO_FATAL_FAILURE(AsanLargeBlockHeapTests(true));
1616 } 1550 }
1617 1551
1618 TEST_P(ParametrizedInstrumentAppIntegrationTest, 1552 TEST_P(ParametrizedInstrumentAppIntegrationTest,
1619 AsanLargeBlockHeapDisabledTest) { 1553 AsanLargeBlockHeapDisabledTest) {
1620 cmd_line_.AppendSwitchASCII("asan-rtl-options", 1554 AddEnvironmentChange(::common::kSyzyAsanOptionsEnvVar,
1621 "--no_check_heap_on_failure " 1555 "--no_check_heap_on_failure "
1622 "--disable_large_block_heap"); 1556 "--disable_large_block_heap");
1623 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); 1557 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1624 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); 1558 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1625 ASSERT_NO_FATAL_FAILURE(AsanLargeBlockHeapTests(false)); 1559 ASSERT_NO_FATAL_FAILURE(AsanLargeBlockHeapTests(false));
1626 } 1560 }
1627 1561
1628 TEST_P(ParametrizedInstrumentAppIntegrationTest, AsanZebraHeapDisabledTest) {
1629 AsanZebraHeapTest(false);
1630 }
1631
1632 TEST_P(ParametrizedInstrumentAppIntegrationTest, AsanZebraHeapEnabledTest) {
1633 AsanZebraHeapTest(true);
1634 }
1635
1636 TEST_P(ParametrizedInstrumentAppIntegrationTest, 1562 TEST_P(ParametrizedInstrumentAppIntegrationTest,
1637 AsanSymbolizerTestAsanBufferOverflow) { 1563 AsanSymbolizerTestAsanBufferOverflow) {
1638 AsanSymbolizerTest(testing::kAsanRead8BufferOverflow, 1564 AsanSymbolizerTest(testing::kAsanRead8BufferOverflow,
1639 STRINGIFY(HEAP_BUFFER_OVERFLOW), 1565 STRINGIFY(HEAP_BUFFER_OVERFLOW),
1640 STRINGIFY(ASAN_READ_ACCESS), 1566 STRINGIFY(ASAN_READ_ACCESS),
1641 1, 1567 1,
1642 false); 1568 false);
1643 } 1569 }
1644 1570
1645 TEST_P(ParametrizedInstrumentAppIntegrationTest, 1571 TEST_P(ParametrizedInstrumentAppIntegrationTest,
(...skipping 16 matching lines...) Expand all
1662 1588
1663 TEST_P(ParametrizedInstrumentAppIntegrationTest, 1589 TEST_P(ParametrizedInstrumentAppIntegrationTest,
1664 AsanSymbolizerTestAsanCorruptBlock) { 1590 AsanSymbolizerTestAsanCorruptBlock) {
1665 AsanSymbolizerTest(testing::kAsanCorruptBlock, 1591 AsanSymbolizerTest(testing::kAsanCorruptBlock,
1666 STRINGIFY(CORRUPT_BLOCK), 1592 STRINGIFY(CORRUPT_BLOCK),
1667 STRINGIFY(ASAN_UNKNOWN_ACCESS), 1593 STRINGIFY(ASAN_UNKNOWN_ACCESS),
1668 0, 1594 0,
1669 false); 1595 false);
1670 } 1596 }
1671 1597
1672 TEST_P(ParametrizedInstrumentAppIntegrationTest,
1673 AsanSymbolizerTestAsanCorruptBlockInQuarantine) {
1674 AsanSymbolizerTest(testing::kAsanCorruptBlockInQuarantine,
1675 STRINGIFY(CORRUPT_BLOCK),
1676 STRINGIFY(ASAN_UNKNOWN_ACCESS),
1677 0,
1678 true);
1679 }
1680
1681 // These tests require corrupt heap checking to be enabled. 1598 // These tests require corrupt heap checking to be enabled.
1682 TEST_P(ParametrizedInstrumentAppIntegrationTest, AsanNearNullptrAccess) { 1599 TEST_P(ParametrizedInstrumentAppIntegrationTest, AsanNearNullptrAccess) {
1683 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); 1600 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1684 1601
1685 OutOfProcessAsanErrorCheckAndValidateLog( 1602 OutOfProcessAsanErrorCheckAndValidateLog(
1686 testing::kAsanNearNullptrAccessHeapCorruptionInstrumented, true, 1603 testing::kAsanNearNullptrAccessHeapCorruptionInstrumented, true,
1687 kAsanHandlingException, kAsanNearNullptrAccessHeapCorruption); 1604 kAsanHandlingException, kAsanNearNullptrAccessHeapCorruption);
1688 OutOfProcessAsanErrorCheckAndValidateLog( 1605 OutOfProcessAsanErrorCheckAndValidateLog(
1689 testing::kAsanNearNullptrAccessHeapCorruptionUninstrumented, true, 1606 testing::kAsanNearNullptrAccessHeapCorruptionUninstrumented, true,
1690 kAsanHandlingException, kAsanNearNullptrAccessHeapCorruption); 1607 kAsanHandlingException, kAsanNearNullptrAccessHeapCorruption);
1691 OutOfProcessAsanErrorCheckAndValidateLog( 1608 OutOfProcessAsanErrorCheckAndValidateLog(
1692 testing::kAsanNearNullptrAccessNoHeapCorruptionInstrumented, true, 1609 testing::kAsanNearNullptrAccessNoHeapCorruptionInstrumented, true,
1693 kAsanHandlingException, kAsanNearNullptrAccessNoHeapCorruption); 1610 kAsanHandlingException, kAsanNearNullptrAccessNoHeapCorruption);
1694 OutOfProcessAsanErrorCheckAndValidateLog( 1611 OutOfProcessAsanErrorCheckAndValidateLog(
1695 testing::kAsanNearNullptrAccessNoHeapCorruptionUninstrumented, true, 1612 testing::kAsanNearNullptrAccessNoHeapCorruptionUninstrumented, true,
1696 kAsanHandlingException, kAsanNearNullptrAccessNoHeapCorruption); 1613 kAsanHandlingException, kAsanNearNullptrAccessNoHeapCorruption);
1697 OutOfProcessAsanErrorCheckAndValidateLog( 1614 OutOfProcessAsanErrorCheckAndValidateLog(
1698 testing::kAsanNullptrAccessNoHeapCorruptionUninstrumented, true, 1615 testing::kAsanNullptrAccessNoHeapCorruptionUninstrumented, true,
1699 kAsanHandlingException, kAsanNearNullptrAccessNoHeapCorruption); 1616 kAsanHandlingException, kAsanNearNullptrAccessNoHeapCorruption);
1700 } 1617 }
1701 1618
1702 // Instantiate the test cases only with SYZYGY until some problems are fixed.
1703 INSTANTIATE_TEST_CASE_P(InstantiationName, 1619 INSTANTIATE_TEST_CASE_P(InstantiationName,
1704 ParametrizedInstrumentAppIntegrationTest, 1620 ParametrizedInstrumentAppIntegrationTest,
1705 testing::Values(SYZYGY)); 1621 testing::Values(SYZYGY, CLANG));
1622
1623 TEST_F(InstrumentAppIntegrationTest, AsanEndToEndNoLiveness) {
1624 // Disable the heap checking as this is implies touching all the shadow bytes
1625 // and this make those tests really slow.
1626 AddEnvironmentChange(::common::kSyzyAsanOptionsEnvVar,
1627 "--no_check_heap_on_failure");
1628 cmd_line_.AppendSwitch("no-liveness-analysis");
1629 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1630 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1631 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll());
1632 }
1633
1634 TEST_F(InstrumentAppIntegrationTest, AsanEndToEndNoRedundancyAnalysis) {
1635 // Disable the heap checking as this is implies touching all the shadow bytes
1636 // and this make those tests really slow.
1637 AddEnvironmentChange(::common::kSyzyAsanOptionsEnvVar,
1638 "--no_check_heap_on_failure");
1639 cmd_line_.AppendSwitch("no-redundancy-analysis");
1640 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1641 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1642 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll());
1643 }
1644
1645 TEST_F(InstrumentAppIntegrationTest, AsanEndToEndNoFunctionInterceptors) {
1646 // Disable the heap checking as this is implies touching all the shadow bytes
1647 // and this make those tests really slow.
1648 AddEnvironmentChange(::common::kSyzyAsanOptionsEnvVar,
1649 "--no_check_heap_on_failure");
1650 cmd_line_.AppendSwitch("no-interceptors");
1651 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1652 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1653 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll());
1654 }
1655
1656 TEST_F(InstrumentAppIntegrationTest,
1657 AsanEndToEndWithRtlOptionsOverrideWithEnvironment) {
1658 std::unique_ptr<base::Environment> env(base::Environment::Create());
1659 ASSERT_NE(env.get(), nullptr);
1660 env->SetVar(::common::kSyzyAsanOptionsEnvVar,
1661 "--quarantine_block_size=800000 --ignored_stack_ids=0x1 "
1662 "--no_check_heap_on_failure");
1663 cmd_line_.AppendSwitchASCII(
1664 common::kAsanRtlOptions,
1665 "--quarantine_size=20000000 --quarantine_block_size=1000000 "
1666 "--ignored_stack_ids=0x2");
1667 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1668 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1669 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll());
1670
1671 // Get the active runtime and validate its parameters.
1672 agent::asan::AsanRuntime* runtime = GetActiveAsanRuntime();
1673 ASSERT_TRUE(runtime != NULL);
1674 ASSERT_EQ(20000000u, runtime->params().quarantine_size);
1675 ASSERT_EQ(800000u, runtime->params().quarantine_block_size);
1676 ASSERT_THAT(runtime->params().ignored_stack_ids_set,
1677 testing::ElementsAre(0x1, 0x2));
1678
1679 env->UnSetVar(::common::kSyzyAsanOptionsEnvVar);
1680 }
1681
1682 TEST_F(InstrumentAppIntegrationTest, FullOptimizedAsanEndToEnd) {
1683 // Disable the heap checking as this implies touching all the shadow bytes
1684 // and this make these tests really slow.
1685 AddEnvironmentChange(::common::kSyzyAsanOptionsEnvVar,
1686 "--no_check_heap_on_failure");
1687 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1688 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1689 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll());
1690 ASSERT_NO_FATAL_FAILURE(AsanErrorCheckInterceptedFunctions());
1691 }
1692
1693 TEST_F(InstrumentAppIntegrationTest,
1694 AsanSymbolizerTestAsanCorruptBlockInQuarantine) {
1695 // This test requires the HeapCreate/HeapDestroy functions to be intercepted
1696 // and thus doesn't work on a Clang instrumented binary.
1697 AsanSymbolizerTest(testing::kAsanCorruptBlockInQuarantine,
1698 STRINGIFY(CORRUPT_BLOCK), STRINGIFY(ASAN_UNKNOWN_ACCESS),
1699 0, true);
1700 }
1701
1702 TEST_F(InstrumentAppIntegrationTest, AsanZebraHeapDisabledTest) {
1703 AsanZebraHeapTest(false);
1704 }
1705
1706 TEST_F(InstrumentAppIntegrationTest, AsanZebraHeapEnabledTest) {
1707 AsanZebraHeapTest(true);
1708 }
1706 1709
1707 TEST_F(InstrumentAppIntegrationTest, BBEntryEndToEnd) { 1710 TEST_F(InstrumentAppIntegrationTest, BBEntryEndToEnd) {
1708 ASSERT_NO_FATAL_FAILURE(StartService()); 1711 ASSERT_NO_FATAL_FAILURE(StartService());
1709 ASSERT_NO_FATAL_FAILURE(EndToEndTest("bbentry")); 1712 ASSERT_NO_FATAL_FAILURE(EndToEndTest("bbentry"));
1710 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); 1713 ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll());
1711 ASSERT_NO_FATAL_FAILURE(BBEntryInvokeTestDll()); 1714 ASSERT_NO_FATAL_FAILURE(BBEntryInvokeTestDll());
1712 ASSERT_NO_FATAL_FAILURE(StopService()); 1715 ASSERT_NO_FATAL_FAILURE(StopService());
1713 ASSERT_NO_FATAL_FAILURE(BBEntryCheckTestDll()); 1716 ASSERT_NO_FATAL_FAILURE(BBEntryCheckTestDll());
1714 } 1717 }
1715 1718
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1805 1808
1806 TEST_F(InstrumentAppIntegrationTest, DeferredFreeTLS) { 1809 TEST_F(InstrumentAppIntegrationTest, DeferredFreeTLS) {
1807 ASSERT_NO_FATAL_FAILURE(StartService()); 1810 ASSERT_NO_FATAL_FAILURE(StartService());
1808 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); 1811 ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan"));
1809 ASSERT_EQ(0, InvokeTestDllFunction(testing::kAsanDeferredFreeTLS)); 1812 ASSERT_EQ(0, InvokeTestDllFunction(testing::kAsanDeferredFreeTLS));
1810 ASSERT_NO_FATAL_FAILURE(UnloadDll()); 1813 ASSERT_NO_FATAL_FAILURE(UnloadDll());
1811 ASSERT_NO_FATAL_FAILURE(StopService()); 1814 ASSERT_NO_FATAL_FAILURE(StopService());
1812 } 1815 }
1813 1816
1814 } // namespace integration_tests 1817 } // namespace integration_tests
OLDNEW
« no previous file with comments | « syzygy/integration_tests/asan_interceptors_tests.cc ('k') | syzygy/pe/unittest_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698