Издание на кернелот 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 MB (промените влијаеја на 14108 датотеки, додадени се 730195 линии код, избришани се 409485 линии). Околу 42% од сите промени воведени во 6.2 се поврзани со двигатели на уреди, приближно 16% од промените се поврзани со ажурирање код специфичен за хардверските архитектури, 12% се поврзани со мрежниот стек, 4% се поврзани со датотечни системи и 3% се поврзани со внатрешните потсистеми на јадрото.

Главните иновации во кернелот 6.2:

  • Мемориски и системски услуги
    • Дозволено е да се вклучат во кодот на јадрото и промените обезбедени според лиценцата Copyleft-Next 0.3.1. Лиценцата Copyleft-Next е креирана од еден од авторите на GPLv3 и е целосно компатибилна со лиценцата GPLv2, како што потврдија адвокатите од SUSE и Red Hat. Во споредба со GPLv2, лиценцата Copyleft-Next е многу покомпактна и полесна за разбирање (воведниот дел и споменувањето на застарените компромиси се отстранети), ја дефинира временската рамка и постапката за елиминирање на прекршувањата и автоматски ги отстранува барањата за copyleft за застарениот софтвер што има повеќе од 15 години.

      Copyleft-Next, исто така, содржи клаузула за грантови за сопствена технологија, која, за разлика од GPLv2, ја прави оваа лиценца компатибилна со лиценцата Apache 2.0. За да се обезбеди целосна компатибилност со GPLv2, Copyleft-Next експлицитно наведува дека изведено дело може да се обезбеди под лиценцата GPL како додаток на оригиналната лиценца Copyleft-Next.

    • Структурата ја вклучува алатката „rv“, која обезбедува интерфејс за интеракција од корисничкиот простор со ракувачите на потсистемот RV (Потврда за време на траење), дизајниран да ја провери правилната работа на високосигурни системи кои гарантираат отсуство на дефекти. Верификацијата се врши при извршување со прикачување на управувачи на точки во трага кои го проверуваат вистинскиот напредок на извршувањето според однапред определен референтен детерминистички модел на машината што го дефинира очекуваното однесување на системот.
    • Уредот zRAM, кој дозволува swap партицијата да се складира во меморијата во компресирана форма (во меморијата се создава блок уред на кој се врши замена со компресија), ја имплементира можноста за повторно пакување страници користејќи алтернативен алгоритам за да се постигне повисоко ниво на компресија. Главната идеја е да се обезбеди избор помеѓу неколку алгоритми (lzo, lzo-rle, lz4, lz4hc, zstd), нудејќи свои компромиси помеѓу брзината на компресија/декомпресија и нивото на компресија, или оптимално во посебни ситуации (на пример, за компресија на големи мемориски страници).
    • Додадено е „iommufd“ API за управување со системот за управување со I/O меморија - IOMMU (I/O Memory-Management Unit) од корисничкиот простор. Новиот API овозможува управување со I/O мемориски табели на страници користејќи дескриптори на датотеки.
    • BPF обезбедува можност за креирање типови, дефинирање на сопствени објекти, градење сопствена хиерархија на објекти и флексибилно креирање на сопствени структури на податоци, како што се поврзани списоци. За програмите BPF кои влегуваат во режим на мирување (BPF_F_SLEEPABLE), додадена е поддршка за бравите bpf_rcu_read_{,un}lock(). Спроведена поддршка за зачувување на објектите на task_struct. Додаден е тип на карта BPF_MAP_TYPE_CGRP_STORAGE, обезбедувајќи локално складирање за cгрупи.
    • За механизмот за блокирање RCU (Read-copy-update), имплементиран е изборен механизам на „мрзливи“ повици за повратен повик, во кој неколку повратни повици се обработуваат одеднаш со помош на тајмер во сериски режим. Примената на предложената оптимизација ни овозможува да ја намалиме потрошувачката на енергија на уредите со Android и ChromeOS за 5-10% со одложување на барањата за RCU за време на мирување или мало оптоварување на системот.
    • Додадено е sysctl split_lock_mitigate за да контролира како системот реагира кога детектира поделени заклучувања што се појавуваат при пристап до неусогласени податоци во меморијата поради преминувањето на податоците во две кеш линии на процесорот при извршување на атомска инструкција. Ваквите блокади доведуваат до значителен пад на перформансите. Поставувањето split_lock_mitigate на 0 издава само предупредување дека има проблем, додека поставувањето на split_lock_mitigate на 1, исто така, предизвикува процесот што предизвика забавување на заклучувањето за да се зачуваат перформансите за остатокот од системот.
    • Предложена е нова имплементација на qspinlock за архитектурата PowerPC, која покажува повисоки перформанси и решава некои проблеми со заклучувањето што се јавуваат во исклучителни случаи.
    • Кодот за ракување со прекини со сигнал MSI (Прекини со сигнали за пораки) е преработен, елиминирајќи ги акумулираните архитектонски проблеми и додавајќи поддршка за врзување поединечни ракувачи со различни уреди.
    • За системи базирани на архитектурата на множеството инструкции LoongArch што се користат во процесорите Loongson 3 5000 и го имплементираат новиот RISC ISA, сличен на MIPS и RISC-V, имплементирана е поддршка за ftrace, заштита од стек, режими за мирување и мирување.
    • Обезбедена е можноста за доделување имиња на области на споделена анонимна меморија (претходно имињата можеа да се доделуваат само на приватна анонимна меморија доделена на одреден процес).
    • Додаден е нов параметар на командната линија на кернелот „trace_trigger“, дизајниран да активира активирач за трага што се користи за поврзување на условни команди повикани кога се активира контролна проверка (на пример, trace_trigger=”sched_switch.stacktrace ако prev_state == 2″).
    • Барањата за верзијата на пакетот binutils се зголемени. За изградба на кернелот сега се потребни најмалку binutils 2.25.
    • Кога се повикува exec(), додадена е способноста да се постави процес во временски именски простор, во кој времето се разликува од времето на системот.
    • Почнавме да пренесуваме дополнителна функционалност од гранката Rust-for-Linux поврзана со употребата на јазикот Rust како втор јазик за развој на двигатели и модули на јадрото. Поддршката за Rust е стандардно оневозможена и не резултира со вклучување на Rust како задолжителна зависност за изградба на јадрото. Основната функционалност понудена во последното издание е проширена за да поддржува код на ниско ниво, како што се типот Vec и макроата pr_debug!(), pr_cont!() и pr_alert!(), како и процедуралното макро „#[vtable ]“, што ја поедноставува работата со табели со покажувачи на функции. Во идните изданија се очекува додавање на врзувања на Rust на високо ниво преку потсистемите на јадрото, што ќе овозможи создавање на полноправни двигатели во Rust.
    • Типот „char“ што се користи во кернелот сега е стандардно прогласен за непотпишан за сите архитектури.
    • Механизмот за распределба на меморијата на плочата - SLOB (распределувач на плочи), кој беше дизајниран за системи со мала количина на меморија, е прогласен за застарен. Наместо SLOB, во нормални услови се препорачува да се користи SLUB или SLAB. За системи со мала количина на меморија, се препорачува да се користи SLUB во режим SLUB_TINY.
  • Подсистем на диск, В/И и датотечни системи
    • Направени се подобрувања на Btrfs со цел да се поправат проблемот со „дупката за запишување“ во имплементациите на RAID 5/6 (обид да се врати RAID ако се случи пад за време на пишувањето и невозможно е да се разбере кој блок на кој уред RAID е правилно напишан, што може да доведе до уништување на блокови, што одговара на преземените блокови). Дополнително, SSD-овите сега автоматски овозможуваат асинхрона операција за отфрлање по дифолт кога е можно, овозможувајќи подобрени перформанси поради ефикасното групирање на операциите за отфрлање во редици и обработка на редот со процесор во заднина. Подобрени перформанси на операциите за испраќање и барање, како и на FIEMAP ioctl.
    • Проширени се можностите за управување со одложено пишување (запишување, зачувување на променети податоци во заднина) за блок уреди. Во некои ситуации, како на пример кога користите мрежни блок уреди или USB-дискови, мрзливото пишување може да резултира со голема потрошувачка на RAM меморија. Со цел да се контролира однесувањето на мрзливите записи и да се задржи големината на кешот на страницата во одредени граници, во sysfs (/sys/class/bdi/) се воведени нови параметри strict_limit, min_bytes, max_bytes, min_ratio_fine и max_ratio_fine.
    • Датотечниот систем F2FS имплементира операција за атомска замена ioctl, која ви овозможува да пишувате податоци во датотека во рамките на една атомска операција. F2FS, исто така, додава кеш со обем на блок за да помогне да се идентификуваат активно користените податоци или податоци до кои не се пристапувало долго време.
    • Во ext4 FS се забележуваат само корекции на грешки.
    • Датотечниот систем ntfs3 нуди неколку нови опции за монтирање: „nocase“ за контрола на чувствителноста на букви во имињата на датотеките и директориумите; windows_name да го забрани создавањето имиња на датотеки што содржат знаци што не се валидни за Windows; hide_dot_files за контрола на доделувањето на етикетата на скриените датотеки за датотеките што почнуваат со точка.
    • Датотечниот систем Squashfs имплементира опција за монтирање „threads=“, која ви овозможува да го дефинирате бројот на нишки за паралелизирање на операциите за декомпресија. Squashfs, исто така, воведе можност за мапирање на кориснички ID на монтирани датотечни системи, кои се користат за усогласување на датотеките на одреден корисник на монтирана странска партиција со друг корисник на тековниот систем.
    • Имплементацијата на списоците за контрола на пристап POSIX (POSIX ACLs) е преработена. Новата имплементација ги елиминира архитектонските проблеми, го поедноставува одржувањето на базата на кодови и воведува побезбедни типови на податоци.
    • Подсистемот fscrypt, кој се користи за транспарентно шифрирање на датотеки и директориуми, додаде поддршка за алгоритмот за шифрирање SM4 (кинески стандард GB/T 32907-2016).
    • Обезбедена е можност за градење на кернелот без поддршка за NFSv2 (во иднина планираат целосно да престанат да го поддржуваат NFSv2).
    • Организацијата на проверка на правата за пристап до уредите NVMe е променета. Обезбедува можност за читање и пишување на уред NVMe доколку процесот на пишување има пристап до посветената датотека на уредот (претходно процесот мораше да има дозвола CAP_SYS_ADMIN).
    • Отстранет двигателот на пакетот за ЦД/ДВД, кој беше застарен во 2016 година.
  • Виртуелизација и безбедност
    • Нов метод за заштита од ранливоста на Retbleed е имплементиран во процесорите на Intel и AMD, користејќи следење на длабочината на повиците, што не ја забавува работата толку многу како претходно присутната заштита од Retbleed. За да се овозможи новиот режим, предложен е параметарот на командната линија на јадрото „retbleed=stuff“.
    • Додаден е хибриден механизам за заштита на протокот на инструкции FineIBT, комбинирајќи ја употребата на хардверски инструкции Intel IBT (Индиректно следење на гранки) и софтверска заштита kCFI (интегритет на контролниот тек на кернелот) за да го блокира прекршувањето на нормалниот редослед на извршување (контролен тек) како резултат на употребата на експлоатирања кои ги менуваат покажувачите зачувани во меморијата на функциите. FineIBT дозволува извршување со индиректен скок само во случај на скок до инструкцијата ENDBR, која е поставена на самиот почеток на функцијата. Дополнително, по аналогија со механизмот kCFI, хашовите потоа се проверуваат за да се гарантира непроменливоста на покажувачите.
    • Додадени се ограничувања за блокирање на напади кои манипулираат со генерирање на состојби „упс“, по што се завршуваат проблематичните задачи и состојбата се враќа без запирање на системот. Со многу голем број повици до состојбата „упс“, се случува прелевање на референтниот бројач (refcount), што овозможува искористување на пропустите предизвикани од дереференци на покажувачот NULL. За да се заштити од такви напади, на јадрото е додадено ограничување за максимален број на предизвикувачи на „упс“, по надминувањето на кернелот ќе започне транзиција во состојба „панична“ проследена со рестартирање, што нема да дозволи да се постигне број на повторувања потребни за да се прелее повторното броење. Стандардно, ограничувањето е поставено на 10 илјади „упс“, но ако сакате, може да се смени преку параметарот oops_limit.
    • Додаден е параметар за конфигурација LEGACY_TIOCSTI и sysctl legacy_tiocsti за да се оневозможи можноста за ставање податоци во терминалот со помош на ioctl TIOCSTI, бидејќи оваа функционалност може да се користи за замена на произволни знаци во тампонот за влез на терминалот и симулирање на внесување на корисникот.
    • Се предлага нов тип на внатрешна структура, encoded_page, во која долните битови на покажувачот се користат за складирање на дополнителни информации што се користат за заштита од случајно дереференцирање на покажувачот (ако е всушност неопходно дереференцирање, овие дополнителни битови мора прво да се исчистат) .
    • На платформата ARM64, во фазата на подигање, можно е да се овозможи или оневозможи софтверската имплементација на механизмот Shadow Stack, кој се користи за заштита од препишување на повратната адреса од функција во случај на прелевање на баферот на оџакот ( Суштината на заштитата е да се зачува повратната адреса во посебен стек „сенка“ откако контролата ќе се префрли на функцијата и ќе се врати дадената адреса пред да излезете од функцијата). Поддршката за хардверски и софтверски имплементации на Shadow Stack во едно склопување на кернелот ви овозможува да користите едно јадро на различни системи на ARM, без оглед на нивната поддршка за инструкции за автентикација на покажувачот. Вклучувањето на имплементација на софтвер се врши преку замена на потребните инструкции во кодот за време на вчитувањето.
    • Додадена е поддршка за користење на механизмот за известување за асинхрони излези на процесорите на Intel, што овозможува откривање напади во еден чекор на кодот извршен во енклавите 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, PLB случајно ги менува патеките на пакетите за да го балансира оптоварувањето на портите на прекинувачите. За да се намали повторното подредување пакети, оваа операција се изведува по периоди на мирување секогаш кога е можно. Употребата на PLB во центрите за податоци на Google го намали нерамнотежата на оптоварувањето на портите на прекинувачите во просек за 60%, ја намали загубата на пакети за 33% и ја намали доцнењето за 20%.
    • Додаден е драјвер за уредите MediaTek кои поддржуваат Wi-Fi 7 (802.11be).
    • Додадена е поддршка за 800-гигабитни врски.
    • Додадена е можност за преименување на мрежните интерфејси во лет, без прекин на работата.
    • Спомнувањето на IP-адресата на која пристигна пакетот е додадено во пораките од дневникот за SYN flood.
    • За UDP, имплементирана е можноста за користење на посебни табели за хаш за различни мрежни имиња на простори.
    • За мрежни мостови, имплементирана е поддршка за методот за автентикација MAB (MAC Authentication Bypass).
    • За протоколот CAN (CAN_RAW), имплементирана е поддршка за режимот на приклучок SO_MARK за прикачување на сообраќајни филтри базирани на fwmark.
    • ipset имплементира нов параметар на битмаска што ви овозможува да поставите маска врз основа на произволни битови во IP адресата (на пример, „ipset create set1 hash:ip bitmask 255.128.255.0“).
    • Додадена е поддршка за обработка на внатрешни заглавија во тунелирани пакети до nf_tables.
  • Оборудование
    • Подсистемот „accel“ е додаден со имплементација на рамка за пресметковни акцелератори, кои можат да се обезбедат или во форма на поединечни ASIC или во форма на IP блокови во SoC и GPU. Овие акцелератори главно се насочени кон забрзување на решавањето на проблемите со машинското учење.
    • Двигателот amdgpu вклучува поддршка за компонентите GC, PSP, SMU и NBIO IP. За системите ARM64, имплементирана е поддршка за DCN (Display Core Next). Имплементацијата на излезот на заштитен екран е преместена од користење DCN10 на DCN21 и сега може да се користи при поврзување на повеќе екрани.
    • Возачот за i915 (Intel) има стабилизирана поддршка за дискретни видео картички Intel Arc (DG2/Alchemist).
    • Возачот Nouveau поддржува графички процесори NVIDIA GA102 (RTX 30) базирани на архитектурата Ampere. За nva3 (GT215) картичките, додадена е способност за контрола на позадинското осветлување.
    • Додадена е поддршка за безжични адаптери засновани на Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) и MediaTek MT7996 чипови, Broadcom BCM4377/4378/4387 Bluetooth интерфејси, како и Motorcomm ENG, NDI.
    • Додадена е поддршка за 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 SM460dragon 6375), табли , SDM695 (Snapdragon 670), MSM670 (Snapdragon 8976), MSM652 (Snapdragon 8956), RK650 Odroid-Go/rg3326, Zyxel NSA351S, InnoComm i.MX310MM, Odroid.

Во исто време, Латиноамериканската Фондација за слободен софтвер формираше верзија на целосно бесплатното јадро 6.2 - Linux-libre 6.2-gnu, исчистено од елементи на фирмверот и драјвери кои содржат сопственички компоненти или делови од код, чиј опсег е ограничен со производителот. Новото издание чисти нови дамки во нуво возачот. Вчитувањето на Blob е оневозможено во mt7622, ​​mt7996 wifi и bcm4377 bluetooth драјвери. Исчистени имиња на точки во датотеките dts за архитектурата Aarch64. Ажуриран код за чистење на дамки во различни драјвери и потсистеми. Престана да го чисти двигателот s5k4ecgx, бидејќи беше отстранет од јадрото.

Извор: opennet.ru

Додадете коментар