Рэліз ядра Linux 6.2

Пасля двух месяцаў распрацоўкі Лінус Торвальдс прадставіў рэліз ядра Linux 6.2. Сярод найбольш прыкметных змен: дазволены прыём кода пад ліцэнзіяй Copyleft-Next, палепшана рэалізацыя RAID5/6 у Btrfs, працягнута інтэграцыя падтрымкі мовы Rust, зніжаны накладныя выдаткі пры абароне ад нападаў Retbleed, дададзена магчымасць рэгулявання спажывання памяці пры зваротным запісе, для TCP дададзены механізм балансавання PLB (Protective Load Balancing), дададзены гібрыдны механізм абароны патоку выканання каманд (FineIBT), у BPF з'явілася магчымасць вызначэння ўласных аб'ектаў і структур дадзеных, у склад уключана ўтыліта rv (Runtime Verification), зніжана энергаспажыванне ў рэалізацыі блакіровак RCU.

У новую версію прынята 16843 выпраўленняў ад 2178 распрацоўшчыкаў, памер патча – 62 МБ (змены закранулі 14108 файлаў, дададзена 730195 радкоў кода, выдалена 409485 радкоў). Каля 42% усіх прадстаўленых у 6.2 змен злучаны з драйверамі прылад, прыкладна 16% змен маюць дачыненне да абнаўлення кода, спецыфічнага для апаратных архітэктур, 12% злучана з сеткавым стэкам, 4% - з файлавымі сістэмамі і 3% c унутранымі падсістэмамі ядра.

Асноўныя навіны ў ядры 6.2:

  • Памяць і сістэмныя сэрвісы
    • Дазволена ўключэнне ў склад ядра кода і змен, якія пастаўляюцца пад ліцэнзіяй Copyleft-Next 0.3.1. Ліцэнзія Copyleft-Next створана адным з аўтараў GPLv3 і з`яўляецца цалкам сумяшчальнай з ліцэнзіяй GPLv2, што пацверджана юрыстамі кампаній SUSE і Red Hat. У параўнанні з GPLv2 ліцэнзія Copyleft-Next значна кампактней і прасцей для разумення (прыбрана ўступная частка і згадка састарэлых кампрамісаў), вызначае тэрміны і парадак ухілення парушэнняў, аўтаматычна здымае капілефт-патрабаванні для састарэлага калі, якому больш за 15 гадоў.

      Copyleft-Next таксама змяшчае пункт аб прадастаўленні правоў на запатэнтаваныя тэхналогіі, што, у адрозненне ад GPLv2, робіць дадзеную ліцэнзію сумяшчальнай з ліцэнзіяй Apache 2.0. Для забеспячэння поўнай сумяшчальнасці з GPLv2 у тэксце Copyleft-Next відавочна паказана, што вытворная праца можа пастаўляцца не толькі пад зыходнай ліцэнзіяй Copyleft-Next, але і пад ліцэнзіяй GPL.

    • У склад уключаная ўтыліта "rv", якая прадстаўляе інтэрфейс для ўзаемадзеяння з прасторы карыстача з апрацоўшчыкамі падсістэмы RV (Runtime Verification), прызначанай для праверкі карэктнасці працы на высоканадзейных сістэмах, якія гарантуюць адсутнасць збояў. Праверка вырабляецца падчас выканання праз прымацаванне апрацоўшчыкаў да кропак трасіроўкі, якія звяраюць фактычны ход выканання з загадзя вызначанай эталоннай дэтэрмінаваных мадэллю аўтамата, якая вызначае чаканыя паводзіны сістэмы.
    • У прыладзе zRAM, які дазваляе захоўваць частку падпампоўкі ў памяці ў сціснутым выглядзе (у памяці ствараецца блокавая прылада на якое вырабляецца свопінг са сціскам), рэалізаваная магчымасць пераўпакоўку старонак з выкарыстаннем альтэрнатыўнага алгарытму для дасягнення больш высокага ўзроўня сціску. Асноўная ідэя ў прадастаўленні выбару паміж некалькімі алгарытмамі (lzo, lzo-rle, lz4, lz4hc, zstd), якія прапануюць свае кампрамісы паміж хуткасцю сціску/распакоўкі і ўзроўнем сціску або аптымальнымі ў асаблівых сітуацыях (напрыклад, для сціску вялікіх старонак памяці).
    • Дададзены API "iommufd" для кіравання з прасторы карыстача сістэмай кіравання памяццю ўводу-высновы – IOMMU (I/O Memory-Management Unit). Новы API дае магчымасць кіраваць табліцамі старонак памяці ўводу/высновы, выкарыстоўваючы файлавыя дэскрыптары.
    • У BPF прадстаўлена магчымасць стварэння тыпаў, вызначэння ўласных аб'ектаў, пабудовы сваёй іерархіі аб'ектаў і гнуткага фармавання ўласных структур дадзеных, такіх як звязаныя спісы. Для часовых у рэжым сну BPF-праграм (BPF_F_SLEEPABLE) дададзеная падтрымка блакіровак bpf_rcu_read_{,un}lock(). Рэалізавана падтрымка захавання аб'ектаў task_struct. Дададзены map-тып BPF_MAP_TYPE_CGRP_STORAGE, які прадстаўляе лакальнае сховішча для cgroups.
    • Для механізму блакіровак RCU (Read-copy-update) рэалізаваны апцыянальны механізм «гультаяватых» callback-выклікаў, у якім па таймеры ў пакетным рэжыме зараз апрацоўваецца некалькі callback-выклікаў. Ужыванне прапанаванай аптымізацыі дазваляе на 5-10% зменшыць энегропотребление на прыладах Android і ChromeOS за кошт адкладвання RCU-запытаў падчас прастою або нізкай нагрузкі на сістэму.
    • Дададзены sysctl split_lock_mitigate для кіравання рэакцыяй сістэмы пры выяўленні расшчэпленых блакіровак («split lock»), якія ўзнікаюць пры доступе да нявыраўнаваных дадзеных у памяці з-за таго, што пры выкананні атамарнай інструкцыі дадзеныя перасякаюць дзве лініі кэша CPU. Падобныя блакаванні прыводзяць да значнага падзення прадукцыйнасці. Пры выстаўленні ў split_lock_mitigate значэння 0 выводзіцца толькі папярэджанне аб наяўнасці праблемы, а пры выстаўленні значэння 1 акрамя высновы папярэджання таксама ажыццяўляецца запаволенне выканання працэсу, які выклікаў блакаванне, каб захаваць прадукцыйнасць астатняй сістэмы.
    • Для архітэктуры PowerPC прапанавана новая рэалізацыя блакіровак qspinlock, якая дэманструе больш высокую прадукцыйнасць і вырашальная некаторыя праблемы з блакіроўкамі, якія ўзнікаюць у выключных выпадках.
    • Перапрацаваны код апрацоўкі перапыненняў MSI (Message-Signaled Interrupts), у якім ухілены назапашаныя архітэктурныя праблемы і дададзеная падтрымка прывязкі асобных апрацоўшчыкаў да розных прылад.
    • Для сістэм на базе архітэктуры набору каманд LoongArch, якая ўжываецца ў працэсарах Loongson 3 5000 і рэалізуе новы RISC ISA, падобны на MIPS і RISC-V, рэалізаваная падтрымка ftrace, абароны стэка, спячага і які чакае рэжымаў.
    • Дадзена магчымасць прысваення імён абласцям падзялянай ананімнай памяці (раней імёны маглі прызначацца толькі прыватнай ананімнай памяці, замацаванай за канкрэтным працэсам).
    • Дададзены новы параметр каманднага радка ядра "trace_trigger", прызначаны для актывацыі трыгера трасіроўкі, які ўжываецца для прывязкі ўмоўных каманд, выкліканых пры спрацоўванні кантрольнай праверкі (напрыклад, trace_trigger="sched_switch.stacktrace if prev_state == 2").
    • Павышаны патрабаванні да версіі пакета binutils. Для зборкі ядра зараз патрабуецца прынамсі binutils 2.25.
    • Пры выкліку exec() дададзена магчымасць змяшчэння працэсу ў прастору імёнаў часу (time namespace), у якім час адрозніваецца ад сістэмнага.
    • Пачаўся перанос з галіны Rust-for-Linux дадатковай функцыянальнасці, злучанай з выкарыстаннем мовы Rust у якасці другой мовы для распрацоўкі драйвераў і модуляў ядра. Падтрымка Rust неактыўная па змаўчанні і не прыводзіць да ўключэння Rust у лік абавязковых зборачных залежнасцяў да ядра. Прапанаваная ў мінулым выпуску базавая функцыянальнасць пашырана магчымасцямі для падтрымання нізкаўзроўневага кода, такіх як тып Vec і макрасы pr_debug!(), pr_cont!() і pr_alert!(), а таксама працэдурны макрас «#[vtable]», які спрашчае працу з табліцамі паказальнікаў на функцыі. Даданне высокаўзроўневых Rust-абвязак над падсістэмамі ядра, якія дазволяць ствараць паўнавартасныя драйверы на Rust, чакаецца ў наступных выпусках.
    • Выкарыстоўваны ў ядры тып "char" зараз для ўсіх архітэктур па змаўчанні абвешчаны як беззнаковый.
    • Абвешчаны састарэлым механізм размеркавання памяці slab – SLOB (slab allocator), які быў спраектаваны для сістэма з невялікім аб'ёмам памяці. Замест SLOB у звычайных умовах рэкамендуецца выкарыстоўваць SLUB ці SLAB. Для сістэм з невялікім аб'ёмам памяці рэкамендуецца прымяняць SLUB у рэжыме SLUB_TINY.
  • Дыскавая падсістэма, увод/выснова і файлавыя сістэмы
    • У Btrfs унесены паляпшэнні, накіраваныя на выпраўленне праблемы "write hole" у рэалізацыі RAID 5/6 (спроба аднаўлення RAID, калі крах здарыўся падчас запісу і немагчыма зразумець які блок на якой з прылад RAID запісаўся карэктна, што можа прывесці да разбурэння блокаў, адпаведных недазапісаным блокам). Акрамя таго, для SSD зараз па магчымасці аўтаматычна актывуецца па змаўчанні асінхроннае выкананне аперацыі "discard", якое дазваляе дамагчыся больш высокай прадукцыйнасці з-за эфектыўнай групоўкі аперацый "discard" у чарзе і апрацоўкі чаргі фонавым апрацоўшчыкам. Падвышаная прадукцыйнасць аперацый send і lseek, а таксама ioctl FIEMAP.
    • Пашыраны магчымасці па кіраванні адкладзеным запісам (writeback, фонавае захаванне змененых дадзеных) для блокавых прылад. У некаторых сітуацыях, напрыклад, пры выкарыстанні сеткавых блокавых прылад або USB-назапашвальнікаў, адкладзены запіс можа прыводзіць да вялікага спажывання аператыўнай памяці. Для таго каб кіраваць паводзінамі адкладзенага запісу і трымаць памер старонкавага кэша ў вызначаных рамках у sysfs (/sys/class/bdi/) прапанаваны новыя параметры strict_limit, min_bytes, max_bytes, min_ratio_fine і max_ratio_fine.
    • У файлавай сістэме F2FS рэалізавана ioctl-аперацыя атамарнай замены, якая дазваляе выканаць запіс дадзеных у файл у рамках адной атамарнай аперацыі. У F2FS таксама дададзены блокавы кэш экстэнтаў, які дапамагае вызначыць актыўна выкарыстоўваныя дадзеныя ці дадзеныя да якіх даўно не было зваротаў.
    • У ФС ext4 адзначаецца толькі выпраўленне памылак.
    • У файлавай сістэме ntfs3 прапанавана некалькі новых опцый мантавання: "nocase" для кіравання ўлікам рэгістра сімвалаў у імёнах файлаў і дырэкторый; windows_name для забароны стварэння імёнаў файлаў, утрымоўвальных знакі, недапушчальныя для АС Windows; hide_dot_files для кіравання прызначэннем пазнакі утоеных файлаў для файлаў, якія пачынаюцца на кропку.
    • У файлавай сістэме Squashfs рэалізавана опцыя мантавання «threads=», пры дапамозе якой можна вызначыць лік струменяў для распаралельвання аперацый распакавання. У Squashfs таксама з'явілася магчымасць мапінга ідэнтыфікатараў карыстачоў прымантаваных файлавых сістэм, ужывальнага для супастаўлення файлаў вызначанага карыстача на прымантаванай чужой частцы з іншым карыстачом у бягучай сістэме.
    • Перапрацавана рэалізацыя спісаў кантролю доступу POSIX (POSIX ACL). У новай рэалізацыі ліквідаваны архітэктурныя праблемы, спрошчана суправаджэнне кодавай базы і задзейнічаны больш бяспечныя тыпы даных.
    • У падсістэму fscrypt, якая выкарыстоўваецца для празрыстага шыфравання файлаў і каталогаў, дададзена падтрымка алгарытму шыфравання SM4 (кітайскі стандарт GB/T 32907-2016).
    • Дадзеная магчымасць зборкі ядра без падтрымкі NFSv2 (у будучыні падтрымку NFSv2 плануюць цалкам спыніць).
    • Зменена арганізацыя праверкі правоў доступу да прылад NVMe. Прадастаўлена магчымасць чытання і запісы на прыладу NVMe, калі які запісвае працэс мае доступ да адмысловага файла прылады (раней працэс павінен быў мець паўнамоцтва CAP_SYS_ADMIN).
    • Выдалены пакетны драйвер для CD/DVD, які быў аб'яўлены састарэлым у 2016 годзе.
  • Віртуалізацыя і бяспека
    • Рэалізаваны новы метад абароны ад уразлівасці Retbleed у CPU Intel і AMD, які выкарыстоўвае адсочванне глыбіні выклікаў, што не настолькі запавольвае працу як раней прысутная абарона ад Retbleed. Для ўключэння новага рэжыму прапанаваны параметр каманднага радка ядра "retbleed=stuff".
    • Дададзены гібрыдны механізм абароны струменя выканання каманд FineIBT, які спалучае ўжыванне апаратных інструкцый Intel IBT (Indirect Branch Tracking) і праграмнай абароны kCFI (kernel Control Flow Integrity) для блакавання парушэння звычайнага парадку выканання (control flow) у выніку ўжывання эксплоітаў, якія змяняюць якія захоўваюцца ў памяці паказальнікі на функцыі. FineIBT дазваляе выкананне па ўскосным пераходзе толькі ў выпадку пераходу на інструкцыю ENDBR, якая размяшчаецца ў самым пачатку функцыі. Дадаткова, па аналогіі з механізмам kCFI, следам ажыццяўляецца праверка хэшаў, якія гарантуюць нязменнасць паказальнікаў.
    • Дададзеныя абмежаванні для блакавання нападаў, якія маніпулююць генерацыяй станаў «oops», пасля якіх праблемныя задачы завяршаюцца і стан аднаўляецца без прыпынку працы сістэмы. Пры вельмі вялікай колькасці выклікаў стану «oops» узнікае перапаўненне лічыльніка спасылак (refcount), што дазваляе эксплуатаваць уразлівасці, выкліканыя разнайменнем NULL-паказальнікаў. Для абароны ад падобных нападаў у ядро ​​дададзены ліміт на максімальную колькасць спрацоўванняў "oops", пасля перавышэння якога ядро ​​будзе ініцыяваць пераход у стан "panic" з наступнай перазагрузкай, што не дазволіць дамагчыся лікі ітэрацый, неабходнага для перапаўнення refcount. Па змаўчанні ліміт выстаўлены ў 10 тысяч "oops", але пры жаданні яго можна змяніць праз параметр oops_limit.
    • Дададзены параметр канфігурацыі LEGACY_TIOCSTI і sysctl legacy_tiocsti для адключэння магчымасці памяшкання дадзеных у тэрмінал пры дапамозе ioctl TIOCSTI, бо дадзеная функцыянальнасць можа ўжывацца для падстаноўкі адвольных сімвалаў у буфер уводу тэрмінала і сімуляцыі карыстацкага ўводу.
    • Прапанаваны новы тып унутраных структур encoded_page, у якім ніжнія біты паказальніка выкарыстоўваюцца для захавання дадатковай інфармацыі, якая ўжываецца для абароны ад выпадковага разнаймення паказальніка (пры рэальнай неабходнасці разнаймення спачатку трэба ачысціць гэтыя дадатковыя біты).
    • На платформе ARM64 на этапе загрузкі прадстаўлена магчымасць уключэння і выключэнні праграмнай рэалізацыі механізму Shadow Stack, які ўжываецца для абароны ад перазапісу адрасу звароту з функцыі ў выпадку перапаўнення буфера ў стэку (сутнасць абароны ў захаванні пасля перадачы кіравання функцыі адрасу звароту ў асобным «ценявым» стэку і выманні дадзенага адрасу перад выхадам з функцыі). Падтрымка ў адной зборцы ядра апаратнай і праграмнай рэалізацыі Shadow Stack дазваляе выкарыстоўваць адно ядро ​​на розных ARM-сістэмах, незалежна ад падтрымкі ў іх інструкцый для аўтэнтыфікацыі паказальнікаў. Уключэнне праграмнай рэалізацыі ажыццяўляецца праз падмену падчас загрузкі неабходных інструкцый у кодзе.
    • Дададзена падтрымка выкарыстання на працэсарах Intel механізму асінхроннага апавяшчэння аб выхадзе (asynchronous exit notification), які дазваляе выяўляць single-step атакі на код, які выконваецца ў анклавах SGX.
    • Прапанаваны набор аперацый, якія дазваляюць гіпервізару падтрымліваць запыты з гасцявых сістэм Intel TDX (Trusted Domain Extensions).
    • Выдалены зборачныя налады ядра RANDOM_TRUST_BOOTLOADER і RANDOM_TRUST_CPU, замест якіх варта выкарыстоўваць адпаведныя опцыі каманднага радка random.trust_bootloader і random.trust_cpu.
    • У механізм Landlock, які дазваляе абмежаваць узаемадзеянне групы працэсаў з вонкавым асяроддзем, дададзеная падтрымка сцяга LANDLOCK_ACCESS_FS_TRUNCATE, які дае магчымасць кантраляваць выкананне аперацый усячэння файлаў.
  • Сеткавая падсістэма
    • Для IPv6 дададзеная падтрымка PLB (Protective Load Balancing), механізму балансавання нагрузкі паміж сеткавымі лінкамі, накіраванага на скарачэнне кропак перагрузкі на камутатарах датацэнтраў. Праз змену IPv6 Flow Label, PLB выпадковым чынам мяняе шляхі пакетаў для выраўноўвання нагрузкі на партах камутатара. Для зніжэння пераўпарадкавання пакетаў дадзеная аперацыя па магчымасці ажыццяўляецца пасля перыядаў прастою (idle). Ужыванне PLB у датацэнтрах Google дазволіла знізіць дысбаланс нагрузкі на парты камутатараў у сярэднім на 60%, паменшыць страту пакетаў 33% і знізіць затрымкі на 20%.
    • Дададзены драйвер для прылад MediaTek з падтрымкай Wi-Fi 7 (802.11be).
    • Дададзена падтрымка 800-гігабітных лінкаў.
    • Дададзена магчымасць перайменавання сеткавых інтэрфейсаў на лета, без спынення працы.
    • У якія запісваюцца ў лог паведамленні аб SYN-флудзе дададзена згадванне аб IP-адрасе, на які прыйшоў пакет.
    • Для UDP рэалізавана магчымасць выкарыстання асобных хэш-табліц для розных сеткавых прастор імёнаў.
    • Для сеткавых мастоў рэалізавана падтрымка метаду аўтэнтыфікацыі MAB (MAC Authentication Bypass).
    • Для пратаколу CAN (CAN_RAW) рэалізавана падтрымка рэжыму сокетаў SO_MARK для прымацавання фільтраў трафіку на базе fwmark.
    • У ipset рэалізаваны новы параметр bitmask, які дазваляе задаць маску на аснове адвольных бітаў у IP-адрасе (напрыклад, "ipset create set1 hash:ip bitmask 255.128.255.0").
    • У nf_tables дададзеная падтрымка апрацоўкі ўнутраных (inner) загалоўкаў, якія ідуць усярэдзіне тунэляваных пакетаў.
  • Абсталяванне
    • Дададзена падсістэма "accel" з рэалізацыяй фрэймворка для паскаральнікаў вылічэнняў, якія могуць пастаўляцца як у форме асобных ASIC, так і выглядзе IP-блокаў усярэдзіне SoC і GPU. Галоўным чынам падобныя паскаральнікі арыентаваны на паскарэнне рашэння задач машыннага навучання.
    • У драйверы amdgpu уключаная падтрымка IP-кампанентаў GC, PSP, SMU і NBIO. Для сістэм ARM64 рэалізавана падтрымка DCN (Display Core Next). Рэалізацыя абароненай высновы на экран пераведзена з выкарыстання DCN10 на DCN21 і можа зараз выкарыстоўвацца пры падлучэнні некалькіх экранаў.
    • У драйверы i915 (Intel) стабілізаваная падтрымка дыскрэтных відэакартай Intel Arc (DG2/Alchemist).
    • У драйверы Nouveau рэалізавана падтрымка GPU NVIDIA GA102 (RTX 30) на базе архітэктуры Ampere. Для карт nva3 (GT215) дададзена магчымасць кіравання фонавай падсветкай.
    • Дададзена падтрымка бесправадных адаптараў на базе чыпаў Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) і MediaTek MT7996, Bluetooth інтэрфейсаў Broadcom BCM4377/4378/4387, а таксама Ether.
    • Дададзена падтрымка ASoC (ALSA System on Chip) для ўбудаваных гукавых чыпаў HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588 Дададзена падтрымка гукавога інтэрфейсу Focusrite Saffire Pro 40. Дададзены гукавы кодэка Realtek RT1318.
    • Дададзена падтрымка смартфонаў і планшэтаў Sony (Xperia 10 IV, 5 IV, X і X compact, OnePlus One, 3, 3T і Nord N100, Xiaomi Poco F1 і Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1).
    • Добавлена ​​поддержка ARM SoC и плат Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695) , SDM670 (Snapdragon 670), MSM8976 (Snapdragon 652), MSM8956 (Snapdragon 650), RK3326 Odroid-Go / rg351, Zyxel NSA310S, InnoComm i.MX8MM, Odro

Адначасова лацінаамерыканскі Фонд вольнага ПЗ сфармаваў варыянт цалкам вольнага ядра 6.2 – Linux-libre 6.2-gnu, вычышчанага ад элементаў прашывак і драйвераў, утрымоўвальных нявольныя кампаненты ці ўчасткі кода, вобласць ужывання якіх абмежавана вытворцам. У новым выпуску праведзена чыстка новых блобаў у драйверы nouveau. Адключаная загрузка блобаў у драйверах mt7622, ​​mt7996 wifi і bcm4377 bluetooth. Праведзена чыстка імёнаў блобаў у dts-файлах для архітэктуры Aarch64. Абноўлены код чысткі блобаў у розных драйверах і падсістэмах. Спынена чыстка драйвера s5k4ecgx, бо ён быў выдалены з ядра.

Крыніца: opennet.ru

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