diff options
author | sharpeye <sharpeye@yandex-team.ru> | 2022-04-18 18:40:19 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-04-18 18:40:19 +0300 |
commit | df455b910e1d049369547fe5c4e83417eb7a73a1 (patch) | |
tree | 4786c589e5f78888154b0a43b40cd5bd70ba493f /util/system/atomic_gcc.h | |
parent | f726434f721abdb4097e50dfa280a5396bbaec51 (diff) | |
download | ydb-df455b910e1d049369547fe5c4e83417eb7a73a1.tar.gz |
[merge to stable-22-2] Fix a segfault in debug mode when the allocated memory accidentally contains 0xF0000000
Наш сервис при сборке с `ALLOCATOR(LF_DBG)` на старте падает [в этой строчке](https://a.yandex-team.ru/arc_vcs/commit/r7923656#file-library/cpp/lfalloc/lf_allocX64.h:R1901) при попытке разыменовать очевидно невалидный указатель. В gdb видно, что мы при попытке определить координаты фиктивного заголовка в `GetAllocHeader()` прочитали какие-то левые 32 бита в качестве `header->Tag`, и они по стечению обстоятельств оказались равны `0xF0000000` в нашем случае (просто не повезло). После этого мы решаем, что в `header->Size` лежит настоящий указатель на заголовок, хотя на самом деле там лежит тоже что-то рандомное.
Решение, вроде бы, простое — когда формируем фиктивный заголовок, надо не обращать внимания на теги (потому что к этому моменту их ещё некому было записать).
REVIEW: 2408267
REVIEW: 2438642
x-ydb-stable-ref: 02ccf11b927a06e81b968e8b45c287957b8e1d60
Diffstat (limited to 'util/system/atomic_gcc.h')
0 files changed, 0 insertions, 0 deletions