Релиз ядра 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 для установки таймаута ожидания событий, после истечения которого процесс будет разбужен;
  • Добавлена поддержка

Источники

править
 
 
Creative Commons
Эта статья содержит материалы из статьи «Релиз ядра Linux 5.4», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.