Релиз на ядро Linux 5.8

След талантливата разработка на Линус Торвалдс представи е публикувана Linux 5.8. Сред най-забележителните промени: детектор на състояния на гонка KCSAN, универсален механизъм за доставка на уведомления в потребителско пространство, поддръжка на оборудване за inline криптиране, разширени механизми за защита за ARM64, поддръжка на руския процесор Baikal-T1, възможност за отделно монтиране на экземпляри procfs, реализиране на механизми за защита Shadow Call Stack и BTI за ARM64.

Ядрото 5.8 стана най-голямото по брой промени от всички ядрота в историята на проекта. Промените не са свързани с една подсистема, а обхващат различни части на ядрото и основно са свързани с вътрешни преорганизации и почистване. Най-много промени се наблюдават в драйверите. В новата версия са приети 17606 корекции от 2081 разработчици, които засягат около 20% от всички файлове в репозитория с код на ядрото. Размерът на пача е 65 MB (промените засягат 16180 файлове, добавени 1043240 реда код, изтрити 489854 реда). За сравнение, в клон 5.7 бяха направени 15033 корекции, а размерът на пача беше 39 MB. Около 37% от всички представени в 5.8 промени са свързани с драйвери на устройства, около 16% от промените имат отношение към обновяване на код, специфичен за хардуерни архитектури, 11% е свързано със мрежовия стек, 3% – с файловите системи и 4% с вътрешните подсистеми на ядрото.

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

  • Виртуализация и безопасност
    • Осигурена е блокировка на зареждането на модули на ядрото, които имат секции с код, в които едновременно са зададени битовете, позволяващи изпълнение и запис. Промените са реализирани в рамките на по-голям проект за освобождаване на ядрото от използването на страници с памет, допускащи едновременно изпълнение и запис.
    • Появи се възможност за създаване на отделни екземпляри на 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). Устройствата за inline-шифроване обикновено са вградени в носителя, но логически се поставят между системната памет и диска, осъществявайки прозрачно шифроване и разшифроване на входа/изхода на базата на зададените от ядрото ключове и алгоритъм за шифроване.
    • Добавен е параметър на командния ред на ядрото "initrdmem", позволяващ да се посочи физическият адрес на разполагане на initrd в паметта при разполагане на началния зареден образ в ОЗУ.
    • Добавени нови възможности: 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 (по-рано тези флагове се емулираха в C-библиотеката, а новото faccessat2 позволява тяхното реализиране в ядрото).
    • В Cgroup е добавена настройката memory.swap.high, която може да се използва за забавяне на задачи, заемащи твърде много място в областта на паметта.
    • В интерфейса на асинхронния вход/изход io_uring е добавена поддръжка за системен извикване tee().
    • Добавен е механизъм "BPF итератор, предназначен за извеждане в пространството на потребителя на съдържанието на структури от ядрото.
    • Предоставена възможността за използване на кръгов буфер за обмен на данни между 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 (емулатони размер на блока), който може да се използва за емулиране на по-малък размер на логическия блок (например, за емулиране на 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 е подобрена предварителната зареждане на елементите на ФС. Тестовете на бавен 2TB USB-накопител показаха намаляване на времето за преминаване на теста от 383 на 51 сек.
  • Мрежовата подсистема
    • В кода за управление на работата на мрежовите мостове е добавена е добавена поддръжка на протокола MRP (Media Redundancy Protocol), позволяващ осигуряване на отказоустойчивост, свързвайки няколко Ethernet превключвателя.
    • В системата за управление на трафика (Tc) бяха добавени ново действие «gate», което позволява да определите времеви интервали за обработка и отхвърляне на определени пакети.
    • В ядрото и утилитата ethtool е добавена поддръжка на функции за тестване на свързания мрежов кабел и само диагностика на мрежови устройства.
    • В IPv6 стека е добавена поддръжка на алгоритъра MPLS (Многопротоколно етикетно превключване) за маршрутизиране на пакети с използване на многопротоколно превключване по етикети (предишно, MPLS за IPv4 също беше поддържан).
    • Добавена е поддръжка за предаване на пакети IKE (Internet Key Exchange) и IPSec над TCP (RFC 8229) за заобикаляне на възможни блокировки на UDP.
    • Добавено мрежово блочно устройство rnbd, позволяващо организиране на отдалечен достъп до блочно устройство чрез транспорт RDMA (InfiniBand, RoCE, iWARP) и протокола RTRS.
    • В TCP стека е добавена поддръжка на компресия на диапазони в отговори на селективно признаване (selective acknowledgment, SACK).
    • За IPv6 реализирана поддръжка на TCP-LD (RFC 6069, Дълги прекъсвания на свързаността).
  • Оборудване
    • В 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. За gv100 е реализирана възможността за използване на червеникави режими на развъртане. Добавено е определение на vGPU.
    • В драйвера 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-eMMC, Check Point L-50,
      , 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 GHz. Чипът съдържа кеш L2 (1 MB), контролер на паметта 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 Speaker Amplifier, Microsemi 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