Record NODEINFO parsing fix and sanitizer validation
This commit is contained in:
1 parent
99dd48480f
commit
902ffa05b4
1 file changed
+14
-11
+14
-11
@@ -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: по решению пользователя сохранён запрет пересечений. Весь входной набор проверяется
|
||||
|
||||
Reference in new issue
Block a user