Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome_elf/blacklist/blacklist.h" | 5 #include "chrome_elf/blacklist/blacklist.h" |
| 6 | 6 |
| 7 #include <assert.h> | 7 #include <assert.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 | 9 |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 80 return ::RegSetValueEx(*key, | 80 return ::RegSetValueEx(*key, |
| 81 property, | 81 property, |
| 82 0, | 82 0, |
| 83 REG_DWORD, | 83 REG_DWORD, |
| 84 reinterpret_cast<LPBYTE>(&value), | 84 reinterpret_cast<LPBYTE>(&value), |
| 85 sizeof(value)); | 85 sizeof(value)); |
| 86 } | 86 } |
| 87 | 87 |
| 88 bool GenerateStateFromBeaconAndAttemptCount(HKEY* key, DWORD blacklist_state) { | 88 bool GenerateStateFromBeaconAndAttemptCount(HKEY* key, DWORD blacklist_state) { |
| 89 LONG result = 0; | 89 LONG result = 0; |
| 90 if (blacklist_state == blacklist::BLACKLIST_SETUP_RUNNING) { | 90 if (blacklist_state == blacklist::BLACKLIST_ENABLED) { |
|
robertshield
2014/08/25 13:40:18
previously, BLACKLIST_STATE_FAILED would hit this
| |
| 91 // If the blacklist succeeded on the previous run reset the failure | |
| 92 // counter. | |
| 93 return (SetDWValue(key, | |
| 94 blacklist::kBeaconAttemptCount, | |
| 95 static_cast<DWORD>(0)) == ERROR_SUCCESS); | |
| 96 } else { | |
| 91 // Some part of the blacklist setup failed last time. If this has occured | 97 // Some part of the blacklist setup failed last time. If this has occured |
| 92 // blacklist::kBeaconMaxAttempts times in a row we switch the state to | 98 // blacklist::kBeaconMaxAttempts times in a row we switch the state to |
| 93 // failed and skip setting up the blacklist. | 99 // failed and skip setting up the blacklist. |
| 94 DWORD attempt_count = 0; | 100 DWORD attempt_count = 0; |
| 95 DWORD attempt_count_size = sizeof(attempt_count); | 101 DWORD attempt_count_size = sizeof(attempt_count); |
| 96 result = ::RegQueryValueEx(*key, | 102 result = ::RegQueryValueEx(*key, |
| 97 blacklist::kBeaconAttemptCount, | 103 blacklist::kBeaconAttemptCount, |
| 98 0, | 104 0, |
| 99 NULL, | 105 NULL, |
| 100 reinterpret_cast<LPBYTE>(&attempt_count), | 106 reinterpret_cast<LPBYTE>(&attempt_count), |
| 101 &attempt_count_size); | 107 &attempt_count_size); |
| 102 | 108 |
| 103 if (result == ERROR_FILE_NOT_FOUND) | 109 if (result == ERROR_FILE_NOT_FOUND) |
| 104 attempt_count = 0; | 110 attempt_count = 0; |
| 105 else if (result != ERROR_SUCCESS) | 111 else if (result != ERROR_SUCCESS) |
| 106 return false; | 112 return false; |
| 107 | 113 |
| 108 ++attempt_count; | 114 ++attempt_count; |
| 109 SetDWValue(key, blacklist::kBeaconAttemptCount, attempt_count); | 115 SetDWValue(key, blacklist::kBeaconAttemptCount, attempt_count); |
| 110 | 116 |
| 111 if (attempt_count >= blacklist::kBeaconMaxAttempts) { | 117 if (attempt_count >= blacklist::kBeaconMaxAttempts) { |
| 112 blacklist_state = blacklist::BLACKLIST_SETUP_FAILED; | 118 blacklist_state = blacklist::BLACKLIST_SETUP_FAILED; |
| 113 SetDWValue(key, blacklist::kBeaconState, blacklist_state); | 119 SetDWValue(key, blacklist::kBeaconState, blacklist_state); |
| 114 return false; | |
| 115 } | 120 } |
| 116 } else if (blacklist_state == blacklist::BLACKLIST_ENABLED) { | 121 |
| 117 // If the blacklist succeeded on the previous run reset the failure | 122 return false; |
| 118 // counter. | |
| 119 result = | |
| 120 SetDWValue(key, blacklist::kBeaconAttemptCount, static_cast<DWORD>(0)); | |
| 121 if (result != ERROR_SUCCESS) { | |
| 122 return false; | |
| 123 } | |
| 124 } | 123 } |
| 125 return true; | |
| 126 } | 124 } |
| 127 | 125 |
| 128 } // namespace | 126 } // namespace |
| 129 | 127 |
| 130 namespace blacklist { | 128 namespace blacklist { |
| 131 | 129 |
| 132 #if defined(_WIN64) | 130 #if defined(_WIN64) |
| 133 // Allocate storage for the pointer to the old NtMapViewOfSectionFunction. | 131 // Allocate storage for the pointer to the old NtMapViewOfSectionFunction. |
| 134 #pragma section(".oldntmap",write,read) | 132 #pragma section(".oldntmap",write,read) |
| 135 __declspec(allocate(".oldntmap")) | 133 __declspec(allocate(".oldntmap")) |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 435 break; | 433 break; |
| 436 value_buffer[value_len - 1] = L'\0'; | 434 value_buffer[value_len - 1] = L'\0'; |
| 437 AddDllToBlacklist(&value_buffer[0]); | 435 AddDllToBlacklist(&value_buffer[0]); |
| 438 } | 436 } |
| 439 | 437 |
| 440 ::RegCloseKey(key); | 438 ::RegCloseKey(key); |
| 441 return; | 439 return; |
| 442 } | 440 } |
| 443 | 441 |
| 444 } // namespace blacklist | 442 } // namespace blacklist |
| OLD | NEW |