From 5a7823e6ef07e23869325a3adbf2d4d1279cfdbd Mon Sep 17 00:00:00 2001 From: evgeny Date: Sat, 24 Oct 2026 00:46:40 +0200 Subject: [PATCH] Record streaming signature OOM defect and completed temp fix --- doc/tasks.md | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/doc/tasks.md b/doc/tasks.md index c91cc90b..b40afeb6 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -67,14 +67,25 @@ Логи: /tmp/etcp-attempts-matrix.log, /tmp/etcp-attempts-asan-test_*.log, /tmp/etcp-oom-reinit-asan-test_*.log, /tmp/etcp-abort-encrypted-recovery.log. -[ ] **Media: очистка кеша удаляет временный файл активной загрузки** — подтверждено 23.10.2026: - test_encrypted_attachment зависает в phase=3: orphan_walk_cb удаляет .uenc.tmp., - следующий BLOCK_CHUNK получает ENOENT и завершает загрузку с ошибкой. - chat_media_cache_cleanup_orphans защищает cipher_path и старое имя .part, но не фактический temp загрузки. - Нужна защита файлов, которыми владеют активные media_delivery/download, через их реестр владения; - проверять по фактическим путям, без угадывания суффикса. ETCP REINIT в воспроизведении отсутствует. - Лог: /tmp/utun_encrypted_attachment_HwkBUM/test.log (удаление → отказ записи), - /tmp/etcp-oom-reinit-full-check.log; профильные OOM/ETCP sanitizer-тесты проходят. +[ ] **Crypto: повторное освобождение ключа после отказа инициализации потоковой подписи** — подтверждено 24.10.2026: + sc_stream_sign_init и sc_stream_sign_verify_init при отказе EVP_MD_CTX_new освобождают state->pkey, + но оставляют указатель в state; последующий sc_stream_sign_cleanup освобождает его повторно. + Та же незавершённая очистка есть при отказе EVP_DigestInit_ex. Активное состояние перед повторным init + также требует явного контракта: текущий memset теряет ссылки на его ресурсы. + Привести состояния после отказов к безопасному cleanup, определить контракт повторного init в .h, + добавить инъекции отказов выделения/инициализации и проверки cleanup/final/verify с ASAN/UBSan. + Временное воспроизведение на штатной libutun.a: два отказа EVP_MD_CTX_new, два повторных free; + диагностический wrapper фиксирует и подавляет второй free. Лог: /tmp/sc-sign-init-oom-repro.log, + исходник: /tmp/sc-sign-init-oom-repro.c. Исполняемый код проекта в этой проверке не менялся. + +[+] **Media: очистка кеша удаляла временный файл активной загрузки** — исправлено 24.10.2026: + file_io хранит общий защищённый mutex реестр владельцев temp по фактическим нормализованным путям. + Владение сохраняется от создания до publish/discard, включая интервал после finish; очистка кеша + проверяет владение и удаляет сироту под тем же mutex. Угадывание суффиксов не используется. + Регрессии проверяют открытый/закрытый temp, барьеры создания/finish и очистку после реального BLOCK_CHUNK. + Полный check.sh: 184/184, proxy9/9, burst1/1, load8/8 PASS; пять профильных тестов ASAN/UBSan PASS, + test_encrypted_attachment дополнительно повторён пять раз без отказов. + Логи: /tmp/media-orphan-full-check.log, /tmp/media-orphan-asan-*.log, /tmp/media-orphan-repeat-*.log. [+] **ETCP: входящий INIT сохранял устаревший признак обратной достижимости** — исправлено 23.10.2026: Принятый INIT обновляет RX и remote_keepalive до переиспользования буфера для ответа; flag_up=0 снимает ложный UP.