Рэліз ядра Linux 5.8

Пасля двух месяцаў распрацоўкі Лінус Торвальдс прадставіў рэліз ядра Linux 5.8. Сярод найболей прыкметных змен: дэтэктар станаў гонкі 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 рэалізавана падтрымка механізму
      Shadow-Call Stack, які прадастаўляецца кампілятарам Clang для абароны ад перазапісу адрасы вяртання з функцыі ў выпадку перапаўнення буфера ў стэку. Сутнасць абароны ў захаванні пасля перадачы кіравання функцыі адрасу звароту ў асобным "ценявым" стэку і выманні дадзенага адрасу перад вынахадам з функцыі.
    • Для платформы ARM64 дададзена падтрымка інструкцый ARMv8.5-BTI (Branch Target Indicator) для абароны выканання набораў інструкцый, на якія не павінны выконвацца пераходы пры галінаванні. Блакаванне пераходаў на адвольныя ўчасткі кода рэалізавана для процідзеяння стварэнню гаджэтаў у эксплоітах, якія выкарыстоўваюць прыёмы зваротна-арыентаванага праграмавання (ROP - Return-Oriented Programming, атакавалы не спрабуе размясціць свой код у памяці, а аперуе ўжо наяўнымі кавалкамі машынных інструкцый, завяршаюцца і завяршаюцца атрымання патрэбнай функцыянальнасці).
    • Дададзена падтрымка абсталявання для inline-шыфравання блокавых прылад (Inline Encryption). Прылады inlinep-шыфраванні звычайна ўбудаваны ў назапашвальнік, але лагічна размяшчаецца паміж сістэмнай памяццю і дыскам, ажыццяўляючы празрыстае шыфраванне і расшыфроўку ўводу/высновы на аснове зададзеных ядром ключоў і алгарытму шыфравання.
    • Дададзены параметр каманднага радка ядра «initrdmem», які дазваляе паказаць фізічны адрас размяшчэння initrd у памяці пры размяшчэнні пачатковай загрузнай выявы ў АЗП.
    • Дададзены новыя capability: CAP_PERFMON для доступу да падсістэмы perf і выкананні маніторынгу прадукцыйнасці. CAP_BPF, які дазваляе выкананне некаторых аперацый з BPF (напрыклад, загрузка BPF-праграм), якія раней патрабавалі правоў CAP_SYS_ADMIN (зараз паўнамоцтвы CAP_SYS_ADMIN падзелены на камбінацыю CAP_BPF, CAP_PERFMON і CAP_NET_ADMIN).
    • Дададзена новая прылада virtio-mem, якое дазваляе рэалізаваць гарачае падлучэнне і адключэнне памяці да гасцявых сістэм.
    • Рэалізаваны водгук аперацый мапінгу ў /dev/mem, калі драйвер прылады выкарыстоўвае перакрываюцца вобласці памяці.
    • Дададзена абарона ад уразлівасці CROSSTalk/SRBDS, якая дазваляе аднавіць вынікі выканання некаторых інструкцый, якія выконваюцца на іншым ядры CPU.
  • Памяць і сістэмныя сэрвісы
    • У дакумент, які вызначае правілы афармлення кода, прыняты рэкамендацыі па прымяненні інклюзіўнай тэрміналогіі. Распрацоўнікам не рэкамендуецца выкарыстоўваць звязкі 'master/slave' і 'blacklist/whitelist', а таксама асобна слова 'slave'. Рэкамендацыі датычацца толькі новага выкарыстання дадзеных тэрмінаў. Ужо існуючыя ў ядры згадкі названых слоў застануцца некранутымі. У новым кодзе выкарыстанне адзначаных тэрмінаў дазволенае калі таго патрабуе падтрыманне выдаванага ў прастору карыстача API і ABI, а таксама пры абнаўленні кода для падтрымкі існага абсталявання або пратаколаў, спецыфікацыі на якія прадпісваюць выкарыстанне вызначаных тэрмінаў.
    • У склад уключаны адладкавы інструмент KCSAN (Kernel Concurrency Sanitizer), прызначаны для дынамічнага выяўлення станаў гонкі ўнутры ядра. Выкарыстанне KCSAN падтрымліваецца пры зборцы ў GCC і Clang, і патрабуе дадання адмысловых мадыфікацый на этапе кампіляцыі для адсочвання доступу да памяці (ужываюцца кропкі супыну, якія спрацоўваюць пры чытанні ці змене памяці). Асноўная ўвага пры распрацоўцы KCSAN нададзена прадухіленні ілжывых спрацоўванняў, маштабаванасці і прастаце выкарыстання.
    • Дададзены універсальны механізм дастаўкі апавяшчэнняў з ядра ў прастору карыстальніка. Механізм заснаваны на штатным драйверы pipe і дазваляе эфектыўна размяркоўваць апавяшчэнні ад ядра па каналах, адчыненым у прасторы карыстача. Кропкі прыёму апавяшчэнняў уяўляюць сабой pipe-ы, адчыненыя ў адмысловым рэжыме і якія дазваляюць назапашваць у колцавым буферы якія паступаюць ад ядра паведамлення. Чытанне ажыццяўляецца звычайнай функцыяй read(). Уладальнік канала вызначае, якія з крыніц у ядры неабходна адсочваць і можа вызначыць фільтр для ігнаравання паведамленняў і падзей вызначанага тыпу. З падзей пакуль падтрымліваюцца толькі аперацыі з ключамі, такія як даданне/выдаленне ключоў і змена іх атрыбутаў. Паказаныя падзеі плануюць выкарыстоўваць у GNOME.
    • Працягнута развіццё функцыянальнасці 'pidfd', якая дапамагае апрацоўваць сітуацыі з паўторным выкарыстаннем PID (pidfd злучаецца з пэўным працэсам і не змяняецца, у той час як PID можа быць прывязаны да іншага працэсу пасля завяршэння бягучага працэсу, асацыяванага з гэтым PID). У новай версіі дададзена падтрымка выкарыстання pidfd для прымацавання працэсу да прастор імёнаў (дазволена ўказанне pidfd пры выкананні сістэмнага выкліку setns). Ужыванне pidfd дазваляе адным выклікам кіраваць прымацаваннем працэсу да некалькіх тыпаў прастор імёнаў, істотна скарачаючы лік неабходных сістэмных выклікаў і рэалізуючы прымацаванне ў атамарным рэжыме (калі пры прымацаванні да адной з прастор імёнаў паўстане збой, то не падлучацца і астатнія).
    • Дададзены новы сістэмны выклік faccessat2(), адрозны ад
      faccessat() дадатковым аргументам са сцягамі, якія адпавядаюць рэкамендацыям POSIX (раней дадзеныя сцягі эмуляваліся ў Сі-бібліятэцы, а новы faccessat2 дазваляе рэалізаваць іх у ядры).
    • У Cgroup дададзена настройка memory.swap.high, якую можна выкарыстоўваць для запаволення задач, якія займаюць занадта шмат месца ў раздзеле падпампоўкі.
    • У інтэрфейс асінхроннага ўводу/высновы io_uring дададзена падтрымка сістэмнага выкліку tee().
    • Дададзены механізм «BPF iterator, прызначаны для вываду ў прастору карыстальніка змесціва структур ядра.
    • Прадастаўлена магчымасць выкарыстання колцавага буфера для абмену дадзенымі паміж BPF-праграмамі.
    • У механізм padata, прызначаны для арганізацыі паралельнага выканання задач у ядры, дададзена падтрымка шматструменных задач з балансаваннем нагрузкі.
    • У механізм 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 палепшана апрацоўка памылкі ENOSPC пры выкарыстанні шматструменнасці. У xattr дададзена падтрымка прасторы імёнаў gnu.*, выкарыстоўванага ў GNU Hurd.
    • Для Ext4 і XFS уключаная падтрымка аперацый DAX (прамы доступ да ФС у абыход старонкавага кэша без ужывання ўзроўня блокавых прылад) у прывязцы да асобных файлаў і каталогам.
    • У сістэмны выклік statx() дададзены сцяг STATX_ATTR_DAX, пры ўказанні якога інфармацыя здабываецца з выкарыстаннем механізму DAX.
    • У EXFAT дададзена падтрымка верыфікацыі загрузнай вобласці.
    • У FAT палепшана папераджальная загрузка элементаў ФС. Тэставанне павольнага 2ТБ USB-назапашвальніка паказала скарачэнне часу праходжання цеста з 383 да 51 сек.
  • Сеткавая падсістэма
    • У код кіравання працай сеткавых мастоў дададзена падтрымка пратакола MRP (Media Redundancy Protocol), які дазваляе забяспечыць адмоваўстойлівасць, закальцаваўшы некалькі Ethernet-камутатараў.
    • У сістэму кіравання трафікам (Tc) дададзена новае дзеянне "gate", якое дае магчымасць вызначыць часавыя інтэрвалы для апрацоўкі і адкідванні пэўных пакетаў.
    • У ядро ​​і ўтыліту ethtool дададзена падтрымка функцый тэставання далучанага сеткавага кабеля і самодіагностікі сеткавых прылад.
    • У IPv6-стэк дададзена падтрымка алгарытму MPLS (Multiprotocol Label Switching) для маршрутызацыі пакетаў з выкарыстаннем шматпратакольнай камутацыі па пазнаках (для IPv4 MPLS падтрымліваўся і раней).
    • Дададзена падтрымка перадачы пакетаў IKE (Internet Key Exchange) і IPSec па-над TCP (RFC 8229) для абыходу магчымых блакіровак UDP.
    • Дададзена сеткавая блокавая прылада rnbd, якое дазваляе арганізаваць выдалены доступу да блокавай прылады пры дапамозе транспарта RDMA (InfiniBand, RoCE, iWARP) і пратаколу RTRS.
    • У TCP-стэку дададзена падтрымка сціску дыяпазонаў ў адказах выбарачнага пацверджання (selective acknowledgment, SACK).
    • Для IPv6 рэалізавана падтрымка TCP-LD (RFC 6069, 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 забяспечана падтрымка вымання інфармацыі аб энергаспажыванні праз інтэрфейс RAPL (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 і заснаванай на ім сістэмы на крышталі BE-T1000. Працэсар 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.

Адначасова лацінаамерыканскі Фонд вольнага ПЗ сфармаваў
варыянт цалкам вольнага ядра 5.8 - Linux-libre 5.8-gnu, вычышчанага ад элементаў прашывак і драйвераў, якія змяшчаюць нявольныя кампаненты або ўчасткі кода, вобласць ужывання якіх абмежавана вытворцам. У новым выпуску адключаная загрузка блобаў у драйверах для 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

Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы 🔥 Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы | ProHoster