Рэліз ядра 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% c унутранымі падсістэмамі ядра.

Асноўныя навіны:

  • Дыскавая падсістэма, увод/выснова і файлавыя сістэмы
    • У 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-аб'ектаў з памяці, задзейнічанай для ўводу/высновы, які дазволіў паскорыць працу з фрэймбуферам на некаторых архітэктурах.
    • У 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 дададзена магчымасць ужывання тэгаў 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 CPU і GPU Vega).
    • У драйверы i915 для відэакарт Intel рэалізаваная падтрымка тэхналогіі IS (Integer scaling) з рэалізацыяй фільтра для павелічэння маштабу з улікам стану суседніх пікселяў (інтэрпаляцыя Nearest-neighbor) для вызначэння колеру адсутных пікселяў. Пашыраная падтрымка дыскрэтных карт Intel DG1. Рэалізаваная падтрымка тэхналогіі "Big Joiner", прысутнай пачынаючы з чыпаў Ice Lake / Gen11 і якая дазваляе выкарыстоўваць адзін транскодэр для апрацоўкі двух патокаў, напрыклад, для вываду на 8K экран праз адзін DisplayPort. Дададзены рэжым асінхроннага пераключэння паміж двума буферамі ў відэапамяці (async flip).
    • У драйвер 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 , Mikrotik на базе Marvell Prestera 2DX730, серверы з Nuvoton NPCM382 BMC, Kontron i.MX98M Mini, Espressobin Ultra, "Trogdor" Chromebook, Kobol Helios3236, Engicam PX750.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 controller. Абноўлены код чысткі блобаў у драйверах і падсістэмах amdgpu, btqca, btrtl, btusb, i915 csr. Адключаныя новыя блобы ў m3 rproc, idt82p33 ptp clock і qualcomm arm64.

Крыніца: opennet.ru

Дадаць каментар