| OLD | NEW |
| 1 // Copyright 2014 Google Inc. All Rights Reserved. | 1 // Copyright 2014 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 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 uint32_t size, | 232 uint32_t size, |
| 233 uint32_t min_left_redzone_size, | 233 uint32_t min_left_redzone_size, |
| 234 uint32_t min_right_redzone_size, | 234 uint32_t min_right_redzone_size, |
| 235 BlockLayout* layout) { | 235 BlockLayout* layout) { |
| 236 DCHECK_LE(kShadowRatio, chunk_size); | 236 DCHECK_LE(kShadowRatio, chunk_size); |
| 237 DCHECK(::common::IsPowerOfTwo(chunk_size)); | 237 DCHECK(::common::IsPowerOfTwo(chunk_size)); |
| 238 DCHECK_LE(kShadowRatio, alignment); | 238 DCHECK_LE(kShadowRatio, alignment); |
| 239 DCHECK_GE(chunk_size, alignment); | 239 DCHECK_GE(chunk_size, alignment); |
| 240 DCHECK(::common::IsPowerOfTwo(alignment)); | 240 DCHECK(::common::IsPowerOfTwo(alignment)); |
| 241 | 241 |
| 242 // Prevent from trying to allocate a memory block bigger than what we can |
| 243 // represent in the block header. |
| 244 if (size > kMaxBlockHeaderBodySize) |
| 245 return false; |
| 246 |
| 242 // Calculate minimum redzone sizes that respect the parameters. | 247 // Calculate minimum redzone sizes that respect the parameters. |
| 243 uint32_t left_redzone_size = static_cast<uint32_t>(::common::AlignUp( | 248 uint32_t left_redzone_size = static_cast<uint32_t>(::common::AlignUp( |
| 244 std::max<uint32_t>(min_left_redzone_size, sizeof(BlockHeader)), | 249 std::max<uint32_t>(min_left_redzone_size, sizeof(BlockHeader)), |
| 245 alignment)); | 250 alignment)); |
| 246 uint32_t right_redzone_size = std::max<uint32_t>(min_right_redzone_size, | 251 uint32_t right_redzone_size = std::max<uint32_t>(min_right_redzone_size, |
| 247 sizeof(BlockTrailer)); | 252 sizeof(BlockTrailer)); |
| 248 | 253 |
| 249 // Calculate the total size of the allocation. | 254 // Calculate the total size of the allocation. |
| 250 uint32_t total_size = static_cast<uint32_t>(::common::AlignUp( | 255 uint32_t total_size = static_cast<uint32_t>(::common::AlignUp( |
| 251 left_redzone_size + size + right_redzone_size, chunk_size)); | 256 left_redzone_size + size + right_redzone_size, chunk_size)); |
| (...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 933 void SetOnExceptionCallback(OnExceptionCallback callback) { | 938 void SetOnExceptionCallback(OnExceptionCallback callback) { |
| 934 g_on_exception_callback = callback; | 939 g_on_exception_callback = callback; |
| 935 } | 940 } |
| 936 | 941 |
| 937 void ClearOnExceptionCallback() { | 942 void ClearOnExceptionCallback() { |
| 938 g_on_exception_callback.Reset(); | 943 g_on_exception_callback.Reset(); |
| 939 } | 944 } |
| 940 | 945 |
| 941 } // namespace asan | 946 } // namespace asan |
| 942 } // namespace agent | 947 } // namespace agent |
| OLD | NEW |