Релиз ядра Linux 5.4
25 ноября 2019 года
После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.4. Среди наиболее заметных изменений: экспериментальный драйвер exFAT, режим "lockdown" для ограничения доступа пользователя root к ядру, механизм fs-verity для контроля целостности файлов, возможность использования CIFS для корневого раздела, контроллер ввода/вывода iocost, ФС EROFS, модуль dm-clone для репликации внешних устройств, новая ФС virtiofs для экспорта каталогов в гостевые системы, поддержка GPU AMD Navi 12/14, AMD Arcturus, AMD Renoir и Intel Tiger Lake.
В новую версию принято 15743 исправлений от 1991 разработчика, размер патча - 63 Мб (изменения затронули 12800 файлов, добавлено 828167 строк кода, удалено 126149 строк). Около 46% всех представленных в 5.4 изменений связаны с драйверами устройств, примерно 15% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 4% - файловыми системами и 3% c внутренними подсистемами ядра.
- Дисковая подсистема, ввод/вывод и файловые системы
- В экспериментальный раздел "staging" ("drivers/staging/"), куда помещаются компоненты, требующие доработки, добавлен разработанный компанией Samsung открытый драйвера exFAT. Ранее, добавление поддержки exFAT в ядро было невозможным из-за патентов, но ситуация изменилась после того, как компания Microsoft опубликовала общедоступные спецификации и предоставила возможность безвозмездного использования патентов на exFAT в Linux. Добавленный в ядро драйвер основан на устаревшем коде Samsung (версия 1.2.9), требующем доработки и адаптации к требованиям по оформлению кода для ядра.
Уже после добавления устаревшего драйвера энтузиастами был портирован новый драйвер Samsung (sdFAT 2.x), используемый в Android-прошивках Samsung. Позднее компания Samsung самостоятельно решила заняться продвижением нового драйвера "sdfat" в основное ядро Linux. Кроме того, компанией Paragon Software был открыт альтернативный драйвер, ранее поставляемый в пропритетарном наборе драйверов. Вышеупомянутые три драйвера (sdFAT от энтузиастов, sdFAT от Samsung и драйвер Paragon) пока не включены в основное ядро;
- Добавлен механизм выявления модификации или подмены файлов fs-verity, похожий на dm-verity, но работающий на уровне файловой системы, а не блочного устройства. Fs-verity добавляет возможность выборочного использования контроля целостности и проверки подлинности отдельных файлов, используемых в режиме только для чтения. Целостность проверяется по ассоциированным с файлами криптографическим хэшам, хранимым в области метаданных. При попытке обращения к изменённому файлу при несовпадении хэша файловая операция чтения возвращает ошибку (включая доступ через mmap). Опционально возможна верификация с использованием криптографических ключей. В общем виде fs-verity рассчитан на использование с файловыми системами, допускающими запись, в то время как dm-verity рекомендован для разделов, смонтированных в режиме только для чтения;
В настоящее время fs-verity пока можно использовать только для ФС ext4 и f2fs.
- Добавлен новый Device-Mapper обработчик dm-clone, позволяющий на базе доступного в режиме только для чтения блочного устройства создать локальную копию, допускающую запись в процессе клонирования. Клонированное устройство можно примонтировать и начать использование сразу после его создания, не дожидаясь завершения процесса переноса данных. Например, модуль может применяться для клонирования по сети удалённых архивных устройств, обрабатывающих ввод/вывод с большими задержками, в локальное быстрое устройство, поддерживающее запись и обрабатывающее запросы с минимальными задержками;
- В состав ядра добавлен контроллер ввода/вывода iocost (I/O cgroup controller), применяющий модель затрат для пропорционального распределения ресурсов (в качестве метрики рассматривается прогнозируемая стоимость потока операций ввода/вывода, а не пропускная способность или задержки; к каждой cgroup привязывается свой вес). Подобный подход позволяет добиться повышения производительности ввода/вывода для некоторых типов нагрузки, например, операций ввода/вывода из изолированных контейнеров, в которых ввод/вывод следует разграничивать с учётом группировки процессов в контейнеры;
- В основное дерево исходных текстов ядра перенесена файловая система EROFS (Extendable Read-Only File System), которая ранее находилась в ветке "staging". ФС EROFS разработана компанией Huawei для использования на разделах, доступных в режиме только для чтения.
Структура EROFS существенно упрощена за счёт отбрасывания при реализации некоторых областей метаданных, таких как битовая карта свободных блоков. EROFS поддерживает хранение данных в сжатом виде, но использует иной подход для хранения сжатых блоков, оптимизированный для достижения высокой производительности при случайном доступе к данным. Например, новая ФС в разы обгоняет Ext4 при случайном доступе благодаря применению блоков фиксированного размера и inline-упаковке в inоde небольших данных и расширенных атрибутов;
- В подсистему fscrypt, которая используется для прозрачного шифрования файлов и каталогов в ФС ext4, f2fs и ubifs, добавлено несколько новых вызовов ioctl() для добавления и удаления master-ключей, а также применения новой политики шифрования, решающей проблемы с верификацией ключей, компрометацией master-ключа в случае компрометации файлового ключа и невозможностью удаления ключей непривилегированными пользователями;
- При монтировании файловых систем обеспечен вывод предупреждения, если ФС не может обрабатывать даты как минимум на 30 лет вперёд;
- Добавлена возможность загрузки с файловой системы CIFS. Возможность использования CIFS для корневого раздела включается при помощи флага CONFIG_CIFS_ROOT, а для монтирования на ранней стадии загрузки предложена опция "cifsroot=". Среди других изменений в CIFS: возможность отправки команд smb2 set-info из пространства пользователя, поддержка распараллеливания операций расшифровки при чтении, новые опции монтирования "cache=singleclient" и "cache=ro" для оптимизации кэширования конфигураций только с одним клиентом или при активности только на чтение;
- В модуль dm-verity (device-mapper verity), предназначенный для проверки целостности хранимых блоков данных по криптографическим хэшам, добавлена возможность верификации корневого хэша, определяющего целостность всего раздела. Проверка выполняется при помощи криптографического ключа, загруженного в keyring ядра;
- В файловую систему F2FS добавлен режим работы с именами файлов без учёта регистра символов.
Режим включается в привязке к отдельным каталогам при помощи нового атрибута "+F" (F2FS_CASEFOLD_FL), при установке которого все операции с файлами и подкаталогами внутри указанного каталога будут производиться без учёта регистра символов, в том числе регистр будет игнорироваться при операциях поиска и открытия файлов (например, файлы Test.txt, test.txt и test.TXT в подобных каталогах будут считаться одинаковыми);
- В файловой системе XFS ускорены операции изменения больших каталогов;
- В ФС EXT4 добавлены новые ioctl-вызовы: EXT4_IOC_CLEAR_ES_CACHE для принудительного сброса кэша состояния экстентов, EXT4_IOC_GETSTATE для получения сведений о состоянии inode и EXT4_IOC_GET_ES_CACHE для возвращения содержимого экстента;
- В CEPH добавлена поддержка произвольных xattr-флагов security.* и возможность автоматического восстановления сеансов (флаг монтирования "recover_session=clean");
- В BTRFS добавлен новый режим проверки целостности "tree-checker" для экстентов и корневых элементов (EXTENT_ITEM и METADATA_ITEM);
- Виртуализация и безопасность
- В состав ядра принят модуль " lockdown", который вобрал в себя поставляемые в дистрибутивах патчи, используемые для ограничения доступа пользователя root к ядру и блокирования обхода UEFI Secure Boot.
В режиме lockdown ограничивается доступ к /dev/mem, /dev/kmem, /dev/port, /proc/kcore, debugfs, отладочному режиму kprobes, mmiotrace, tracefs, BPF, PCMCIA CIS (Card Information Structure), некоторым интерфейсам ACPI и MSR-регистрам CPU, блокируются вызовы kexec_file и kexec_load, запрещается переход в спящий режим, лимитируется использование DMA для PCI-устройств, запрещается импорт кода ACPI из переменных EFI, не допускаются манипуляции с портами ввода/вывода, в том числе изменение номера прерывания и порта ввода/вывода для последовательного порта.
Без применения lockdown злоумышленник, добившийся выполнения кода с правами root, может выполнить свой код и на уровне ядра, например, через замену ядра при помощи kexec или чтения/записи памяти через /dev/kmem. По умолчанию модуль lockdown не активен, собирается при указании в kconfig опции SECURITY_LOCKDOWN_LSM и активируется через параметр ядра "lockdown=", управляющий файл "/sys/kernel/security/lockdown" или сборочные опции LOCK_DOWN_KERNEL_FORCE_*, которые могут принимать значения "integrity" и "confidentiality". В первом случае блокируются возможности, позволяющие вносить изменения в работающее ядро из пространства пользователя, а во втором случае, помимо этого, отключается функциональность, которую можно использовать для извлечения конфиденциальной информации из ядра;
- Добавлена новая файловая система virtiofs, позволяющая эффективно экспортировать части файловой системы хост-окружения гостевым системам. Гостевая система может примонтировать каталог, помеченный для экспорта на стороне хост-системы, что существенно упрощает организацию совместного доступа к каталогам в системах виртуализации. В реализации используется протокол FUSE - гостевая система выступает в роли клиента FUSE, а хост-система - в качестве сервера FUSE. В отличие от применения сетевых ФС, таких как NFS и virtio-9P, virtiofs позволяет добиться производительности, близкой к локальной файловой системе;
- Обеспечен вывод предупреждения о скором прекращении поддержки 32-разрядных гостевых систем, работающих в режиме паравиртуализации под управлением гипервизора Xen. Пользователям подобных систем рекомендуется перейти на использование 64-разрядных ядер в гостевых окружениях или использовать для запуска окружений вместо паравиртуализации (PV) режимы полной (HVM) или комбинированной (PVH) виртуализации;
- Добавлена защита, запрещающая запись в активные файлы подкачки из пространства пользователя;
- Добавлена поддержка режима "PrivacyGuard", используемого в ноутбуках Lenovo ThinkPad (T480s, T490, T490s) и позволяющего программно ограничить углы обзора экрана при вводе конфиденциальной информации;
- Добавлен механизм формирования энтропии для генератора псевдослучайных чисел, основанный на применении джиттера (jitter), учитывающего отклонения времени повторного исполнения определённого набора инструкций на CPU, которое зависит от множества внутренних факторов и непредсказуемо без физического контроля над CPU. Механизм решает проблему с подвисаниями во время загрузки systemd из-за недостатка энтропии для getrandom(), возникших после внесения оптимизаций в Ext4, сокращающих число обращений к накопителю;
- Память и системные сервисы
- В системный вызов madvise(), предоставляющий средства для оптимизации управления памятью процесса, добавлены флаги MADV_COLD и MADV_PAGEOUT c реализацией недеструктивных методов высвобождения дополнительной свободной памяти, позволяющих оптимизировать потребление памяти в некоторых системах, таких как Android.
MADV_COLD информирует ядро о том, что перечисленные страницы памяти могут быть изъяты в ситуации нехватки памяти в системе, но находящиеся в них данные должны быть сохранены для дальнейшего использования (вытеснены в раздел подкачки). MADV_PAGEOUT может применяться для пометки областей памяти, которые процесс не планирует использовать длительное время и при необходимости их можно в первую очередь вытеснить в раздел подкачки;
- Добавлен новый обработчик простоя CPU - "haltpoll" (решает, когда можно перевести CPU в глубокие режимы экономии энергии, чем глубже режим - тем большая экономия, но и больше времени требуется для выхода из режима), который дополнил три ранее доступных обработчика cpuidle - "menu", "ladder" и "teo". Новый обработчик рассчитан на использование в системах виртуализации и позволяет используемому в гостевой системе виртуальному CPU (VCPU), запросить дополнительное время до перевода CPU в состояние idle. Подобный подход позволяет повысить производительность виртуализированных приложений за счёт предотвращения возврата управления гипервизору;
- В системном вызове waitid() появился новый флаг P_PIDFD, при указании которого осуществляется ожидание изменения состояния дескриптора pidfd вместо обычного идентификатора процесса;
- В интерфейс для асинхронного ввода/вывода io_uring добавлен флаг IORING_OP_TIMEOUT для установки таймаута ожидания событий, после истечения которого процесс будет разбужен;
- Добавлена поддержка
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.