Пасля двух месяцаў распрацоўкі Лінус Торвальдс рэліз ядра . Сярод найболей прыкметных змен: дэтэктар станаў гонкі KCSAN, універсальны механізм дастаўкі апавяшчэнняў у прастору карыстача, падтрымка абсталявання для inline-шыфравання, пашыраныя механізмы абароны для ARM64, падтрымка расійскага працэсара Baikal-T1, магчымасць паасобнага мантавання асобнікаў procfs, рэалізацыя для ARM64 механізмаў абароны
Ядро 5.8 стала самым буйным па колькасці змен з усіх ядраў за ўвесь час існавання праекту. Пры гэтым змены не злучаны з нейкай адной падсістэмай, а ахапляюць розныя часткі ядра і ў асноўным злучаны з унутранымі перапрацоўкамі і чысткай. Больш за ўсё змен назіраецца ў драйверах. У новую версію прынята 17606 выпраўленняў ад 2081 распрацоўшчыкаў, якія закранулі прыкладна 20% усіх файлаў у рэпазітары з кодам ядра. Памер патча – 65 МБ (змены закранулі 16180 файлаў, дададзена 1043240 радкоў кода, выдалена 489854 радкоў). Для параўнання ў галінцы 5.7 было занесена 15033 выпраўленняў, а памер патча складаў 39 МБ. Каля 37% усіх прадстаўленых у 5.8 змен злучаны з драйверамі прылад, прыкладна 16% змен маюць дачыненне да абнаўлення кода, спецыфічнага для апаратных архітэктур, 11% злучана з сеткавым стэкам, 3% - з файлавымі сістэмамі і 4% c унутранымі падсістэмамі ядра.
:
- Віртуалізацыя і бяспека
- Забяспечана блакіроўка загрузкі модуляў ядра, якія маюць секцыі з кодам, у якіх адначасова выстаўлены біты, якія дазваляюць выкананне і запіс. Змена рэалізавана ў рамках буйнейшага праекта па збавенні ядра ад ужывання старонак памяці, якія дапускаюць адначасова выкананне і запіс.
- З'явілася магчымасць стварэння асобных асобнікаў procfs, якія дазваляюць выкарыстоўваць некалькі кропак мантавання procfs, змантаваных з рознымі опцыямі, але адбівалымі адну прастору імёнаў ідэнтыфікатараў працэсаў (pid namespace). Раней усе кропкі мантавання procfs толькі отзеркаливали адно ўнутранае ўяўленне і любая змена параметраў мантавання адбівалася на ўсіх астатніх кропках мантавання, злучаных з той жа прасторай імёнаў ідэнтыфікатараў працэсаў. З абласцей, у якіх можа быць запатрабавана мантаванне з рознымі опцыямі адзначаецца рэалізацыя легкаважнай ізаляцыі для ўбудавальных сістэм з магчымасцю ўтойвання ў procfs вызначаных тыпаў працэсаў і інфармацыйных вузлоў.
- Для платформы ARM64 рэалізавана падтрымка механізму
, які прадастаўляецца кампілятарам Clang для абароны ад перазапісу адрасы вяртання з функцыі ў выпадку перапаўнення буфера ў стэку. Сутнасць абароны ў захаванні пасля перадачы кіравання функцыі адрасу звароту ў асобным "ценявым" стэку і выманні дадзенага адрасу перад вынахадам з функцыі. - Для платформы ARM64 дададзена падтрымка інструкцый (Branch Target Indicator) для абароны выканання набораў інструкцый, на якія не павінны выконвацца пераходы пры галінаванні. Блакаванне пераходаў на адвольныя ўчасткі кода рэалізавана для процідзеяння стварэнню гаджэтаў у эксплоітах, якія выкарыстоўваюць прыёмы зваротна-арыентаванага праграмавання (ROP - Return-Oriented Programming, атакавалы не спрабуе размясціць свой код у памяці, а аперуе ўжо наяўнымі кавалкамі машынных інструкцый, завяршаюцца і завяршаюцца атрымання патрэбнай функцыянальнасці).
- Дададзена падтрымка абсталявання для inline-шыфравання блокавых прылад (). Прылады inlinep-шыфраванні звычайна ўбудаваны ў назапашвальнік, але лагічна размяшчаецца паміж сістэмнай памяццю і дыскам, ажыццяўляючы празрыстае шыфраванне і расшыфроўку ўводу/высновы на аснове зададзеных ядром ключоў і алгарытму шыфравання.
- Дададзены параметр каманднага радка ядра «initrdmem», які дазваляе паказаць фізічны адрас размяшчэння initrd у памяці пры размяшчэнні пачатковай загрузнай выявы ў АЗП.
- Дададзены новыя capability: CAP_PERFMON для доступу да падсістэмы perf і выкананні маніторынгу прадукцыйнасці. , які дазваляе выкананне некаторых аперацый з BPF (напрыклад, загрузка BPF-праграм), якія раней патрабавалі правоў CAP_SYS_ADMIN (зараз паўнамоцтвы CAP_SYS_ADMIN падзелены на камбінацыю CAP_BPF, CAP_PERFMON і CAP_NET_ADMIN).
- новая прылада virtio-mem, якое дазваляе рэалізаваць гарачае падлучэнне і адключэнне памяці да гасцявых сістэм.
- Рэалізаваны водгук аперацый мапінгу ў /dev/mem, калі драйвер прылады выкарыстоўвае перакрываюцца вобласці памяці.
- Дададзена абарона ад уразлівасці , якая дазваляе аднавіць вынікі выканання некаторых інструкцый, якія выконваюцца на іншым ядры CPU.
- Памяць і сістэмныя сэрвісы
- У дакумент, які вызначае правілы афармлення кода, рэкамендацыі па прымяненні інклюзіўнай тэрміналогіі. Распрацоўнікам не рэкамендуецца выкарыстоўваць звязкі 'master/slave' і 'blacklist/whitelist', а таксама асобна слова 'slave'. Рэкамендацыі датычацца толькі новага выкарыстання дадзеных тэрмінаў. Ужо існуючыя ў ядры згадкі названых слоў застануцца некранутымі. У новым кодзе выкарыстанне адзначаных тэрмінаў дазволенае калі таго патрабуе падтрыманне выдаванага ў прастору карыстача API і ABI, а таксама пры абнаўленні кода для падтрымкі існага абсталявання або пратаколаў, спецыфікацыі на якія прадпісваюць выкарыстанне вызначаных тэрмінаў.
- У склад уключаны адладкавы інструмент (Kernel Concurrency Sanitizer), прызначаны для дынамічнага выяўлення ўнутры ядра. Выкарыстанне KCSAN падтрымліваецца пры зборцы ў GCC і Clang, і патрабуе дадання адмысловых мадыфікацый на этапе кампіляцыі для адсочвання доступу да памяці (ужываюцца кропкі супыну, якія спрацоўваюць пры чытанні ці змене памяці). Асноўная ўвага пры распрацоўцы KCSAN нададзена прадухіленні ілжывых спрацоўванняў, маштабаванасці і прастаце выкарыстання.
- Дададзены дастаўкі апавяшчэнняў з ядра ў прастору карыстальніка. Механізм заснаваны на штатным драйверы pipe і дазваляе эфектыўна размяркоўваць апавяшчэнні ад ядра па каналах, адчыненым у прасторы карыстача. Кропкі прыёму апавяшчэнняў уяўляюць сабой pipe-ы, адчыненыя ў адмысловым рэжыме і якія дазваляюць назапашваць у колцавым буферы якія паступаюць ад ядра паведамлення. Чытанне ажыццяўляецца звычайнай функцыяй read(). Уладальнік канала вызначае, якія з крыніц у ядры неабходна адсочваць і можа вызначыць фільтр для ігнаравання паведамленняў і падзей вызначанага тыпу. З падзей пакуль падтрымліваюцца толькі аперацыі з ключамі, такія як даданне/выдаленне ключоў і змена іх атрыбутаў. Паказаныя падзеі плануюць выкарыстоўваць у GNOME.
- Працягнута развіццё функцыянальнасці 'pidfd', якая дапамагае апрацоўваць сітуацыі з паўторным выкарыстаннем PID (pidfd злучаецца з пэўным працэсам і не змяняецца, у той час як PID можа быць прывязаны да іншага працэсу пасля завяршэння бягучага працэсу, асацыяванага з гэтым PID). У новай версіі дададзена падтрымка выкарыстання pidfd для прымацавання працэсу да прастор імёнаў (дазволена ўказанне pidfd пры выкананні сістэмнага выкліку setns). Ужыванне pidfd дазваляе адным выклікам кіраваць прымацаваннем працэсу да некалькіх тыпаў прастор імёнаў, істотна скарачаючы лік неабходных сістэмных выклікаў і рэалізуючы прымацаванне ў атамарным рэжыме (калі пры прымацаванні да адной з прастор імёнаў паўстане збой, то не падлучацца і астатнія).
- Дададзены новы сістэмны выклік faccessat2(), адрозны ад
дадатковым аргументам са сцягамі, якія адпавядаюць рэкамендацыям POSIX (раней дадзеныя сцягі эмуляваліся ў Сі-бібліятэцы, а новы faccessat2 дазваляе рэалізаваць іх у ядры). - У Cgroup настройка memory.swap.high, якую можна выкарыстоўваць для запаволення задач, якія займаюць занадта шмат месца ў раздзеле падпампоўкі.
- У інтэрфейс асінхроннага ўводу/высновы дададзена падтрымка сістэмнага выкліку tee().
- Дададзены механізм «, прызначаны для вываду ў прастору карыстальніка змесціва структур ядра.
- магчымасць выкарыстання колцавага буфера для абмену дадзенымі паміж BPF-праграмамі.
- У механізм , прызначаны для арганізацыі паралельнага выканання задач у ядры, дададзена падтрымка шматструменных задач з балансаваннем нагрузкі.
- У механізм pstore, які дазваляе захаваць адладкавую інфармацыю аб чынніку краху ў вобласці памяці, не губляемыя паміж перазагрузкамі, бэкенд для захавання інфармацыі на блокавыя прылады.
- З галіны ядра PREEMPT_RT рэалізацыя лакальных блакіровак.
- новы API вылучэнні буфераў (AF_XDP), накіраваны на спрашчэнне напісання сеткавых драйвераў з падтрымкай XDP (eXpress Data Path).
- Для архітэктуры RISC-V рэалізавана падтрымка адладкі кампанентаў ядра пры дапамозе KGDB.
- Да выпуску 4.8 падвышаны патрабаванні да версіі GCC, якая можа выкарыстоўвацца для зборкі ядра. У адным з наступных выпускам плануецца падняць планку да GCC 4.9.
- Дыскавая падсістэма, увод/выснова і файлавыя сістэмы
- У Device Mapper новы апрацоўшчык dm-ebs (emulate block size), які можа прымяняцца для эмуляцыі меншага памеру лагічнага блока (напрыклад, для эмуляцыі 512-байтных сектараў на дысках з памерам сектара 4K).
- У файлавай сістэме F2FS з'явілася падтрымка сціску з выкарыстаннем алгарытму LZO-RLE.
- У dm-crypt падтрымка шыфраваных ключоў.
- У Btrfs палепшана апрацоўка аперацый чытання ў рэжыме прамога ўводу/высновы. Пры манціраванні праверка выдаленых падраздзелаў і каталогаў, якія засталіся без бацькі.
- У CIFS дададзены параметр "nodelete", які дапускае штатныя праверкі мае рацыю на серверы, але забараняльны кліенту выдаляць файлы або каталогі.
- У Ext4 палепшана апрацоўка памылкі пры выкарыстанні шматструменнасці. У xattr дададзена падтрымка прасторы імёнаў gnu.*, выкарыстоўванага ў GNU Hurd.
- Для Ext4 і XFS уключаная падтрымка аперацый DAX (прамы доступ да ФС у абыход старонкавага кэша без ужывання ўзроўня блокавых прылад) у прывязцы да асобных файлаў і каталогам.
- У сістэмны выклік дададзены сцяг , пры ўказанні якога інфармацыя здабываецца з выкарыстаннем механізму DAX.
- У EXFAT падтрымка верыфікацыі загрузнай вобласці.
- У FAT папераджальная загрузка элементаў ФС. Тэставанне павольнага 2ТБ USB-назапашвальніка паказала скарачэнне часу праходжання цеста з 383 да 51 сек.
- Сеткавая падсістэма
- У код кіравання працай сеткавых мастоў падтрымка пратакола (Media Redundancy Protocol), які дазваляе забяспечыць адмоваўстойлівасць, закальцаваўшы некалькі Ethernet-камутатараў.
- У сістэму кіравання трафікам (Tc) новае дзеянне "gate", якое дае магчымасць вызначыць часавыя інтэрвалы для апрацоўкі і адкідванні пэўных пакетаў.
- У ядро і ўтыліту ethtool дададзена падтрымка функцый тэставання далучанага сеткавага кабеля і самодіагностікі сеткавых прылад.
- У IPv6-стэк дададзена падтрымка алгарытму MPLS (Multiprotocol Label Switching) для маршрутызацыі пакетаў з выкарыстаннем шматпратакольнай камутацыі па пазнаках (для IPv4 MPLS падтрымліваўся і раней).
- Дададзена падтрымка перадачы пакетаў IKE (Internet Key Exchange) і IPSec па-над TCP () для абыходу магчымых блакіровак UDP.
- сеткавая блокавая прылада rnbd, якое дазваляе арганізаваць выдалены доступу да блокавай прылады пры дапамозе транспарта RDMA (InfiniBand, RoCE, iWARP) і пратаколу RTRS.
- У TCP-стэку падтрымка сціску дыяпазонаў ў адказах выбарачнага пацверджання (selective acknowledgment, SACK).
- Для IPv6 падтрымка TCP-LD (, Long Connectivity Disruptions).
- Абсталяванне
- У DRM-драйверы i915 для відэакарт Intel уключана па змаўчанні падтрымка чыпаў Intel Tiger Lake (GEN12), для якіх таксама магчымасць выкарыстання сістэмы SAGV (System Agent Geyserville) для дынамічнай падладкі частаты і напругі ў залежнасці ад патрабаванняў да энергаспажывання ці прадукцыйнасці.
- У драйвер amdgpu дададзеная падтрымка піксельнага фармату FP16 і рэалізаваная магчымасць працы з шыфраванымі буферамі ў відэапамяці (TMZ, Trusted Memory Zone).
- Дададзена падтрымка датчыкаў энергаспажывання працэсараў AMD Zen і Zen2, а таксама датчыкаў тэмпературы AMD Ryzen 4000 Renoir. Для AMD Zen і Zen2 забяспечана падтрымка вымання інфармацыі аб энергаспажыванні праз інтэрфейс (Running Average Power Limit).
- У драйвер Nouveau дададзена падтрымка фармату мадыфікатараў NVIDIA.
- У драйвер MSM (Qualcomm) дададзена падтрымка GPU Adreno A405, A640 і A650.
- унутраны фрэймворк для кіравання рэсурсамі DRM (Direct Rendering Manager).
- Дададзена падтрымка смартфонаў Xiaomi Redmi Note 7 і Samsung Galaxy S2, а таксама наўтбукаў Elm / Hana Chromebook.
- Дададзеныя драйверы для LCD-панэляў: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
- Дададзена падтрымка ARM-плат і платформаў Renesas "RZ / G1H", Realtek RTD1195, Realtek RTD1395 / RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME
, Beacon i.MX8m-Mini, Qualcomm SDM660 / SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI. - Дададзена падтрымка MIPS-працэсара Loongson-2K (скарочаны Loongson64). Для CPU Loongson 3 дададзена падтрымка віртуалізацыі з выкарыстаннем гіпервізара KVM.
-
падтрымка расійскага працэсара Baikal-T1 і заснаванай на ім сістэмы на крышталі . Працэсар Baikal-Т1 утрымоўвае два суперскалярных ядра P5600 MIPS 32 r5, якія працуюць на частаце 1.2 Ггц. Чып змяшчае кэш L2 (1 Мб), кантролер памяці DDR3-1600 ECC, 1 порт 10Gb Ethernet, 2 порта 1Gb Ethernet, кантролер PCIe Gen.3 х4, 2 порта SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. Працэсар дае апаратную падтрымку віртуалізацыі, інструкцыі SIMD і інтэграваны апаратны паскаральнік крыптаграфічных аперацый, які падтрымлівае ДАСТ 28147-89. Чып распрацаваны з выкарыстаннем ліцэнзаванага ў кампаніі Imagination Technologies блока працэсарнага ядра MIPS32 P5600 Warrior.
Адначасова лацінаамерыканскі Фонд вольнага ПЗ
варыянт - , вычышчанага ад элементаў прашывак і драйвераў, якія змяшчаюць нявольныя кампаненты або ўчасткі кода, вобласць ужывання якіх абмежавана вытворцам. У новым выпуску адключаная загрузка блобаў у драйверах для Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Enhanced Asynchronous Sample Rate Converter, Maxim Integrated MAX98390 ZL38060 Connected Home Audio Processor, і I2C EEPROM Slave. Абноўлены код чысткі блобаў у драйверах і падсістэмах Adreno GPU, HabanaLabs Goya, x86 touchscreen, vt6656 і btbcm.
Крыніца: opennet.ru
