След като работи два месеца, Линус Торвалдс новата версия на ядрото . Сред най-забележителните промени: детектор на състояния на състезание 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 е реализирана поддръжка на механизма
, предоставен от Clang компилатора за защита от презаписване на адреса за връщане от функция в случай на преливане на буфера в стека. Същността на защитата е в запазването на адреса за връщане в отделен „сенчест“ стек след предаване на контрола на функцията и извличането на този адрес преди изхода от функцията. - За платформата ARM64 е добавена поддръжка на инструкции (Branch Target Indicator) за защита на изпълнението на набори от инструкции, към които не трябва да се извършват преходи при разклонения. Блокирането на преходите към произволни участъци от кода е реализирано за противодействие на създаването на гаджети в експлоити, използващи техники на програмиране, ориентирано към връщане (ROP — Return-Oriented Programming), при които атакуващият не се опитва да постави свой код в паметта, а оперира с вече съществуващи парчета машинни инструкции, завършващи с инструкция за връщане на управлението, от които се изграждат вериги от извиквания за получаване на необходимата функционалност.
- Добавена е поддръжка за оборудване за inline-шифриране на блочни устройства (). Устройствата за inline-шифриране обикновено са вградени в носителя, но логически се разполагат между системната памет и диска, осъществявайки прозрачно шифриране и разшифроване на входно-изходни операции на базата на зададени от ядрото ключове и алгоритми за шифриране.
- Добавен е параметър на командния ред на ядрото „initrdmem“, позволяващ указването на физическия адрес за разполагане на initrd в паметта при разполагане на начален зареден образ в ОЗУ.
- Добавени нови способности: 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 (по-рано тези флагове се емулираха в C библиотеката, а новият 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 (емулиране на размер на блока), който може да се прилага за емулиране на по-малък размер на логическия блок (например, за емулиране на 512-байтови сектори на дискове с размер на сектора 4K).
- В файлната система F2FS е добавена поддръжка на компресия с помощта на алгоритъма LZO-RLE.
- В dm-crypt поддръжка на криптирани ключове.
- В Btrfs е подобрена обработката на операции за четене в режим на директен вход/изход. При монтиране се проверяват отдалечените подраздели и директории, останали без родител.
- В CIFS е добавен параметърът „nodelete“, позволяващ стандартни проверки на правата на сървъра, но забраняваща на клиента да изтрива файлове или директории.
- В Ext4 е подобрена обработката на грешките при използване на многонишковост. В xattr е добавена поддръжка на пространство с име gnu.*, използвано в GNU Hurd.
- За Ext4 и XFS е включена поддръжка на операции DAX (директен достъп до ФС, заобикаляйки страницовия кеш без използване на нивото на блоковите устройства) свързана с отделни файлове и директории.
- В системен повик е добавен флаг , при указване на който информацията се извлича с помощта на механизма DAX.
- В EXFAT поддръжка на верификация на зареждащата област.
- В FAT предварително зареждане на елементи на ФС. Тестовете на бавен 2TB USB-накопител показаха намаляване на времето за преминаване на теста от 383 на 51 сек.
- Мрежова подсистема
- В кода за управление на работата на мрежовите мостове поддръжка на протокол (Media Redundancy Protocol), позволяващ осигуряване на отказоустойчивост, свързвайки няколко Ethernet суичове.
- В системата за управление на трафика (Tc) ново действие «gate», което дава възможност да се определят времеви интервали за обработка и отхвърляне на определени пакети.
- В ядрото и утилитата ethtool е добавена поддръжка на функции за тестване на свързания мрежови кабел и самодиагностика на мрежови устройства.
- В стека IPv6 е добавена поддръжка на алгоритъра MPLS (Мултипротоколно етикетно комутация) за маршрутизация на пакети, използваща многопротоколна комутация по метки (за IPv4 MPLS поддръжката беше налична и преди).
- Добавена е поддръжка за прехвърляне на пакети IKE (Internet Key Exchange) и IPSec през TCP () за заобикаляне на възможни блокировки на UDP.
- мрежово блочно устройство rnbd, позволяващо организиране на отдалечен достъп до блочно устройство чрез транспорт RDMA (InfiniBand, RoCE, iWARP) и протокол RTRS.
- В TCP стека е добавена поддръжка на компресия на диапазони в отговорите за селективно потвърждение (selective acknowledgment, SACK).
- За IPv6 е добавена поддръжка на TCP-LD (, Дълги прекъсвания на свързаност).
- Оборудване
- В 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. За 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 и основаната на него система на кристал. . Процесорът 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.
Одновременно латиноамерикански Фонд за свободен софтуер
вариант — , почистено от елементи на фърмуер и драйвери, съдържащи несвободни компоненти или участъци от код, чиято употреба е ограничена от производителя. В новото издание е деактивирано зареждането на блобове в драйверите за Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Увеличен асинхронен преобразувател на проби, Максим интегриран MAX98390 говорител-усилвател, Microsemi ZL38060 свързан дом аудио процесор и I2C EEPROM Slave. Актуализиран е кодът за почистване на блобове в драйверите и подсистемите Adreno GPU, HabanaLabs Goya, x86 touchscreen, vt6656 и btbcm.
Източник: opennet.ru
