Рекомендуем
VPS на Windows и Linux — от 49 ₽ за 7 дней Быстрый запуск сервера на NVMe для сайтов, ботов и других задач.
Выбрать VPS

В Linux Kernel исправили подмену данных через VSOCK и ошибки SMB — версии 7.2.13 и 6.18.59

26 октября 2026 года вышли Linux Kernel 7.2.13 и 6.18.59 с исправлениями проверки отправителя в соединениях VSOCK, которые используются для связи с виртуальными машинами. В обеих ветках также устранили ошибки SMB-клиента, способные вызывать потерю данных при одновременной записи и обрезке файлов. Отдельные изменения касаются обработки прав доступа и файловой системы NTFS.

В Linux Kernel исправили подмену данных через VSOCK и ошибки SMB
В Linux Kernel исправили подмену данных через VSOCK и ошибки SMB

Ошибка VSOCK позволяла постороннему процессу подменять данные соединения

VSOCK обеспечивает обмен данными между виртуальной машиной и хостом, а в некоторых конфигурациях — между локальными процессами. Для такого обмена используются специальные адреса и порты без необходимости настраивать обычное IP-соединение. Именно проверка этих адресов оказалась проблемным местом.

При получении пакета подсистема VSOCK сначала пыталась найти соединение по полным адресам отправителя и получателя. Если совпадение не находилось, применялся дополнительный поиск только по адресу получателя. В некоторых случаях такой поиск возвращал уже подключённый сокет, хотя отправитель пакета не совпадал с его настоящим собеседником.

В описании исправления для virtio-vsock разработчики привели воспроизводимый пример. Два процесса работали с разными идентификаторами пользователя и без специальных привилегий. Посторонний процесс смог передать в чужое соединение 16 байт выбранных им данных. При этом ожидаемый собеседник получил ноль байт из этих шестнадцати. Это конкретный пример нарушения границы между участниками обмена, а не предположение о возможной ошибке.

Теперь для уже подключённых сокетов проверяются транспорт, порт и идентификатор источника (CID). Аналогичную проверку добавили в транспорт VMCI. Для него описан другой сценарий: пакет сброса соединения от чужого источника мог прервать подключение на стадии установления связи. Исправления присутствуют в обеих версиях — 7.2.13 и 6.18.59.

SMB-клиент Linux больше не должен терять записи при обрезке файла

Ещё одна группа исправлений относится к SMB — протоколу, через который Linux подключается к общим папкам на файловых серверах и сетевых хранилищах. Проблема возникала при сочетании параллельной записи и открытия файла с флагом O_TRUNC, который обнуляет его длину.

Раньше клиент мог начать обрезку файла, когда другая операция ещё записывала данные. Часть новых данных попадала в кеш после его очистки и затем терялась при изменении размера. Другая гонка касалась прямого или асинхронного ввода-вывода: уже запущенная операция могла завершиться после обрезки и вернуть старые данные за новую границу файла.

В обновлённом коде последовательность записи и обрезки защищена блокировками, а перед изменением размера клиент дожидается завершения незаконченных операций ввода-вывода. Это касается сценариев, где несколько потоков или программ работают с одним файлом на SMB-ресурсе.

В обе ветки вошла и правка cifs_do_set_acl(). При установке списков управления доступом (ACL) размер буфера проверялся по одному формату данных, тогда как запись происходила в другом, более объёмном формате. Такое несоответствие могло вызвать переполнение памяти. Теперь размер проверяется для фактически записываемого формата, включая ограничение длины передаваемых данных.

Исправлена и ошибка многопользовательского подключения SMB с Kerberos: при создании нового соединения клиент не всегда переносил имя пользователя из исходных параметров монтирования. В описании бага приведён результат mount error(13): Permission denied. После исправления нужный параметр сохраняется при создании соединений.

В Linux 7.2.13 отдельно поправили работу с файлами NTFS

В журнале изменений Linux 7.2.13 выделяется серия исправлений драйвера ntfs. Одно из них касается переключения атрибутов сжатия и разрежённого хранения файла. При изменении размера служебной записи драйвер мог перемещать её части в неверном порядке и повреждать информацию о расположении данных.

Авторы привели конкретный случай: после повторного включения сжатия у пустого файла в служебной записи могли сохраняться некорректные данные, а ntfsck сообщал об ошибке длины участка. Теперь сначала переносятся нужные данные, а затем уменьшается размер записи.

Другая правка устраняет гонку при изменении размера файла. Если в этот момент программа обращалась к отображённому в память содержимому, она могла получить неожиданный сигнал SIGBUS. В обновлённом коде изменение размера защищено блокировкой, согласующей эту операцию с обращениями к страницам памяти.

Эти изменения перечислены в журнале версии 7.2.13. При сравнении с журналом 6.18.59 соответствующего набора исправлений ntfs в нём нет, поэтому переносить описание на обе ветки было бы неточно.

Исправления затронули фоновые задачи и синхронизацию процессов

Обе версии исправляют ошибку в workqueue — механизме выполнения фоновых задач ядра. Система могла освободить пул рабочих потоков, пока ссылка на него ещё оставалась в списке ожидающих задач. Инструмент проверки памяти KASAN выявил обращение к уже освобождённому объекту (use-after-free). Патч меняет порядок удаления ссылки и освобождения пула.

Для futex, механизма ожидания и пробуждения потоков, устранена ошибка повторного использования адресного пространства. В редком сценарии ожидающий поток мог перехватить сигнал пробуждения, предназначенный другому процессу, чья память позднее получила тот же адрес. Теперь для соответствующего типа futex применяется уникальный 64-битный идентификатор адресного пространства.

Это низкоуровневые исправления. Их последствия способны проявляться как нестабильность отдельных многопоточных программ, хотя сами программы напрямую с workqueue и внутренними идентификаторами futex обычно не работают.

Для разных веток Linux сохраняются разные циклы сопровождения

На kernel.org версия 7.2.13 от 26 октября обозначена как stable, а 6.18.59 той же даты — как longterm, то есть ветка с длительной поддержкой. Основная ветка разработки (mainline) к этому моменту уже перешла на Linux 7.3. Все три линии существуют параллельно и рассчитаны на разные циклы обновления.

Документация проекта описывает правила переноса исправлений в стабильные версии: проблему сначала исправляют в основной линии разработки, после чего подходящий патч может попасть в поддерживаемые ветки. Поэтому совпадающие исправления VSOCK и SMB появились одновременно в 7.2.13 и 6.18.59, хотя исходный код этих серий различается.

Наличие нового выпуска на kernel.org также не определяет день его появления в Ubuntu, Debian, Fedora или другом дистрибутиве: поставщики систем собирают и сопровождают собственные пакеты ядра.

Релизы закрывают проблемы с конкретными условиями воспроизведения

Обновления от 26 октября затрагивают три разных сценария: проверку происхождения сообщений VSOCK, целостность файлов при конкурентной работе через SMB и обработку NTFS в ветке 7.2.13. Документированные ошибки проявлялись при определённых последовательностях операций и настройках, а не при любом использовании виртуальных машин или сетевых папок.

Отдельный интерес представляет VSOCK: в официальном описании есть воспроизведение подмены данных непривилегированным процессом. Именно этот случай отличает нынешнюю пару релизов от предыдущих обновлений Linux, посвящённых другим ошибкам SMB и KVM.

Источники

При использовании материалов сайта необходимо указывать ссылку на TGLand.ru. Если вы копируете фрагменты текста в интернете, прямая гиперссылка, доступная для индексации поисковыми системами, должна быть размещена в начале материала.

Вам также может понравиться