Record confirmed attachment key bind failure and pause chat audit

This commit is contained in:
evgeny committed 2026-10-26 21:31:00 +01:00
1 parent e33d51a34a
commit d877e8881c
2 files changed
+77 -1

No files matched your search

+66 -1
View File
@@ -11,7 +11,9 @@ Chat: исправление приглашений и проверка конт
Проверки и отдельное падение member_files worker с сохранённым core описаны в конце отчёта.
По отдельному поручению пользователя дефект worker также исправлен и проверен;
результаты и отрицательный контроль на прежнем коде приведены ниже.
После rebase на bc623f23 используется общее исправление отмены из origin;итоговый контракт — в последнем разделе.
После rebase на bc623f23 используется общее исправление отмены из origin;итоговый контракт — в разделе rebase ниже.
Продолжение26.10.2026 от1899b7f8:начата сверка chat_attachment;подтверждён отказ сохранения ключа
до worker при непроверенном SQL bind. Новый результат и граница остановки — в конце отчёта.
Реализация
@@ -334,3 +336,66 @@ JOIN дополнительно50/50 PASS. git diff --check PASS;runtime admin
Логи /tmp/admin-worker-rebase-{build,asan-build,asan-tests-build,native-results,asan-results,
join-repeat}.log и /tmp/admin-worker-rebase-{native,asan}-test_*.log.
Полный check после этого rebase не повторялся;приведённые207/207 относятся к базе до rebase.
Продолжение chat_attachment — 26.10.2026, база1899b7f8
Начата сверка chat_attachment.h с chat_attachment.c. Подробно проверен путь send:
валидация → запись attachment_keys → настоящий crypto worker → media_index →
chat_attachment_bind → db_sync/MSG_SUBMITTED. Сверены передача source, синхронный отказ
media_async_submit, completion и quiesce/destroy. Полный аудит остальных операций модуля
и каталога chat не завершён; обработка входящих запросов/решений этим результатом не закрывается.
chat_attachment.h[ ]→[~];doc/encrypted_attachments.md[V]→[~],поскольку обещание ключа до
шифрования не выполняется при подтверждённом SQL-отказе. Другие отметки не меняются.
Подтверждённый дефект: worker запускается без сохранённого авторского ключа
chat_attachment_send,chat_attachment.c:211–220,не проверяет результаты восьми bind.
Четвёртый параметр INSERT — key; схема разрешает NULL для получателя без доступа.
Отказ sqlite3_bind_blob(...,4,...) оставляет параметр непривязанным. INSERT завершается
SQLITE_DONE со строкой key=NULL. ak_step проверяет только step и игнорирует finalize.
Затем send пишет «key saved before encryption»,передаёт задачу media_async и возвращает0.
Временный локальный стенд /tmp/chat-attachment-audit.c/.mk использует настоящее ядро,
chat_service,созданный штатным API канал,SQLite на диске,OpenSSL и media_async workers.
GNU ld wrapper возвращает ровно один SQLITE_NOMEM до реального bind ключа отправки;
все остальные вызовы проходят без подмены. Это fault injection API,а не исчерпание heap.
Собственные временные файлы и ключи;сетевой обмен/защита router этим стендом не проверялись.
В лог выводятся только длина ключа,результаты и пути,без секретных байтов.
До первого poll независимый SELECT показывает состояние строки при autocommit=1.
Случай send key bytes message_id MSG_SUBMITTED Исходник
Без отказа 0 32 есть 1/success удалён
Отказ bind ключа 0 0 NULL 1/failure удалён
Повтор без отказа 0 32 есть 1/success удалён
0 key bytes означает SQL NULL. Во всех случаях настоящий worker создаёт контейнер172 байта
и открытую копию22 байта. При отказе ключ существует только в памяти задачи и очищается
после worker. Поздний chat_attachment_bind требует key IS NOT NULL и блокирует публикацию;
ложного успешного MSG_SUBMITTED нет. Эта проверка сохраняет историю от сообщения без ключа,
но не исправляет раннюю передачу source,потерю ключа и ложный лог сохранения.
После ошибки до stop остаются строка без ключа,контейнер и открытая копия;в данном запуске
штатный destroy удалил одну неопубликованную подготовку. Полную потерю содержимого не заявляем:
до cleanup открытая копия существует. Crash/restart и SQL-отказы cleanup не проверялись.
Сборка стенда через tests/Makefile и libutun.a PASS. Финальный запуск ожидаемо exit1:
defects1,bind_hits1,allocations0->0;два положительных контроля и одна точечная инъекция.
Первый запуск sandbox остановился до создания instance из-за запрещённого netlink-сокета;
диагностика выполнена повторно вне sandbox. Ошибка первого build стенда — отсутствующее
объявление mkdtemp — устранена только в /tmp. Рабочие исходники и флаги сборки не менялись.
Логи /tmp/chat-attachment-audit-build.log и /tmp/chat-attachment-audit.log;
финальные данные /tmp/utun_chat_attachment_audit_5H8o7G.
Предлагаемое исправление
До передачи source/worker проверять каждый prepare/bind/step/finalize и commit короткого
savepoint;ошибку откатывать,логировать стадию/код без ключа. Для обещания durable записи
явно согласовать запрет внешней SQL-транзакции,как в импорте admin. Worker и сообщение
«ключ сохранён» допустимы только после подтверждённого commit. Отдельная локальная таблица
получателя по-прежнему должна разрешать NULL-ключ до одобрения автора.
Постоянные регрессии:все SQL-отказы подготовки/commit,отсутствие строки/worker/новых файлов
при отказе,сохранение source и прежних записей,повтор после отказа,штатная публикация.
Остальные потребители ak_step и их SQL-контракты требуют отдельной сверки до закрытия модуля.
Изменены только комментарии/документация/задача;runtime,wire и штатные тесты не менялись.
Новый fullcheck и sanitizers не запускались. По AGENTS.md:10 аудит остановлен на подтверждённом
дефекте;задача открыта в doc/tasks.md. Исправление runtime и push не выполнялись.
+11
View File
@@ -4,6 +4,17 @@
## Текущие задачи
[ ] **chat_attachment: проверять сохранение ключа до передачи source и запуска worker** — подтверждено26.10.2026.
send не проверяет bind ключа;при SQLITE_NOMEM INSERT сохраняет key=NULL,но пишет «key saved»,
возвращает0 и запускает настоящий crypto worker. Контейнер создан,source удалён;публикация затем
правильно блокируется chat_attachment_bind и выдаёт один MSG_SUBMITTED/failure.
Локальный стенд с настоящими core/chat_service/SQLite/workers:контроли до/после PASS,
при точечном отказе key bytes0/autocommit1,defects1,bind_hits1,allocations0->0,ожидаемый exit1.
Требуется проверенный SQL commit до worker,rollback/сохранение source при отказе и регрессии SQL/fault/retry.
Логи /tmp/chat-attachment-audit-build.log и /tmp/chat-attachment-audit.log;стенд /tmp/chat-attachment-audit.c/.mk.
Подробности: [chat_audit_findings.txt](chat_audit_findings.txt),продолжение chat_attachment.
chat_attachment.h/encrypted_attachments.md остаются [~];по AGENTS.md аудит остановлен,runtime не менялся.
[+] **member_files: безопасное завершение completion при stop из uasync batch** — исправлено26.10.2026.
После rebase на bc623f23 сохранена общая отмена из93ec1222:task удаляется и освобождается
из общей очереди или активного batch до освобождения mf_work;локальное обнуление callback/arg убрано.