From 5c4207c14577a3926583bc730eb96ffcd14336d4 Mon Sep 17 00:00:00 2001 From: evgeny Date: Sat, 24 Oct 2026 14:00:22 +0200 Subject: [PATCH] Keep resolved routing audit details out of the task backlog --- doc/tasks.md | 37 ------------------------------------- tests/test_node_snapshot.c | 2 +- 2 files changed, 1 insertion(+), 38 deletions(-) diff --git a/doc/tasks.md b/doc/tasks.md index 0bbfbaf1..be8d3ef0 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -4,43 +4,6 @@ ## Текущие задачи -[ ] **Routing: ограничить длину результата topo_node_format_all при усечении**. - 24.10.2026, аудит topo_node: при buf_size=1/2/5/12/13 функция возвращает 13, хотя записаны - соответственно 0/1/4/11/12 байт. Причина — snprintf возвращает требуемую длину маркера, - а код прибавляет её к pos как фактически записанную. FMT_ADD также продолжает наращивать - pos после усечения внутри одного узла, формируя указатели за пределами заявленного буфера. - control_server использует возвращённую длину для text[text_len] и копирования; его текущий - буфер существенно больше 13 байт, сбой рабочего control-вызова этим опытом не установлен. - План: поддерживать pos <= buf_size-1, завершать добавление при заполнении, ограничить маркер - оставшимся местом и возвращать фактическую длину; проверить маленькие буферы и усечение внутри узла/пути. - Воспроизведение: /tmp/topo-node-format-audit.c; лог: /tmp/topo-node-format-audit.log (5 неверных длин из 9 размеров). - Дальнейший аудит остановлен по AGENTS.md; код форматирования и документы модулей не менялись. - -[+] **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: по решению пользователя сохранён запрет пересечений. Весь входной набор проверяется - до изменения таблицы, включая внутренние конфликты; /0..32, нормализация host-битов, отказ атомарный. - Поиск упрощён для непересекающихся диапазонов; добавлены проверки /0, /31, /32 и границ. - Новые проверки на старой библиотеке: 5/8 PASS; после исправления: 8/8 PASS, IPv6: 11/11 PASS. - Убрано объявление несуществующей route_add_local_subnet; исправлены wire/API route_ping и - описание выбора сокетов, TCP/UDP-проб, отмены и владения в заголовках routing helpers. - Полный check.sh: 184/184 PASS, proxy 9/9, burst 1/1, load 8/8 (134217728 байт), 196с. - Лог: /tmp/routing-audit-full-check.log; результаты аудита: /tmp/routing-doc-audit-report.txt. - [ ] **ETCP: полезная утилизация нескольких каналов и доставка при зависании части линков** — общая задача открыта. 24.10.2026: тесты отдельно проверяют обработку RTO (опоздание<=20мс), ожидание готового повтора (<=100мс) и доставку сверх заданной задержки канала (<=100мс). TX учитывается после принятия send. diff --git a/tests/test_node_snapshot.c b/tests/test_node_snapshot.c index c2f7652c..f54878b3 100644 --- a/tests/test_node_snapshot.c +++ b/tests/test_node_snapshot.c @@ -63,7 +63,6 @@ static void test_zero_port_schema(void) { sqlite3_close(db); } -/* Новый wire и SQL сохраняют адреса, протоколы, классификацию и REALITY; смена формата оставляет bootstrap. */ /* Отказ INSERT/UPDATE не должен выглядеть успешным сохранением уже проверенного узла. */ static void test_verified_write(void) { sqlite3* db = NULL; uint8_t key[32] = {1}; @@ -90,6 +89,7 @@ static void test_verified_write(void) { DEBUG_INFO(DEBUG_CATEGORY_BGP, "[PASS] verified node writes: insert/update, rejected writes, prepare failure and stored state"); } +/* Новый wire и SQL сохраняют адреса, протоколы, классификацию и REALITY; смена формата оставляет bootstrap. */ static void test_compact_addresses(struct UTUN_INSTANCE *inst) { test_zero_port_schema(); sqlite3 *saved_db = inst->topo_sqlite_db;