Record packet dump fix and FreeBSD socket monitor finding
This commit is contained in:
1 parent
ce30ec5fe6
commit
dd81f7a665
2 files changed
+24
-14
No files matched your search
+21
-13
@@ -4,19 +4,27 @@
|
||||
|
||||
## Текущие задачи
|
||||
|
||||
[ ] **packet_dump: ограничить чтение входного IPv4-пакета** — найдено статической сверкой 25.10.2026.
|
||||
В `src/transport_layer/packet_dump.c` все три ветки hex-дампа читают 32 байта после IHL,
|
||||
не учитывая остаток len. Это затрагивает также распознанные TCP/UDP/ICMP-пакеты;
|
||||
ограничение snprintf относится только к выходу и не защищает входные чтения.
|
||||
Вызовы: `tun_if.c` (категория tun/debug), `routing_layer/routing.c` (traffic/debug).
|
||||
Документ ошибочно представлял выход за границу как допустимый компромисс для неизвестных протоколов;
|
||||
это описание исправлено, предупреждение добавлено в .h. Код пока не менялся.
|
||||
Предлагаемое исправление: единый ограниченный hex-цикл по доступным байтам, проверка NULL,
|
||||
IHL >=20 и IPv4 total length; адреса читать побайтно без невыравненных uint32_t-приведений.
|
||||
При разборе учитывать смещение IP-фрагмента, чтобы не выдавать его данные за транспортный заголовок.
|
||||
Проверить короткие/усечённые пакеты и корректные TCP/UDP/ICMP/прочие протоколы под ASAN/UBSan;
|
||||
затем согласовать окончательный контракт .h/документа. Runtime-воспроизведение не выполнялось.
|
||||
Аудит остановлен по AGENTS.md:10; packet_dump.h и packet_dump_doc.md проверены частично.
|
||||
[ ] **socket_monitor: исправить FreeBSD-разбор уведомлений адреса** — найдено статической сверкой 25.10.2026.
|
||||
В `src/transport_layer/socket_monitor.c:329` обработчик RTM_NEWADDR/RTM_DELADDR вызывает
|
||||
`bsd_parse_rtm(..., NULL, 0, ...)`, а разборщик на строке272 безусловно выполняет `gw[0]='\0'`.
|
||||
Получение такого уведомления ведёт к записи по NULL до разбора атрибутов; Linux-ветка этот код не исполняет.
|
||||
Нужно согласовать обязательность выходов разборщика, проверять отсутствие/размер каждого выходного буфера
|
||||
и проверить корректность заголовков/границ всех FreeBSD-уведомлений по актуальным определениям ОС.
|
||||
При ошибке выдавать понятную диагностику socket/warn; проверить изменение/удаление адреса на FreeBSD.
|
||||
Код не исправлялся, runtime-проверка FreeBSD не выполнялась. Аудит остановлен по AGENTS.md:10;
|
||||
socket_monitor.h остаётся частично проверенным, остальные ветки lifecycle ещё требуют отдельной проверки.
|
||||
|
||||
[+] **packet_dump: ограничить чтение входного IPv4-пакета** — исправлено 25.10.2026 по указанию пользователя.
|
||||
Единый hex-цикл читает min(32, total length-IHL) байт; проверяются NULL/version/IHL/total length,
|
||||
хвост после total length игнорируется. Адреса читаются побайтно; последующие IP-фрагменты
|
||||
не выдаются за транспортный заголовок. Исправлены обрезание полного набора TCP-флагов и вывод нулевого порта.
|
||||
Ошибки входа отражаются в строке и логируются в dump/warn, частичный первый фрагмент — dump/debug.
|
||||
Прежний тест не вызывал модуль; теперь проверяет реальный форматтер: протоколы, поля, фрагменты,
|
||||
77 длин захвата, невыровненный вход, сохранность входа и точный hex в2904 случаях.
|
||||
Контракты .h/документа согласованы. Код235c2c4f, тестыc3fa6d4d; rebase на e035f53a без конфликтов.
|
||||
Обычная сборка PASS; полный check.sh после rebase:190/190 PASS,0 skipped,
|
||||
proxy9/9,burst1/1,load8/8 PASS,134217728 байт,214с. Санитайзер-проверка пока выполняется.
|
||||
Логи: /tmp/packet-dump-fix-test.log, /tmp/packet-dump-fix-full-check.log.
|
||||
|
||||
[+] **member_files: сверить контракты и исправить ошибки владения/повторов** — завершено 24.10.2026.
|
||||
Прочитаны все6 реализаций и6 заголовков C-модуля. Исправлены удаление чужого temp,
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
/* socket_monitor — наблюдение за адресами интерфейсов и маршрутами ОС для ETCP-сокетов.
|
||||
* init подключает уведомления ОС к uasync экземпляра; изменения обновляют interface_addr и сетевое состояние.
|
||||
* auto_socket отдельно создаёт/удаляет сокеты. destroy отключает наблюдение до освобождения экземпляра.
|
||||
* Публичные операции и изменения ETCP_SOCKET — в потоке uasync. */
|
||||
* Публичные операции и изменения ETCP_SOCKET — в потоке uasync.
|
||||
* Аудит не завершён: FreeBSD-ветка обработки адреса передаёт NULL в bsd_parse_rtm,
|
||||
* который без проверки пишет gw[0]; требуется исправление (см. doc/tasks.md). */
|
||||
#ifndef SOCKET_MONITOR_H
|
||||
#define SOCKET_MONITOR_H
|
||||
|
||||
|
||||
Reference in new issue
Block a user