К обсуждениям

Netty Unix socket: все полученные fd закрываются при reject

Редакция VOne Технологии

Как безопасно проверить Netty Unix socket: все полученные fd закрываются при reject: точная версия, reachability, обратимый fixture, измеримые PASS/FAIL/Unknown и stop-rule без production-данных.

Граница проблемы: Netty Unix socket: все полученные fd закрываются при reject

Самостоятельная пользовательская боль: SCM_RIGHTS с несколькими descriptors проходит kernel install, но unexpected cmsg length оставляет их открытыми. Защитное правило для проверки сформулировано заранее: «как безопасно проверить что каждый fd после recvmsg получает единственного owner либо закрывается на всех validation error paths в netty native unix domain fd receive без production данных». GitHub Reviewed Advisory ghsa-w573-9ffj-6ff9 описывает: «Netty: Unix-socket fd receive leaks descriptors when peer sends two at once»; запись опубликована 2026-06-08 и обновлена 2026-06-12. Эти сведения подтверждают технический сигнал и upstream-контекст, но не доказывают наличие затронутой версии, достижимость пути, эксплуатацию конкретной системы или популярность запроса. Поэтому итог по локальной среде начинается как Unknown и меняется только после inventory, reachability и изолированного теста.

Сверьте версии и достижимость для netty-unix-socket-multi-fd-cleanup

Начинайте с inventory и resolved dependency, а не с общего severity. Boundary из reviewed record и прямого upstream-источника: «maven/io.netty:netty-transport-native-epoll >= 4.2.0.Final, <= 4.2.14.Final; first patched 4.2.15.Final | maven/io.netty:netty-transport-native-kqueue >= 4.2.0.Final, <= 4.2.14.Final; first patched 4.2.15.Final | maven/io.netty:netty-transport-native-kqueue <= 4.1.134.Final; first patched 4.1.135.Final | maven/io.netty:netty-transport-native-epoll <= 4.1.134.Final; first patched 4.1.135.Final». Разнесите состояния в таблице: компонента нет; версия вне диапазона; исправление backported; функция выключена; путь недостижим; provenance неясен; нужен fixture. Рабочий набор полей именно для этой темы: cmsg fd count, MSG_CTRUNC, validation, adopted fds, closed fds, fd delta. Banner, lockfile без resolved tree или совпадение имени пакета не являются доказательством. Если схема версий форка не сопоставима с upstream, оставьте Unknown и запросите build provenance вместо категоричного PASS.

Обратимый тест без production-данных: cmsg fd count

Безопасный fixture: native test использует socketpair и два descriptors только на temporary pipes; считает /proc/self/fd before/after. До запуска запишите expected invariant, лимиты времени и памяти, допустимые side effects и способ полной очистки. Добавьте положительный control для штатного пути и отрицательный case, который меняет только одну проверяемую границу. Используйте фиктивные identifiers и временное состояние; токены, реальные адреса, пользовательские данные, рабочие конфиги и внешние цели исключены. После каждого case удалите temp-state и повторите малый control: он подтверждает, что отказ относится к механизму, а не к сломанному harness.

Зафиксируйте доказательство по полям fd delta

Артефакт проверки хранит только минимизированные поля: cmsg fd count, MSG_CTRUNC, validation, adopted fds, closed fds, fd delta. Для каждого поля отметьте источник: configuration, измерение, parser output или решение policy. Критерий PASS определён до запуска: multi-fd reject возвращает fd delta 0, single-fd control также завершает lifecycle без утечки. FAIL допустим только если запрещённый эффект наблюдается в изоляции, boundary и runtime-mode совпали, а оба controls дают ожидаемый результат. Во всех остальных случаях ставьте Unknown или Inconclusive. Не прикладывайте сырые логи: достаточно hash fixture, версии, обезличенной матрицы, результата controls и времени проверки.

Проверьте причинность вывода о как безопасно проверить что каждый fd после recvmsg получает единственного owner либо закр

Рецензент должен связать наблюдение «SCM_RIGHTS с несколькими descriptors проходит kernel install, но unexpected cmsg length оставляет их открытыми» с конкретной границей «как безопасно проверить что каждый fd после recvmsg получает единственного owner либо закрывается на всех validation error paths в netty native unix domain fd receive без production данных», а не с похожим внешним симптомом. Попросите показать, где в resolved build применяется boundary «maven/io.netty:netty-transport-native-epoll >= 4.2.0.Final, <= 4.2.14.Final; first patched 4.2.15.Final | maven/io.netty:netty-transport-native-kqueue >= 4.2.0.Final, <= 4.2.14.Final; first patched 4.2.15.Final | maven/io.netty:netty-transport-native-kqueue <= 4.1.134.Final; first patched 4.1.135.Final | maven/io.netty:netty-transport-native-epoll <= 4.1.134.Final; first patched 4.1.135.Final», почему операция «native test использует socketpair и два descriptors только на temporary pipes; считает /proc/self/fd before/after» обратима и какие значения cmsg fd count, MSG_CTRUNC, validation, adopted fds, closed fds, fd delta получены измерением. Затем отдельно объясните, почему результат «multi-fd reject возвращает fd delta 0, single-fd control также завершает lifecycle без утечки» проверяет и отказ, и штатный control. Если хотя бы одно звено отсутствует, вывод возвращается в Unknown; severity advisory нельзя переносить на локальную установку автоматически.

Особенность механизма netty-unix-socket-multi-fd-cleanup

SCM_RIGHTS передаёт владение дескрипторами, поэтому ошибка после recvmsg обязана закрыть каждый уже полученный fd. Снимайте fd count до fixture, после reject и после явного завершения control; учитывайте служебные descriptors harness. Отдельно запишите cmsg count и признак truncation. Нулевой delta после двух fd доказывает cleanup ветки reject, тогда как успешный single-fd control подтверждает нормальный lifecycle без доступа к рабочим файлам.

Обновление, повторная проверка и граница остановки

Предпочтительное действие — перейти на исправленную upstream-ветку из boundary «maven/io.netty:netty-transport-native-epoll >= 4.2.0.Final, <= 4.2.14.Final; first patched 4.2.15.Final | maven/io.netty:netty-transport-native-kqueue >= 4.2.0.Final, <= 4.2.14.Final; first patched 4.2.15.Final | maven/io.netty:netty-transport-native-kqueue <= 4.1.134.Final; first patched 4.1.135.Final | maven/io.netty:netty-transport-native-epoll <= 4.1.134.Final; first patched 4.1.135.Final», затем повторить тот же fixture и штатный control. Временная мера допустима только если разрывает описанный механизм, имеет владельца, срок действия, наблюдаемый сигнал и проверяемый rollback. Обязательный stop-rule: не передавать рабочие sockets/files и не запускать при недоступном fd accounting.. При его срабатывании эксперимент прекращают, не расширяя доступ и не повышая нагрузку. В обращение к maintainer включите provenance, feature state, матрицу полей и ссылки на reviewed advisory и прямой upstream-источник; эксплуатационные инструкции и данные реальной среды исключите.

Минимальный пакет для поддержки по netty-unix-socket-multi-fd-cleanup

Соберите короткую причинную карточку: боль — «SCM_RIGHTS с несколькими descriptors проходит kernel install, но unexpected cmsg length оставляет их открытыми»; invariant — «как безопасно проверить что каждый fd после recvmsg получает единственного owner либо закрывается на всех validation error paths в netty native unix domain fd receive без production данных»; версия — «maven/io.netty:netty-transport-native-epoll >= 4.2.0.Final, <= 4.2.14.Final; first patched 4.2.15.Final | maven/io.netty:netty-transport-native-kqueue >= 4.2.0.Final, <= 4.2.14.Final; first patched 4.2.15.Final | maven/io.netty:netty-transport-native-kqueue <= 4.1.134.Final; first patched 4.1.135.Final | maven/io.netty:netty-transport-native-epoll <= 4.1.134.Final; first patched 4.1.135.Final»; операция — «native test использует socketpair и два descriptors только на temporary pipes; считает /proc/self/fd before/after»; поля — cmsg fd count, MSG_CTRUNC, validation, adopted fds, closed fds, fd delta; PASS — «multi-fd reject возвращает fd delta 0, single-fd control также завершает lifecycle без утечки». Добавьте hash теста, результат positive/negative controls, cleanup result и причину, по которой тест не касается внешней системы. Не включайте IP, токены, реальные имена, ключи, содержимое документов или полные логи. Если direct source подтверждает только release context, так и укажите: он не является доказательством локальной уязвимости. Граница остановки остаётся неизменной: не передавать рабочие sockets/files и не запускать при недоступном fd accounting..

Материал подготовлен редакцией VOne с помощью ИИ; даты, диапазоны, прямые источники, безопасный fixture, privacy-границы и отсутствие рекламных обещаний затем перепроверены.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.