From 902ffa05b48c59f2248e7a5100e54c746a4a9d5b Mon Sep 17 00:00:00 2001 From: evgeny Date: Sat, 24 Oct 2026 13:21:42 +0200 Subject: [PATCH] Record NODEINFO parsing fix and sanitizer validation --- doc/tasks.md | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/doc/tasks.md b/doc/tasks.md index 5c2f3e21..d6749b98 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -4,17 +4,20 @@ ## Текущие задачи -[ ] **Routing: согласовать обход секции подсетей в topo_node_deserialize с wire-размером**. - 24.10.2026, продолжение аудита: при flags=0, local_v4_subnets=1, hop_count=1 размер равен header+8, - но ветка без TOPO_FLAG_SEND_SUBNETS сдвигает dp ещё на 5 байт. Копирование hop-list читает за len. - Воспроизведение на собранной библиотеке: заданный hop 11 11 11 11 11 11 11 11 превращается в - 11 11 11 aa aa aa aa aa; пять aa находятся после переданной длины. deserialize возвращает 0. - Причина: topo_node_dyn_size не включает подсети без флага, а deserialize всё равно пропускает их. - Нужно согласовать serializer/размер/parser: при снятом флаге секции на wire нет; счётчики должны - быть нулевыми либо явно игнорироваться без сдвига. При установленном флаге обход секции не должен - зависеть от наличия out_subnets. Добавить регрессии границ буфера и обоих режимов out_subnets. - Дальнейший аудит остановлен по AGENTS.md; parser не менялся. - Воспроизведение: /tmp/routing-audit-deserialize-repro.c; лог: /tmp/routing-audit-deserialize-repro.log. +[+] **Routing: согласовать обход секции подсетей в topo_node_deserialize с wire-размером**. + 24.10.2026: ручная упаковка/разбор доработаны без lib/serialize. Без TOPO_FLAG_SEND_SUBNETS + счётчики подсетей равны 0; противоречащий заголовок отклоняется до выделения объектов. + Все присутствующие секции проверяются независимо от out_*; hop-list читается после подсетей. + Выходы независимы, выдаются атомарно; пустые секции/ошибки возвращают NULL/0. Частичные списки, + имя, подсети и hops освобождаются при любом отказе. Уточнены .h и документы формата. + Новая регрессия воспроизводит приём некорректного пакета до исправления; после — PASS: + 64 сочетания флагов/выходов, все усечения и лишний хвост, IPv4/IPv6-префиксы, 18 отказов памяти. + BGP-проверка сохраняет прежние запись и маршрут при некорректном NODEINFO; REALITY fixture + передаёт контекст ядра и освобождает результат. Полный check.sh: 185/185 PASS, proxy 9/9, + burst 1/1, load 8/8 (134217728 байт), 163с. Лог: /tmp/node-wire-full-check-final.log. + Шесть целевых наборов ASAN/UBSan/LSan (wire, snapshot, group_exchange, bgp_paths, NCD, REALITY) + проходят с detect_leaks=1. Зависимости пересобраны с sanitizer-флагами в отдельной копии /tmp; + штатный override флагов Opus снят только в этой копии. Лог: /tmp/node-wire-asan-results.log. [+] **Routing: запретить пересекающиеся IPv4-подсети при вставке route_lib**. 24.10.2026: по решению пользователя сохранён запрет пересечений. Весь входной набор проверяется