-
Notifications
You must be signed in to change notification settings - Fork 738
Description
На разных базах иногда сталкивались с потенциальным use-after-free сценарием, здесь собрана вся фактура:
- Сначала обнаружилось на /ru/market_billing/prod/market-billing 11 сентября:
Crash dump kqp_opt_hash_func_propagate_transformer.cpp #24701 - подозрение пало на hash propagate transformer, его отключили, но
повторилось в другом кейсе:
https://st.yandex-team.ru/KIKIMR-24094
Для этого кейса я сделал репро в ut, но проблема в ut не воспроизвелась:
[NOT FOR MERGE] Added repro for use after free potential bug #26853
При этом на preprod в market-billing падение воспроизводится
Решили временно решить проблему, заменив verify на ensure, но теперь начало падать в других местах:
#26433
#26434
-
Приехал еще один core dump:
stable-25-3-1: coredump 3NYql::(anonymous namespace)::TGcNodeTransformer::DoTransform #27093 -
С похожей проблемой столкнулся Никита и у него есть конкретные подозрения:
Nikita Vasilev, [27 Nov 2025 at 16:30:24]:
Привет!
Можешь, пожалуйста, подсказать, правильно ли я вижу тут баг или нет.
Вот здесь в TGcNodeTransformer используется GetHashAbove() для поиска в UniqueNodes. Этот хэш может быть нулевым, т.к. может быть просто не установлен.
https://a.yandex-team.ru/arcadia/yql/essentials/core/yql_gc_transformer.cpp?rev=tags%2Freleases%2Fydb%2Fstable-25-3-1-16#L28
При этом для заполнения UniqueNodes используется hash из функции https://a.yandex-team.ru/arcadia/yql/essentials/core/yql_expr_csee.cpp?rev=r18126538#L554 . Он не может быть нулевым никак https://a.yandex-team.ru/arcadia/yql/essentials/core/yql_expr_csee.cpp?rev=r18126538#L210 .
Правильно я понимаю, что надо бы вместо использования GetHashAbove в TGcNodeTransformer считать хэш через CalcHash? Или там именно Above почему-то нужен?
Сейчас, собственно, столкнулись с падением по верифайке, из-за того, что хэш нулевой
https://st.yandex-team.ru/KIKIMR-24374
(Если бы он был не нулевой, то все бы проверили вот здесь https://a.yandex-team.ru/arcadia/yql/essentials/core/yql_gc_transformer.cpp?rev=tags%2Freleases%2Fydb%2Fstable-25-3-1-16#L32 и не упали, а просто кинули INTERNAL_ERROR )
Запрос тоже в тикет прикрепил, но он там какой-то гигантский с миллионом join. Вообще не понимаю, как его упростить можно
Связанный тикет: https://st.yandex-team.ru/KIKIMR-24374