Линус Торвальдс опубликовал ядро Linux 5.4

После двух месяцев разработки Линус Торвальдс представил релиз ядра 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.

Подробно

Дисковая подсистема, ввод/вывод и файловые системы

  • В экспериментальный раздел «staging» («drivers/staging/»), куда помещаются компоненты, требующие доработки, добавлен разработанный компанией Samsung открытый драйвера exFAT. Добавление поддержки exFAT стало возможным после того, как компания Microsoft опубликовала общедоступные спецификации и предоставила возможность безвозмездного использования патентов на exFAT в Linux. Добавленный в ядро драйвер основан на устаревшем коде (1.2.9), требующем доработки и адаптации к требованиям по оформлению кода для ядра. Позднее для ядра был предложен неофициально подготовленный новый вариант драйвера Samsung, переведённый на ветку «sdFAT» (позднее, Samsung сам решил передать «sdfat» в основное ядро) и новый драйвер exFAT, открытый компанией Paragon Software (данные драйверы пока не вошли в ядро);
  • Добавлен механизм выявления модификации или подмены файлов 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. Механизм решает проблему с подвисаниями во время загрузки из-за недостатка энтропии для getrandom(), возникших после внесения оптимизаций в Ext4, сокращающих число обращений к накопителю;

Память и системные сервисы

  • В системный вызов madvise(), предоставляющий средства для оптимизации управления памятью процесса, добавлены флаги MADV_COLD и MADV_PAGEOUT c реализацией недеструктивных методов высвобождения дополнительной свободной памяти, позволяющих оптимизировать потребление памяти в некоторых системах, таких как Android. MADV_COLD информирует ядро о том, что перечисленные страницы памяти могут быть изъяты в ситуации нехватки памяти в системе, но находящиеся в них данные должны быть сохранены для дальнейшего использования (вытеснены в раздел подкачки). MADV_PAGEOUT может применяться для пометки областей памяти, которые процесс не планирует использовать длительное время и при необходимости их можно в первую очередь вытеснить в раздел подкачки;
  • Добавлен новый обработчик простоя CPU — «haltpoll» (cpuidle, решает когда можно перевести CPU в глубокие режимы экономии энергии, чем глубже режим — тем большая экономия, но и больше времени требуется для выхода из режима), который дополнил три ранее доступных обработчика cpuidle — «menu», «ladder» и «teo». Новый обработчик рассчитан на использование в системах виртуализации и позволяет используемому в гостевой системе виртуальному CPU (VCPU), запросить дополнительное время до перевода CPU в состояние idle. Подобный подход позволяет повысить производительность виртуализированных приложений за счёт предотвращения возврата управления гипервизору;
  • В системном вызове waitid() появился новый флаг P_PIDFD, при указании которого осуществляется ожидание изменения состояния дескриптора pidfd вместо обычного идентификатора процесса;
  • В интерфейс для асинхронного ввода/вывода io_uring добавлен флаг IORING_OP_TIMEOUT для установки таймаута ожидания событий, после истечения которого процесс будет разбужен;
  • Добавлена поддержка пространств имён символов модулей ядра, позволяющая мэйнтейнерам подсистем экспортировать свои наборы символов в отдельных пространствах имён, отделённых от других частей ядра. Например, символ «usb_stor_suspend» можно экспортировать только в пространстве имён USB_STORAGE, и он не будет видим для других подсистем;

Аппаратные архитектуры

  • Для архитектуры ARM64 реализована возможность использования 52-разрядных адресов, а также передачи тагированных указателей (указатели, включающие порцию пользовательских данных) в виде аргументов системных вызовов;
  • Удалена поддержка архитектуры SGI SN2, основанной на IA64;
  • Удалена поддержка расширений MPX, предоставляемых в процессорах Intel (в качестве причины упоминается отсутствие поддержки MPX в компиляторах);
  • Для архитектуры PA-RISC реализована поддержка системного вызова kexec_file_load() и механизма kprobes;
  • Для архитектуры PowerPC добавлена поддержка кольца защиты «ultravisor», на котором могут работать гипервизоры;

Сетевая подсистема

  • Значение по умолчанию SOMAXCONN (/proc/sys/net/core/somaxconn, максимальный размер очереди сетевых соединений, ожидающих обработки вызовом accept), увеличено с 128 до 4096. Аналогично, до 4096 увеличен параметр tcp_max_syn_backlog, ограничивающий размер полуоткрытых соединений, для которых ещё не отправлен ответ ACK;
  • Добавлена поддержка протокола SAE J1939, используемого в автомобильных сетях для коммуникации и передачи диагностических сообщений между разными компонентами автомобиля;
  • В подсистему eBPF добавлены функции для генерации SYN cookies из BPF-программ;
  • Включены наработки по унификации программ BPF (собранная один раз, BPF-программа запускается на любых платформах);
  • В NFS (knfsd) вместо старого кэша упреждающего чтения (readahead) реализован новый кэш файловых дескрипторов, позволяющий обойтись без выполнения системных вызовов open и close для каждой операции чтения и записи. На сторону knfsd также вынесена обработка ошибок ввода/вывода NFSv3;
  • В стек IPv6 добавлена поддержка RFC 7710 (RA Captive Portal Identifie);
  • В TCP-стек для упрощения диагностики проблем с производительностью добавлены счётчики TCP_INFO rcv_ooopack и snd_wnd, позволяющие судить о числе пакетов, полученных не в соответствии с порядком их отправки, и изменении размера принимающего окна на другой стороне;
  • IPv4 и IPv6 стеки добавлена возможность установки флага SO_MARK для сокетов UDP и RAW при помощи вызова ip_cmsg_send;
  • В Netfilter добавлен механизм для обновления объектов, отражающих состояние соединений и квот. В модуль nft_synproxy добавлена поддержка объектов отслеживания состояния synproxy. Реализованы средства для задействования механизмов аппаратного ускорения обработки операций с VLAN и туннелями, а также операций перенаправления (nft_fwd_netdev) и зеркалирования пакетов (nft_dup_netdev). В nft_meta добавлена поддержка сопоставления с учётом времени (UNIX timestamp), дня недели и часа;
  • Добавлен интерфейс для отслеживания отбрасывания пакетов в цепочках обработки, задействующих механизмы аппаратного ускорения;
  • В модуль cfg80211 добавлена поддержка полосы частот 6GHz, предложенной для будущего стандарта 802.11ax;

Оборудование

  • В драйвер amdgpu добавлена поддержка GPU Navi 12/14, а также APU Arcturus и Renoir, включая средства для управления питанием для Navi12, Renoir и Arcturus. Для APU Picasso реализована возможность отдельного сброса GPU. Для чипов Navi добавлена возможность изменения частоты работы памяти («mclk»). Добавлен режим очистки видеопамяти после использования буфера (wipe on release, технология защиты от анализа остаточных данных в видеопамяти);
  • В драйвер amdkfd (для дискретных GPU, такие как Fiji, Tonga, Polaris) добавлена поддержка карт на базе GPU Navi14, Navi12 и Arcturus;
  • В DRM-драйвере для видеокарт Intel добавлена поддержка GPU, используемого в ещё не выпускаемых чипах на базе новой микроархитектуры Tiger Lake. По умолчанию активирован кэш GTT и включён автоматический режим задействования прошивок GuC/HuC. Добавлена поддержка повторного выполнения обработчики горячего подключения устройств, если первый вызов завершился неудачей. Добавлены PCI-идентификаторы для новых чипов;
  • В подсистему DRM (Direct Rendering Manager) добавлена поддержка технологии защиты от копирования звукового- и видео-контента HDCP2.2 (High-bandwidth Digital Content Protection);
  • В драйвере Nouveau улучшено управление цветностью экрана и добавлена возможность использования дополнительных свойств (DEGAMMA/CTM/GAMMA) для GPU NVIDIA nv50;
  • Добавлены драйверы для LCD-панелей Novatek NT39016, LG Philips LB035Q02, NEC NL8048HL11, Sharp LS037V7DW01, Sony ACX565AKM, Toppoly TD028TTEC1/TD043MTEA1, Raydium RM67191, GiantPlus GPM940B, Ortustech COM37H3M, Sharp LQ070Y3DG3B/LS020B1DD01D/LD-D5116Z01B;
  • Добавлена поддержка ARM SoC ASpeed AST2600. Код для SoC TI Davinci и NXP LPC32xx переведён на унифицированную систему сборки, позволяющую собирать универсальные ядра, работающие на разных ARM-системах. Удалена поддержка устаревших и уже не используемых SoC Kendin/Micrel/Microchip KS8695, Winbond/Nuvoton W90x900 и Intel IOP33x/IOP13xx;
  • Добавлена поддержка ARM-плат и платформ Snapdragon 855 (SM8150), Mediatek MT7629, Allwinner V3, NXP i.MX8M Nano, Layerscape LS1046A, Amlogic SM1 (S905X3), Amlogic G12B (S922X, A311D), Rockchips Mecer Xtreme Mini S6, AOpen Chromebox Mini, AOpen Chromebase Mini, Aspeed AST2600, Leez RK3399 P710;
  • Добавлена поддержка ноутбуков на базе SoC Snapdragon 835/MSM8998 (Asus NovaGo TP370QL, HP Envy X2 и Lenovo Miix 630), Snapdragon 850/sdm850 (Lenovo Yoga C630) и смартфонов на базе Snapdragon 410/MSM8916 (Samsung Galaxy A3, A5, Longcheer L8150/ Android One 2).
  • Одновременно Латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 5.4Linux-libre 5.4-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске отключена загрузка блобов в драйвере ice (Intel Ethernet Connection E800 Series). Обновлён код чистки блобов в драйверах и подсистемах safexcel, amdgpu, i915, i2400m, i1480u, nitrox, r8169, touchscreen_dmi и звуковом драйвере для skylake. Прекращена чистка блобов в драйвере netx, который был удалён из ядра. Возвращены флаги исполняемого файла для скриптов вырезания блобов.

По материалам opennet.ru

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *