Record confirmed attachment key bind failure and pause chat audit
This commit is contained in:
1 parent
e33d51a34a
commit
d877e8881c
2 files changed
+77
-1
No files matched your search
@@ -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 не выполнялись.
|
||||
@@ -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 убрано.
|
||||
|
||||
Reference in new issue
Block a user