Издание на ядрото на Linux 5.11

След два месеца разработка, Линус Торвалдс представи изданието на ядрото на Linux 5.11. Сред най-значителните промени са: поддръжка на Intel SGX енклави, нов механизъм за прихващане на системни повиквания, виртуална шина auxiliary, забрана за сглобяване на модули без MODULE_LICENSE(), режим за бързо филтриране на системни повиквания в seccomp, прекратяване на поддръжката за архитектурата ia64, преместване на технологията WiMAX в клона „staging”, възможност за инкапсулиране на SCTP в UDP.

В новата версия са включени 15480 поправки от 1991 разработчици, размерът на пача е 72 МБ (промените обхванаха 12090 файла, добавени са 868025 реда код, изтрити са 261456 реда). Около 46% от всички представени в 5.11 промени са свързани с драйвери на устройства, приблизително 16% от промените се отнасят до обновяване на код, специфичен за хардуерни архитектури, 13% са свързани с мрежовия стек, 3% — с файлови системи и 4% с вътрешни подсистеми на ядрото.

Основни нововъведения:

  • Дискова подсистема, вход/изход и файлови системи
    • В Btrfs са добавени няколко опции за монтиране, които да се прилагат при възстановяване на данни от повредена файлова система: „rescue=ignorebadroots” за монтиране, въпреки повредите на някои коренови дървета (extent, uuid, data reloc, device, csum, free space), „rescue=ignoredatacsums” за деактивиране на проверката на контрольни суми за данни и „rescue=all” за едновременно активиране на режимите ‘ignorebadroots’, ‘ignoredatacsums’ и ‘nologreplay’. Поддръжката на опцията за монтиране „inode_cache” е прекратена, която преди това беше обявена за остаряла. Проведена е подготовка на кода за внедряване на поддръжка на блокове с метаданни и данни, размерът на които е по-малък от страницата (PAGE_SIZE), както и поддръжка на режим за зонирано разпределение на пространство. Небуферизираните (Direct IO) заявки са прехвърлени на инфраструктурата iomap. Оптимизирана е производителността на редица операции, в някои случаи ускорението може да достигне десетки проценти.
    • В XFS е реализиран флаг „needsrepair”, сигнализиращ за необходимост от възстановяване. При активирането на този флаг файлова система не може да бъде монтирана, докато флагът не бъде нулиран от утилитата xfs_repair.
    • В Ext4 са предложени само поправки на грешки и оптимизации, а също така е проведено почистване на кода.
    • Разрешен е повторен експорт на файлови системи, монтирани върху NFS (т.е. монтиран дял чрез NFS вече може да бъде експортиран чрез NFS и използван като междинен кеш).
    • В системния повик close_range(), позволяващ на процеса да затвори цяла гама от отворени файлови дескриптори наведнъж, е добавена опция CLOSE_RANGE_CLOEXEC за затваряне на дескрипторите в режим close-on-exec.
    • В файловата система F2FS са добавени нови повиквания ioctl(), които позволяват на потребителското пространство да управлява кои файлове да се съхраняват в компресирано състояние. Добавена е опция за монтиране "compress_mode=", която позволява избор на местоположение на управляващия компресията обработчик в ядрото или в потребителското пространство.
    • Предоставена е възможност за монтиране на Overlayfs от непривилегировани процеси, използващи отделно пространство за идентификатори на потребители (user namespace). За проверка на съответствието с модела за сигурност е извършен пълен одит на кода. В Overlayfs е добавена и възможност за стартиране с използване на копия на образи на файловата система чрез опционално изключване на проверката на UUID.
    • В файловата система Ceph е добавена поддръжка на протокола msgr2.1, позволяваща прилагането на алгоритъма AES-GCM при предаване на данни в криптиран вид.
    • В модула dm-multipath е реализирана възможността за вземане предвид на привързаността към CPU („IO affinity“) при избор на маршрут за заявки за вход/изход.
  • Памет и системни услуги
    • Добавен е нов механизъм за прихващане на системни повиквания, базиран на prctl(), който позволява на потребителското пространство да генерира изключения при обращение към определено системно повикване и да емулира неговото изпълнение. Указаната функционалност е търсена в Wine и Proton за емулация на системни повиквания на Windows, което е необходимо за осигуряване на съвместимост с игри и програми, които директно извършват системни повиквания, заобикаляйки Windows API (например, за защита от несанкционирано използване).
    • В системния повик userfaultfd(), предназначен за обработка на page faults (обращение към неразпределени страници на паметта) в потребителското пространство, е добавена възможност за деактивиране на обработката на изключения, възникващи на ниво ядро, с цел усложняване на експлоатацията на някои уязвимости.
    • В подсистемата BPF е добавена поддръжка на локално за задача хранилище на данни (task-local storage), осигуряващо привързване на данни към конкретен BPF-обработчик.
    • Напълно преработеното отчитане на потреблението на памет от програмите BPF — за управление на използването на памет в обектите BPF, вместо memlock rlimit, е предложен контролер cgroup.
    • В механизма BTF (BPF Type Format), предоставящ информация за проверка на типове в псевдокода BPF, е реализирана поддръжка на модули на ядрото.
    • В интерфейса за асинхронен вход/изход io_uring е добавена поддръжка на системни повиквания shutdown(), renameat2() и unlinkat(). При повикване на io_uring_enter() е добавена възможност за указване на таймаут (можете да проверите поддръжката на аргумента за указване на таймаут с флага IORING_FEAT_EXT_ARG).
    • Архитектурата ia64, използвана в процесорите Intel Itanium, е преместена в категорията на оставени без поддръжка („orphaned“), което предполага прекратяване на тестовете. Компанията Hewlett Packard Enterprise спря приемането на поръчки за ново оборудване Itanium, а Intel направи това още миналата година.
    • Поддръжката на системи на базата на архитектура MicroBlaze, които не са оборудвани с блок за управление на паметта (MMU), е прекратена. Подобни системи отдавна не се срещат.
    • За архитектурата MIPS е добавена поддръжка за тестване на покритие на код (coverage testing) чрез утилитата gcov.
    • Добавена е поддръжка на виртуалната шина auxiliary за взаимодействие с многофункционални устройства, комбиниращи функционалности, изискващи различни драйвери (например, мрежови карти с поддръжка на Ethernet и RDMA). Шината може да се използва за назначаване на основен и вторичен драйвер за устройството, когато е проблематично използването на подсистемата MFD (Multi-Function Devices).
    • За архитектурата RISC-V е добавена поддръжка на системата за управление на паметта CMA (Contiguous Memory Allocator), оптимизирана за разпределяне на големи непрекъснати области памет, използвайки техника за преместване на страници памет. За RISC-V също така са реализирани средства за ограничаване на достъпа до /dev/mem и отчитане на времето за обработка на прекъсвания.
    • За 32-битови системи ARM е добавена поддръжка на инструмента за отстраняване на грешки KASan (Kernel address sanitizer), осигуряващ откриване на грешки при работа с памет. За 64-битови ARM реализацията на KASan е прехвърлена на използване на тагове MTE (MemTag).
    • Добавен е системен повик epoll_pwait2(), позволяващ използването на таймаути с наносекундна прецизност (повикването epoll_wait манипулира с милисекунди).
    • В системата за изграждане е осигурен извеждането на грешки при опити за изграждане на заредени модули на ядрото, в които с макроса MODULE_LICENSE() не е определена лицензия за кода. Грешките при изграждане вече ще бъдат предизвиквани и при използването на макроса EXPORT_SYMBOL() за статични функции.
    • Добавена е поддръжка на мапинг на GEM обекти от памет, заета за въвеждане/извеждане, което е позволило ускоряване на работата с framebuffer на някои архитектури.
    • В Kconfig е прекратена поддръжката на Qt4 (поддръжката на Qt5, GTK и Ncurses остава).
  • Виртуализация и безопасност
    • В системното повикване seccomp() е добавена поддръжка на режим на бързо реагиране, който позволява изключително бързо определяне на това дали определено системно повикване е разрешено или забранено на базата на прикрепената към процеса таблица с правомощия (constant-action bitmap), която не изисква стартиране на BPF обработчик.
    • Интегрирани са компоненти на ядрото за създаване и управление на анклави на базата на технологията Intel SGX (Software Guard eXtensions), позволяваща на приложенията да изпълняват код в изолирани криптирани области на паметта, достъпът на останалата система до които е ограничен.
    • В рамките на инициативата за ограничаване на достъпа от пространството на потребителя до регистрите MSR (model-specific register) е забранено записването в регистъра MSR_IA32_ENERGY_PERF_BIAS, позволяващ промяна на режима за енергийна ефективност на процесора („normal“, „performance“, „powersave“).
    • От клона kernel-rt за системи с реално време е пренесена възможността за деактивиране на миграцията на високоприоритетни задачи между CPU.
    • За системи ARM64 е добавена възможност за прилагане на eтикети MTE (MemTag, Memory Tagging Extension) за адреси на паметта на обработчиците на сигнали. Използването на MTE се активира чрез указването на опцията SA_EXPOSE_TAGBITS в sigaction() и позволява организиране на проверка за правилно използване на указатели с цел блокиране на експлоатацията на уязвимости, причинени от достъп до вече освободени блокове памет, преливания на буфера, достъп до инициализация и използване извън текущия контекст.
    • Добавен е параметърът „DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING“, разрешаващ на подсистемата dm-verity да проверява хеш-сигнатурите на сертификати, разположени във вторичното хранилище на ключове (keyring). В практиката, настройката позволява верификация не само на сертификати, вградени в ядрото, но и на сертификати, зареждани по време на работа, което дава възможност за актуализиране на сертификатите без актуализиране на цялото ядро.
    • В User-mode Linux е добавена поддръжка на режима suspend-to-idle, който позволява замразяване на средата и използване на сигнала SIGUSR1 за извеждане от спящ режим.
    • В механизма virtio-mem, който позволява горещо свързване и изключване на паметта към виртуални машини, е добавена поддръжка на режима на голям блок (BBM, Big Block Mode), даващ възможност за предаване или взимане на памет в блокове, които надвишават размера на блока памет на ядрото, което е необходимо за оптимизация на VFIO в QEMU.
    • В ядрената реализация на TLS е добавена поддръжка на шифъра CHACHA20-POLY1305.
  • Мрежовата подсистема
    • За 802.1Q (VLAN) е реализиран механизъм за управление на неизправности при свързване (CFM, Connectivity Fault Management), позволяващ откриването, версифицирането и изолирането на неизправности в мрежи с виртуални мрежови мостове (Virtual Bridged Networks). Например, CFM може да се използва за локализиране на проблеми в мрежи, обхващащи няколко независими организации, чиито служители имат достъп единствено до своето оборудване.
    • Добавена е поддръжка на инкапсулирането на пакети от протокола SCTP в UDP-пакети (RFC 6951), което позволява използването на SCTP в мрежи със стари адресни транслатори, които не поддържат SCTP директно, а също така реализира SCTP на системи, които не предоставят директен достъп до нивото IP.
    • Реализацията на технологията WiMAX е преместена в staging и в бъдеще е планирано да бъде премахната, ако не се намерят потребители, които имат нужда от WiMAX. WiMAX вече не се използва в публични мрежи, а в ядрото единственият драйвер, с който може да се използва WiMAX, остава остарял драйвер Intel 2400m. В мрежовия конфигуратор NetworkManager поддръжката на WiMAX беше прекратена през 2015 г. В момента WiMax е практически напълно изместена от технологии като LTE, HSPA+ и Wi-Fi 802.11n.
    • Работата по оптимизация на производителността на обработката на входящ TCP трафик в режим zerocopy, т.е. без допълнително копиране в нови буфери, е проведена. За трафик с среден размер, обхващащ десетки или стотици килобайти данни, прилагането на zerocopy вместо recvmsg() е значително по-ефективно. Например, реализираните промени позволиха да се увеличи ефективността на обработката на трафика в стил RPC с съобщения от 32 КБ при използване на zerocopy с 60-70%.
    • Добавени нови повиквания ioctl() за създаване на мрежови мостове, обхващащи няколко канала PPP. Предложената възможност позволява кадрите да се прехвърлят от един канал в друг, например, от PPPoE в сесия PPPoL2TP.
    • Продължава интеграцията в ядрото MPTCP (MultiPath TCP), разширение на протокола TCP за организиране на работа на TCP-съединението с доставка на пакети едновременно по няколко маршрута чрез различни мрежови интерфейси, свързани с различни IP-адреси. В новото издание е реализирана поддръжка на опцията ADD_ADDR за обявяване на наличните IP адреси с които е възможно свързване при добавяне на нови потоци към съществуващото MPTCP съединение.
    • Добавена е възможност за настройка на действията при надхвърляне на бюджета за поллинг на съединения (busy-polling). Преди достъпният режим SO_BUSY_POLL предвиждаше превключване на softirq при изчерпване на бюджета. За приложения, които трябва да продължат да използват поллинг, е предложена нова опция SO_PREFER_BUSY_POLL.
    • В IPv6 е реализирана поддръжка на режимите SRv6 End.DT4 и End.DT6, използвани за създаване на многопотребителски IPv4 L3 VPN и устройства VRF (Virtual Routing and Forwarding).
    • В Netfilter е унифицирана реализацията на изразите set, което позволи да се осигури възможността за указване на множество изрази за всеки елемент от set-списъците.
    • В безжичния стек 802.11 са добавени API за настройка на ограничения за мощността SAR, както и параметрите AE PWE и HE MCS. В драйвера Intel iwlwifi е добавена поддръжка за диапазона 6GHz (Ultra High Band). В драйвера Qualcomm Ath11k е добавена поддръжка за технологията за бързо установяване на връзка FILS (Fast Initial Link Setup, стандартизирана като IEEE 802.11ai), позволяваща да се избегнат забавяния при роуминг по време на миграция от една точка на достъп на друга.
  • Оборудване
    • В драйвера amdgpu е реализирана поддръжка на APU AMD „Green Sardine“ (Ryzen 5000) и GPU „Dimgrey Cavefish“ (Navi 2), а също и начална поддръжка на APU AMD Van Gogh с ядро Zen 2 и GPU RDNA 2 (Navi 2). Добавена е поддръжка на новите идентификатори APU Renoir (на базата на CPU Zen 2 и GPU Vega).
    • В драйвера i915 за видеокарти Intel е реализирана поддръжка на технологията IS (Цяло скалиране) с реализация на филтър за увеличаване на мащаба, вземайки предвид състоянието на съседните пиксели (интерполация Nearest-neighbor) за определяне на цвета на отсъстващите пиксели. Разширена е поддръжката на дискретни карти Intel DG1. Реализирана е поддръжка на технологията «Big Joiner», налична от чиповете Ice Lake / Gen11, което позволява използването на един транскодер за обработка на два потока, например, за изход на 8K екран чрез един DisplayPort. Добавен е режим на асинхронно превключване между два буфера във видеопаметта (асинхронно прехвърляне).
    • В драйвера nouveau е добавена начална поддръжка за GPU NVIDIA на базата на микроархитектурата «Ampere» (GA100, GeForce RTX 30xx), засега ограничена до средства за управление на видеорежимите.
    • Добавена е поддръжка на протокола 3WIRE, използван в LCD панелите. Добавена е поддръжка на панелите novatek nt36672a, TDO tl070wsh30, Innolux N125HCE-GN1 и ABT Y030XX067A 3.0. По-специално се отбелязва поддръжката на панела на смартфоните OnePlus 6 и 6T, което позволи организирането на зареждане на устройства с немодифицирано ядро.
    • Добавена е поддръжка на първия дискретен USB4 хост контролер Intel Maple Ridge.
    • Добавена е поддръжка на звуковите кодеци Allwinner H6 I2S, Analog Devices ADAU1372, Intel Alderlake-S, GMediatek MT8192, NXP i.MX HDMI и XCVR, Realtek RT715 и Qualcomm SM8250.
    • Добавена е поддръжка на ARM платформи, устройства и платформи: Galaxy Note 10.1, Microsoft Lumia 950 XL, NanoPi R1, FriendlyArm ZeroPi, Elimo Initium SBC, Broadcom BCM4908, Mediatek MT8192/MT6779/MT8167, MStar Infinity2M, Nuvoton NPCM730, Marvell Armada 382, Mikrotik на базата на Marvell Prestera 98DX3236, сървъри с Nuvoton NPCM750 BMC, Kontron i.MX8M Mini, Espressobin Ultra, «Trogdor» Chromebook, Kobol Helios64, Engicam PX30.Core.
    • Вградена е поддръжка на игровата конзола Ouya на базата на NVIDIA Tegra 3.

Междувременно латиноамериканският Фонд за свободен софтуер е създал вариант на напълно свободно ядро 5.11 — Linux-libre 5.11-gnu, почистено от елементи на фърмуер и драйвери, съдържащи несвободни компоненти или участъци от код, чиято употреба е ограничена от производителя. В новата версия е проведено почистване на драйверите за qat_4xxx (crypto), lt9611uxcm (dsi/hdmi bridge), ccs/smia++ (sensor), ath11k_pci, nxp audio transceiver и mhi pci контролер. Обновен е кодът за почистване на блобове в драйверите и подсистемите amdgpu, btqca, btrtl, btusb, i915 csr. Отключени са нови блобове в m3 rproc, idt82p33 ptp clock и qualcomm arm64.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster