OLD | NEW |
1 // Copyright 2012 Google Inc. All Rights Reserved. | 1 // Copyright 2012 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 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 for (const auto& iter : feature_group_frequency) { | 281 for (const auto& iter : feature_group_frequency) { |
282 EXPECT_LT(kExpectedCount - kErrorMargin, iter.second); | 282 EXPECT_LT(kExpectedCount - kErrorMargin, iter.second); |
283 EXPECT_GT(kExpectedCount + kErrorMargin, iter.second); | 283 EXPECT_GT(kExpectedCount + kErrorMargin, iter.second); |
284 } | 284 } |
285 } | 285 } |
286 | 286 |
287 TEST_F(AsanRuntimeTest, PropagateFeatureSet) { | 287 TEST_F(AsanRuntimeTest, PropagateFeatureSet) { |
288 ASSERT_NO_FATAL_FAILURE( | 288 ASSERT_NO_FATAL_FAILURE( |
289 asan_runtime_.SetUp(current_command_line_.GetCommandLineString())); | 289 asan_runtime_.SetUp(current_command_line_.GetCommandLineString())); |
290 | 290 |
291 AsanFeatureSet valid_feature_sets[] = { | 291 for (uint32_t feature_set = 0; feature_set < ASAN_FEATURE_MAX; |
292 0, | 292 ++feature_set) { |
293 ASAN_FEATURE_ENABLE_LARGE_BLOCK_HEAP, | 293 // Skip feature sets that enable deprecated features. |
294 ASAN_FEATURE_ENABLE_PAGE_PROTECTIONS, | 294 if (feature_set & kAsanDeprecatedFeatures) |
295 ASAN_FEATURE_ENABLE_PAGE_PROTECTIONS | | 295 continue; |
296 ASAN_FEATURE_ENABLE_LARGE_BLOCK_HEAP}; | |
297 | 296 |
298 size_t number_of_valid_features = 0U; | |
299 for (size_t i = 0; i < sizeof(kAsanValidFeatures) * 8; ++i) { | |
300 if ((kAsanDeprecatedFeatures & (1 << i)) != 0U) | |
301 number_of_valid_features++; | |
302 } | |
303 | |
304 EXPECT_EQ(arraysize(valid_feature_sets), 1 << number_of_valid_features); | |
305 | |
306 for (auto feature_set : valid_feature_sets) { | |
307 asan_runtime_.PropagateFeatureSet(feature_set); | 297 asan_runtime_.PropagateFeatureSet(feature_set); |
308 ::common::AsanParameters expected_params = {}; | 298 ::common::AsanParameters expected_params = {}; |
309 ::common::SetDefaultAsanParameters(&expected_params); | 299 ::common::SetDefaultAsanParameters(&expected_params); |
310 expected_params.enable_large_block_heap = | 300 expected_params.enable_large_block_heap = |
311 ((feature_set & ASAN_FEATURE_ENABLE_LARGE_BLOCK_HEAP) != 0U); | 301 ((feature_set & ASAN_FEATURE_ENABLE_LARGE_BLOCK_HEAP) != 0U); |
312 EXPECT_EQ(0U, ::memcmp(&expected_params, &asan_runtime_.params(), | 302 EXPECT_EQ(0U, ::memcmp(&expected_params, &asan_runtime_.params(), |
313 sizeof(::common::AsanParameters))); | 303 sizeof(::common::AsanParameters))); |
314 TestBlockHeapManager* test_block_heap_manager = | 304 TestBlockHeapManager* test_block_heap_manager = |
315 static_cast<TestBlockHeapManager*>(asan_runtime_.heap_manager_.get()); | 305 static_cast<TestBlockHeapManager*>(asan_runtime_.heap_manager_.get()); |
316 EXPECT_EQ(test_block_heap_manager->enable_page_protections_, | 306 EXPECT_EQ(test_block_heap_manager->enable_page_protections_, |
317 ((feature_set & ASAN_FEATURE_ENABLE_PAGE_PROTECTIONS) != 0U)); | 307 ((feature_set & ASAN_FEATURE_ENABLE_PAGE_PROTECTIONS) != 0U)); |
| 308 |
| 309 // Expect the Crashpad bit to always be cleared, as the crash reporter |
| 310 // can't be initialized without a Crashpad server running. |
| 311 EXPECT_EQ(0u, |
| 312 asan_runtime_.GetEnabledFeatureSet() & ASAN_FEATURE_ENABLE_CRASHPAD); |
318 } | 313 } |
319 | 314 |
320 ASSERT_NO_FATAL_FAILURE(asan_runtime_.TearDown()); | 315 ASSERT_NO_FATAL_FAILURE(asan_runtime_.TearDown()); |
321 } | 316 } |
322 | 317 |
323 TEST_F(AsanRuntimeTest, OnErrorSaveEnabledFeatureList) { | 318 TEST_F(AsanRuntimeTest, OnErrorSaveEnabledFeatureList) { |
324 asan_runtime_.params().feature_randomization = true; | 319 asan_runtime_.params().feature_randomization = true; |
325 ASSERT_NO_FATAL_FAILURE( | 320 ASSERT_NO_FATAL_FAILURE( |
326 asan_runtime_.SetUp(current_command_line_.GetCommandLineString())); | 321 asan_runtime_.SetUp(current_command_line_.GetCommandLineString())); |
327 | 322 |
328 // Disable the heap checking as this really slows down the unittests. | 323 // Disable the heap checking as this really slows down the unittests. |
329 asan_runtime_.params().check_heap_on_failure = false; | 324 asan_runtime_.params().check_heap_on_failure = false; |
330 asan_runtime_.SetErrorCallBack(base::Bind(&TestCallback)); | 325 asan_runtime_.SetErrorCallBack(base::Bind(&TestCallback)); |
331 callback_called = false; | 326 callback_called = false; |
332 callback_error_info.feature_set = ASAN_FEATURE_MAX; | 327 callback_error_info.feature_set = ASAN_FEATURE_MAX; |
333 AsanErrorInfo bad_access_info = {}; | 328 AsanErrorInfo bad_access_info = {}; |
334 RtlCaptureContext(&bad_access_info.context); | 329 RtlCaptureContext(&bad_access_info.context); |
335 AsanFeatureSet expected_feature_set = static_cast<AsanFeatureSet>( | 330 AsanFeatureSet expected_feature_set = static_cast<AsanFeatureSet>( |
336 ASAN_FEATURE_ENABLE_LARGE_BLOCK_HEAP); | 331 ASAN_FEATURE_ENABLE_LARGE_BLOCK_HEAP); |
337 asan_runtime_.PropagateFeatureSet(expected_feature_set); | 332 asan_runtime_.PropagateFeatureSet(expected_feature_set); |
338 asan_runtime_.OnError(&bad_access_info); | 333 asan_runtime_.OnError(&bad_access_info); |
339 EXPECT_TRUE(callback_called); | 334 EXPECT_TRUE(callback_called); |
340 EXPECT_EQ(expected_feature_set, callback_error_info.feature_set); | 335 EXPECT_EQ(expected_feature_set, callback_error_info.feature_set); |
341 ASSERT_NO_FATAL_FAILURE(asan_runtime_.TearDown()); | 336 ASSERT_NO_FATAL_FAILURE(asan_runtime_.TearDown()); |
342 } | 337 } |
343 | 338 |
344 } // namespace asan | 339 } // namespace asan |
345 } // namespace agent | 340 } // namespace agent |
OLD | NEW |