Издаване на ядрото на Linux 5.2

След талантливата разработка на Линус Торвалдс представи е публикувана Linux 5.2. Сред най-забележителните промени: режимът на работа на Ext4 без разлика в регистъра на символите, отделни системни повици за монтиране на ФС, драйвери за GPU Mali 4xx/6xx/7xx, възможност за обработка на промяната на стойностите на sysctl в програмите BPF, модулът device-mapper dm-dust, защита от атаки MDS, поддръжка на Sound Open Firmware за DSP, оптимизация на производителността BFQ, развитие на подсистемата PSI (Pressure Stall Information) до възможност за използване в Android.

В новата версия са приети 15100 поправки от 1882 разработчици,
размер на пача — 62 Мб (промените засягнаха 30889 файла, добавени 625094 реда код, изтрити 531864 реда). Около 45% от всички представени в 5.2
промени са свързани с драйверите на устройства, около 21% от промените имат
отношение към обновяване на кода, специфичен за хардуерни архитектури, 12%
е свързано с мрежовия стек, 3% — с файловите системи и 3% — с вътрешните
ядра. 12.4% от всички промени са подготвени от компанията Intel, 6.3% — от Red Hat, 5.4% — от Google, 4.0% — от AMD, 3.1% — от SUSE, 3% — от IBM, 2.7% — от Huawei, 2.7% — от Linaro, 2.2% — от ARM, 1.6% — от Oracle.

Основни нововъведения:

  • Дискова подсистема, вход/изход и файлови системи
    • За Ext4 е добавен подкрепа работи без значение на регистра на символи в имената на файловете, активираща се само във връзка с отделни празни каталози с помощта на нов атрибут «+F» (EXT4_CASEFOLD_FL). При настройване на този атрибут на каталог всички операции с файловете и подкаталозите в него ще се извършват без да се отчита регистра на символите, включително регистрата ще бъде игнорирана при операции по търсене и отваряне на файлове (например, файловете Test.txt, test.txt и test.TXT в подобни каталози ще се считат за идентични). По подразбиране файловата система остава чувствителна на регистъра, с изключение на каталозите с атрибута «chattr +F»;
    • Унифицирани функции за обработка на символи UTF-8 в имената на файловете, които се използват при изпълнение на операции за сравняване и нормализация на низове;
    • В XFS е добавена инфраструктура за проследяване състоянието на файловата система и нов ioctl за запитване на статуса на работоспособността. Реализирана е експериментална възможност за проверка на лето (online scrub) на броячи на суперблока.
    • Добавен е нов модул device-mapper «dm-dust«, който позволява симулиране на появата на дефектни блокове на носителя или грешки при четене от диска. Модулът опростява отстраняването на грешки и тестването на приложения и различни системи за съхранение в условия на възможни сбои;
    • Извършена значителна оптимизация на производителността на планиращия модул за вход/изход BFQ. В условия на високо натоварване на вход/изход направените оптимизации позволяват до 80% намаляване на времето за операции като стартиране на приложения;
    • Добавена е серия системни повиквания за монтиране на файлови системи: fsopen(), open_tree(), fspick(), fsmount(), fsconfig() и move_mount(). Тези системни повиквания дават възможност за отделна обработка на различни етапи на монтиране (обработка на суперблока, получаване на информация за файловата система, монтиране, прикрепване към точка на монтиране), които преди се изпълняваха с общото системно повикване mount(). Отделните повиквания позволяват извършването на по-сложни сценарии на монтиране и самостоятелно изпълнение на операции като пренастройка на суперблока, активиране на опции, промяна на точката на монтиране и преместване в друго пространство от имена. Освен това, отделната обработка дава възможност за точно определяне на причините за връщане на кодове за грешки и задаване на няколко източника за многослойни файлови системи, като overlayfs;
    • В интерфейса за асинхронен вход/изход io_uring е добавена нова операция IORING_OP_SYNC_FILE_RANGE, извършваща действия, еквивалентни на системно повикване sync_file_range(), както и е реализирана възможност за регистрация на eventfd с io_uring и получаване на известия за завършване на операции;
    • За файловата система CIFS е добавен ioctl FIEMAP, осигуряващ ефективно сопоставяне на екстенти, както и поддръжка на режимите SEEK_DATA и SEEK_HOLE;
    • В подсистемата FUSE е предложен API за управление на кеширането на данни;
    • В Btrfs е проведена оптимизация на реализацията на qgroups и е увеличена скоростта на изпълнение на fsync за файлове с множество твърди връзки. Подобрено е кода за проверка на целостта на данните, който сега отчита възможни повреди на информацията в ОЗУ преди записването на данните на диск;
    • В CEPH е добавена поддръжка за експортиране на моментни снимки чрез NFS;
    • Подобрена е реализацията на монтиране на NFSv4 в режим «soft» (при възникване на грешка при достъп до сървъра в режим «soft» се връща веднага код на грешка, а в режим «hard» контролът не се възстановява, докато не се възобнови достъпността на файловата система или таймаут). В новото издание е осигурена по-точна обработка на таймаута, ускорено е възстановяването след срив и е добавена нова опция за монтиране «softerr», която позволява промяна на кода на грешка (ETIMEDOUT), върнат при настъпване на таймаут;
    • В API nfsdcld, предназначенном за проследяване на състоянието на клиентите NFS, е осигурена възможност за коректно проследяване от страна на NFS-сервера състоянието на клиента при рестартиране. По този начин демонът nfsdcld вече може да изпълнява ролята на обработчик nfsdcltrack;
    • За AFS е добавена емулация на блокировки на байтови диапазони във файловете (Заключване на байтови диапазони);
  • Виртуализация и безопасност
    • Извършена е работа по отстраняване на места в ядрото, допускащи изпълнение на код от достъпни за запис отражения на области памет, което позволява блокиране на потенциални пропуски, които могат да бъдат експлоатирани при атака;
    • Добавен е нов параметър на командния ред на ядрото «mitigations=», предоставящ опростен начин за управление на включването на различни техники за защита от уязвимости, свързани с спекулативното изпълнение на инструкции в CPU. Предаването на «mitigations=off» изключва всички налични методи, а прилаганият по подразбиране режим «mitigations=auto» включва защита, но не влияе на използването на Hyper Threading. Режимът «mitigations=auto,nosmt» допълнително изключва Hyper Threading, ако това изисква методът на защита.
    • Добавена е поддръжка на електронен цифров подпис по ГОСТ Р 34.10-2012 (RFC 7091, ISO/IEC 14888-3), разработена Виталий Чикунов от «Базальт СПО» добави поддръжка на AES128-CCM в вградената реализация на TLS. Поддръжката на алгоритми AEAD беше добавена в модула crypto_simd;
    • В Kconfig е добавена отделна секция «kernel hardening» с опции за усилване на защитата на ядрото. В настоящия момент новата секция включва само настройки за активиране на усиливащите проверки на GCC плъгини;
    • Кодът на ядрото почти освободен от непрекъснати изрази case в switch (без return или break след всеки блок case). Остава да се коригират 32 от 2311 случая на подобно използване на switch, след което при компилирането на ядрото може да се прилага режим «-Wimplicit-fallthrough»;
    • За архитектурата PowerPC е реализирана поддръжка на хардуерни механизми за ограничаване на нежеланите пътища за достъп на ядрото до данни в пространството на потребителя;
    • Добавен е код за блокиране на атаки клас MDS (Microarchitectural Data Sampling) в процесорите Intel. Уязвимостта може да бъде проверена чрез SysFS променливата «/sys/devices/system/cpu/vulnerabilities/mds». Наличен два режима на защита: пълен, изискващ наличие на актуализиран микрокод, и обходен, който не гарантира напълно почистване на буферите на CPU при прехвърляне на управлението в потребителското пространство или виртуалната система. За управление на режимите на защита в ядрото е добавен параметърът «mds=», който може да приема стойности «full», «full,nosmt» (+ изключване на Hyper-Threads) и «off»;
    • На системи x86-64 за IRQ, механизми за отстраняване на грешки и обработчици на изключения е добавена защита «stack guard-page», чиято същност е подмяна на страниците памет на границата със стека, до които достъпът води до генериране на изключение (page-fault);
    • Добавена sysctl-настройка vm.unprivileged_userfaultfd, управляваща възможността за използване на системния повик userfaultfd() от непривилегировани процеси;
  • Мрежовата подсистема
    • Добавена е поддръжка на IPv6 шлюзове за IPv4 маршрути. Например, сега можете да задавате правила за маршрутизация като «ip ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0»;
    • За ICMPv6 са реализирани ioctl-визивания icmp_echo_ignore_anycast и icmp_echo_ignore_multicast за игнориране на ICMP ECHO за anycast и
      multicast адреси. Добавена е възможност за ограничаване на интензивността на обработка на пакети ICMPv6;
    • За mesh протокола B.A.T.M.A.N. («Better Approach To Mobile Adhoc Networking»), който позволява създаването на децентрализирани мрежи, всяка възел е свързана чрез съседни възли, е добавена поддръжка на транслация от multicast в unicast, както и възможност за управление чрез sysfs;
    • В ethtool добавен нов параметър Fast Link Down, позволяващ съкращаване на времето за получаване на информация за събитие на изключване на линка за 1000BaseT (в нормални условия закъснението е до 750ms);
    • Появи се възможността привязки на тунели Foo-Over-UDP към определен адрес, мрежов интерфейс или сокет (предишната привързаност е била само по обща маска);
    • В безжичния стек осигурена възможност за реализиране на обработчици
      OWE (Opportunistic Wireless Encryption) в потребителското пространство;
    • В Netfilter в веригите nat е добавена поддръжка на семейството адреси inet (например, сега може да се използва едно правило за транслация за обработка на ipv4 и ipv6, без разделяне на правилата за ipv4 и ipv6);
    • В netlink добавен режим строга проверка за коректност на всички съобщения и атрибути, при който не се допуска превишаване на очаквания размер на атрибутите и е забранено добавянето на допълнителни данни в края на съобщенията;
  • Памет и системни услуги
    • В системния извикване clone() е добавен флаг CLONE_PIDFD, при указване на който на родителския процес се връща файлов дескриптор «pidfd», идентифициран с създадения дочерен процес. Този файлов дескриптор, например, може да се използва за изпращане на сигнали без опасение от състезателно състояние (веднага след изпращането на сигнала целевият PID може да бъде освободен поради завършване на процеса и зает от друг процес);
    • За втората версия на cgroups е добавена функционалност на контролера freezer, чрез който може да се спре работата в cgroup и временно да се освободят някои ресурси (CPU, вход/изход и потенциално дори памет) за изпълнение на други задачи. Управлението се извършва чрез управляващите файлове cgroup.freeze и cgroup.events в дървото на cgroup. Записването на 1 в cgroup.freeze замразява процесите в текущия cgroup и всички дочерни групи. Тъй като замразяването изисква известно време, допълнително е предложен файл cgroup.events, през който може да се разбере за приключването на операцията;
    • Осигурено е експорт на атрибути на паметта, прикрепени към всеки възел в sysfs, което позволява от потребителското пространство да се определи характерът на обработката на банките памет в системи с хетерогенна памет;
    • Подсистемата PSI (Pressure Stall Information) е подобрена, за да позволи анализ на информацията за времето на изчакване на различни ресурси (CPU, памет, вход/изход) за определени задачи или набори от процеси в cgroup. Чрез PSI, обработчиците в потребителското пространство могат по-точно да оценят нивото на натовареност на системата и характера на забавянията в сравнение с Load Average. В новата версия е осигурена поддръжка за настройка на прагове на чувствителност и възможност за използване на системния повик poll() за получаване на уведомление за задействане на зададените прагови стойности за определен период от време. Тази функция позволява в Android да се организира проследяване на недостиг на памет на ранна стадия, да се определи източникът на проблемите и да се приключат неважни приложения, без да се стигне до появата на видими проблеми за потребителя. При стрес-тестовете средствата за мониторинг на потреблението на памет на базата на PSI показаха 10 пъти по-малко фалшиви срабатывания в сравнение с статистиката vmpressure;
    • Оптимизация на кода за проверка на BPF-програми, която за големи програми сега изпълнява проверката до 20 пъти по-бързо. Оптимизацията позволява увеличаване на лимита за размер на BPF-програмите от 4096 до един милион инструкции;
    • За BPF-програми е предоставена възможност за достъп до глобални данни, което позволява определянето на глобални променливи и константи в програмите;
    • Добавен е API, позволяващ контрол над промените в параметрите sysctl от BPF-програмите;
    • За архитектура MIPS32 е реализиран JIT-компилатор за виртуалната машина eBPF;
    • За 32-битова архитектура PowerPC е добавена поддръжка на инструмента за отстраняване на грешки KASan (Kernel address sanitizer), който осигурява откритие на грешки при работа с памет;
    • На системите x86-64 е премахнато ограничението за разполагане на дъмпове на състоянието при срив на ядрото (crash-dump) в области на паметта над 896MB;
    • За архитектура s390 е реализирана поддръжка на рандомизация на адресното пространство на ядрото (KASLR) и възможност за верификация на цифрови подписи при зареждане на ядрото чрез kexec_file_load();
    • За архитектура PA-RISC е добавена поддръжка на ядрения отладчик (KGDB), етикети за преход и kprobes;
  • Оборудване
    • В состав включён драйвер Lima за GPU Mali 400/450, използван в много стари чипове, базирани на архитектура ARM. За по-новите GPU Mali е добавен драйвер Panfrost, който поддържа чипове на базата на микроархитектури Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) и Bifrost (Mali G3x, G5x, G7x);
    • Добавена е поддръжка на звукови устройства, използващи открити фърмуер; Sound Open Firmware (SOF). Въпреки присъствието на отворени драйвери, кодовете на фърмуерите за звуковите чипове все още остават затворени и се доставят в бинарен вид. Проектът Sound Open Firmware е разработен от Intel за създаване на открити фърмуери за DSP-чипове, свързани с обработка на звук (по-късно Google също се включи в разработката). В момента по проекта вече са подготвени открити фърмуери за звуковите чипове на платформите Intel Baytrail, CherryTrail, Broadwell, ApolloLake, GeminiLake, CannonLake и IceLake;
    • В DRM-драйвера на Intel (i915) е добавена поддръжка на чипове
      Elkhartlake (Gen11). Добавени са PCI-идентификатори за чипове Comet Lake (Gen9). Стабилизирана е поддръжката на чипове Icelake, за които също са добавени допълнителни PCI-идентификатори на устройства.
      Включено
      Режим на асинхронно превключване между два буфера в видеопаметта (async flip) при изпълнение на операции по запис чрез mmio, което значително увеличава производителността на някои 3D приложения (например, производителността в теста 3DMark Ice Storm се увеличи с 300-400%). Добавена е поддръжка на технологията HDCP2.2 (Защита на цифрово съдържание с висока пропускателна способност) за криптиране на видеосигнала, предавам чрез HDMI;
    • В драйвера amdgpu за GPU Vega20 е добавена е добавена поддръжка на RAS (надеждност, наличност, обслужваемост) и експериментална поддръжка на подсистемата SMU 11, заменяща технологията Powerplay. За GPU Vega12 е добавена е добавена поддръжка на режима BACO (активна шина, чип изключен). Добавена е начален поддръжка на XGMI, високоскоростна шина (PCIe 4.0) за свързване на GPU. В драйвера amdkfd са добавени липсващите идентификатори на карти на базата на GPU Polaris10;
    • В драйвера Nouveau е добавена поддръжка на карти, базирани на чипсета NVIDIA Turing 117 (TU117, използван в GeForce GTX 1650). В
      kconfig е добавена настройката за деактивиране на остарели функции, които вече не се използват в актуалните версии libdrm;
    • В API DRM и драйвера amdgpu е добавена поддръжка на обекти за синхронизация «timeline», позволяващи да се заобиколят класическите блокировки.
    • От клон staging е преместен драйвера vboxvideo в основния състав за виртуален GPU VirtualBox;
    • Добавен е драйвер aspeed за GFX чипа SoC ASPEED;
    • Добавена е поддръжка на ARM SoC и платформи Intel Agilex (SoCFPGA), NXP i.MX8MM, Allwinner (RerVision H3-DVK (H3), Oceanic 5205 5inMFD, Beelink GS2 (H6), Orange Pi 3 (H6)), Rockchip (Orange Pi RK3399, Nanopi NEO4, Veyron-Mighty Chromebook), Amlogic: SEI Robotics SEI510,
      ST Micro (stm32mp157a, stm32mp157c), NXP (
      Eckelmann ci4x10 (i.MX6DL),

      i.MX8MM EVK (i.MX8MM),

      ZII i.MX7 RPU2 (i.MX7),

      ZII SPB4 (VF610),

      Zii Ultra (i.MX8M),

      TQ TQMa7S (i.MX7Solo),

      TQ TQMa7D (i.MX7Dual),

      Kobo Aura (i.MX50),

      Menlosystems M53 (i.MX53)), NVIDIA Jetson Nano (Tegra T210).

В същото време Латиноамериканският Фонд за свободен софтуер сформира
вариант напълно свободното ядро 5.2 — Linux-libre 5.2-gnu, премахнато от елементи на фърмуера и драйверите, които съдържат несвободни компоненти или участъци от код, чиято употреба е ограничена от производителя. В новото издание е включено зареждането на файлове
Sound Open Firmware. Изключено е зареждането на блобове в драйверите
mt7615, rtw88, rtw8822b, rtw8822c, btmtksdio, iqs5xx, ishtp и ucsi_ccg. Актуализиран е кодът за почистване на блобове в драйверите и подсистемите ixp4xx, imx-sdma, amdgpu, nouveau и goya, а също и в документацията за микрокод. Прекратено е почистването на блобове в драйвера r8822be поради неговото изтриване.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster