Record parser boundary, rollback and sanitizer audit evidence
This commit is contained in:
1 parent
7ea1fa9954
commit
d681d5abf0
1 file changed
+53
@@ -0,0 +1,53 @@
|
||||
Аудит config_parser — 26.10.2026
|
||||
|
||||
Полностью прочитаны config_parser.c/.h, config_parser_doc.md и общий config_ini.h.
|
||||
Для согласования строгого разбора также повторно сверены config_updater.c/.h/_doc.md.
|
||||
Разбор сохраняет модель и владение free_config; запуск ресурсов остаётся у instance.
|
||||
|
||||
Исправления
|
||||
- IPv6 /32 больше не подменяется /128; префиксы проверяются до сужения к uint8_t.
|
||||
Control allow=/0 задаёт нулевую маску без сдвига на 32; IPv6 control allow отклоняется.
|
||||
- Ошибки известных обработчиков и выделения памяти отклоняют всю модель.
|
||||
Все частичные списки освобождаются, включая client links и не завершённую секцию.
|
||||
- Числа проверяются целиком до преобразования: знаки, хвост, диапазон и overflow.
|
||||
Keepalive interval помещается в uint16_t; таймеры ограничены до умножения.
|
||||
Bool унифицирован: 0/1, no/yes, false/true. Версия — ровно три десятичных октета.
|
||||
- Адресные порты проверяются как decimal 0..65535, SOCKS — 1..65535.
|
||||
Control ip/port даёт одинаковый результат в обоих порядках; ошибки getaddrinfo не теряются.
|
||||
- Storage sizes проверяют UINT64_MAX, множитель M/G и полный хвост; -1 не становится безлимитом,
|
||||
переполнение не становится нулевым лимитом. Слишком длинные строковые настройки отклоняются.
|
||||
- Network ID ограничен 56 битами; требуются оба 32-byte HEX ключа.
|
||||
Предоставленные ключи идентичности/пиров проверяются целиком; пустые необязательные остаются незаданными.
|
||||
- CFG_CLIENT_LINK сохраняет имя local_srv. Повторный обычный addr сбрасывает режим dynamic IPv6.
|
||||
- Флаг tcp_proxy_client enabled=no не включается снова следующей опцией той же секции.
|
||||
Наличие service-секции задаёт её default enable и при отсутствии опций.
|
||||
- Print_config не печатает private/signing keys; Networks выведены за пределы firewall-цикла.
|
||||
Устаревший append ключей проверяет вход, запись и fclose; не объявляется атомарным updater.
|
||||
- Updater выбирает итоговую идентичность/REALITY по последнему вхождению, но исправляет также
|
||||
синтаксически плохие ранние дубли выбранными значениями. Из-за такого дубля ключи не генерируются заново.
|
||||
Это нужно, поскольку строгий парсер проверяет каждое вхождение. Булевы REALITY enabled согласованы.
|
||||
|
||||
Контракты и ограничения
|
||||
Обновлены заголовок и документ: порядок списков, необъединяемые named-секции, remote-only links,
|
||||
синхронный DNS и первый getaddrinfo-адрес, Windows socket init, default-значения и границы,
|
||||
повторные опции, поведение неизвестных секций/debug/gui и независимость parser/updater/start.
|
||||
Bootstrap invite printer использует конфигурационные адреса и нулевые channel_id/join_key;
|
||||
это не снимок фактических bind/NAT-адресов и не invite конкретного канала.
|
||||
Нативные сборки/runtime Windows и FreeBSD в этом этапе не выполнялись.
|
||||
|
||||
Проверки
|
||||
- Профиль 6/6 PASS: config_parser, config_updater, config_debug, reality_config, ncd_config, services.
|
||||
- Test_config_parser: 53 ошибочных конфигурации отвергнуты одинаково из файла/буфера;
|
||||
10 отказов аллокаций с полным rollback, IPv4/IPv6 CIDR и control order, предельные размеры/порты,
|
||||
скрытие секретов и /dev/full при append; баланс памяти сохранён.
|
||||
- ASAN/UBSan/LSan: те же 6/6 PASS с detect_leaks=1/ halt_on_error=1.
|
||||
Все встроенные lib/src/Opus инструментированы согласованно в отдельной копии
|
||||
/tmp/utun-config-instance-asan-20261026; рабочие объекты не смешивались с sanitizer-объектами.
|
||||
Первый updater sanitizer-прогон обнаружил обход test mock через glibc __fread_chk;
|
||||
checked wrapper добавлен, повторный прогон всех файловых и allocation faults PASS.
|
||||
- Логи: /tmp/config-parser-audit-contract.log, /tmp/config-parser-audit-updater.log,
|
||||
/tmp/config-parser-audit-debug.log, /tmp/config-parser-audit-reality.log,
|
||||
/tmp/config-parser-audit-ncd.log, /tmp/config-parser-audit-services.log.
|
||||
Санитайзеры: соответствующие /tmp/config-parser-audit-asan-*.log,
|
||||
сборка /tmp/config-parser-audit-asan-build.log и /tmp/config-parser-audit-asan-tests-build.log.
|
||||
Общая сборка: /tmp/config-instance-audit-full-build.log.
|
||||
Reference in new issue
Block a user