Версия на ядрото на Linux 5.8

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

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

Основната иновации:

  • Виртуализация и сигурност
    • Осигурено е зареждане на модули на ядрото, които имат секции с код, в който едновременно се задават битовете, позволяващи изпълнение и запис. Промяната беше въведена като част от по-голям проект за освобождаване на ядрото от използването на страници с памет, които позволяват едновременно изпълнение и писане.
    • Вече е възможно да се създадат отделни екземпляри на procfs, което позволява използването на множество точки на монтиране на procfs, монтирани с различни опции, но отразяващи едно и също пространство от имена на идентификатор на процес (pid пространство от имена). Преди това всички точки на монтиране на procfs отразяваха само едно вътрешно представяне и всяка промяна в параметрите на монтиране засягаше всички други точки на монтиране, свързани със същото пространство от имена на ID на процеса. Сред областите, в които може да се търси монтаж с различни опции, е внедряването на лека изолация за вградени системи с възможност за скриване на определени типове процеси и информационни възли в procfs.
    • Поддръжката на механизма е реализирана за платформата ARM64
      Стек за извикване на сянка, осигурен от компилатора Clang за защита срещу презаписване на адреса за връщане на функция в случай на препълване на буфера на стека. Същността на защитата е да запази адреса за връщане в отделен стек „сянка“ след прехвърляне на контрола към функция и извличане на този адрес преди излизане от функцията.

    • Добавена е поддръжка на инструкции за платформата ARM64 ARMv8.5-BTI (Индикатор за цел на разклоняване), за да защити изпълнението на набори от инструкции, към които не трябва да се разклонява. Блокирането на преходи към произволни участъци от кода се прилага, за да се предотврати създаването на притурки в експлойти, които използват техники за програмиране с връщане (ROP - Return-Oriented Programming; атакуващият не се опитва да постави своя код в паметта, а работи върху вече съществуващи части на машинни инструкции, които завършват с обратна контролна инструкция, от която се изгражда верига от повиквания за получаване на желаната функционалност).
    • Добавена е хардуерна поддръжка за вградено криптиране на блокови устройства (Вградено криптиране). Устройствата за шифроване Inlinep обикновено са вградени в устройството, но са логически разположени между системната памет и диска, прозрачно шифровайки и декриптирайки I/O въз основа на определени от ядрото ключове и алгоритъм за шифроване.
    • Добавена е опцията за команден ред на ядрото "initrdmem", за да ви позволи да посочите адреса на физическата памет на initrd, когато поставяте първоначалното изображение за зареждане в RAM.
    • Добавена е нова възможност: CAP_PERFMON за достъп до подсистемата за изпълнение и извършване на мониторинг на производителността. CAP_BPF, което позволява определени BPF операции (като зареждане на BPF програми), които преди това изискваха CAP_SYS_ADMIN права (CAP_SYS_ADMIN правата сега са разделени на комбинация от CAP_BPF, CAP_PERFMON и CAP_NET_ADMIN).
    • Добавен ново virtio-mem устройство, което ви позволява да включвате горещо и горещо включване на памет в системи за гости.
    • Внедрено извикване на операции за картографиране в /dev/mem, ако драйверът на устройството използва припокриващи се области на паметта.
    • Добавена защита срещу уязвимости CROSSTalk/SRBDS, което ви позволява да възстановите резултатите от определени инструкции, изпълнени на друго процесорно ядро.
  • Памет и системни услуги
    • В документа, определящ правилата за форматиране на кода, прието препоръки за използване на приобщаваща терминология. На разработчиците не се препоръчва да използват комбинациите "master / slave" и "blacklist / whitelist", както и думата "slave" отделно. Препоръките се отнасят само до нови употреби на тези термини. Споменаванията на посочените думи, които вече съществуват в ядрото, ще останат недокоснати. В новия код използването на маркираните термини е разрешено, ако е необходимо за поддръжка на API и ABI, изложени в потребителското пространство, както и при актуализиране на кода за поддръжка на съществуващ хардуер или протоколи, чиито спецификации изискват използването на определени термини.
    • Включен инструмент за отстраняване на грешки KCSAN (Kernel Concurrency Sanitizer), предназначен за динамично откриване състезателни условия вътре в ядрото. Използването на KCSAN се поддържа при изграждане в GCC и Clang и изисква специални модификации по време на компилиране за проследяване на достъпа до паметта (използват се точки на прекъсване, които се задействат, когато паметта се чете или модифицира). Развитието на KCSAN се фокусира върху предотвратяването на фалшиви положителни резултати, мащабируемостта и лекотата на използване.
    • Добавено универсален механизъм доставяне на известия от ядрото до потребителското пространство. Механизмът се основава на стандартния канален драйвер и ви позволява ефективно да разпространявате известия от ядрото по канали, отворени в потребителското пространство. Точките за получаване на известия са канали, които се отварят в специален режим и позволяват съобщенията, получени от ядрото, да се натрупват в пръстен буфер. Четенето се извършва от обичайната функция read(). Собственикът на канала определя кои източници в ядрото трябва да бъдат наблюдавани и може да дефинира филтър за игнориране на определени типове съобщения и събития. От събитията в момента се поддържат само операции с ключове, като добавяне/премахване на ключове и промяна на техните атрибути. Тези събития са планирани да бъдат използвани в GNOME.
    • Продължаващо развитие на функционалността „pidfd“ за подпомагане на ситуациите на повторно използване на PID (pidfd е свързан с конкретен процес и не се променя, докато PID може да бъде свързан с друг процес, след като текущият процес, свързан с този PID, приключи). Новата версия добавя поддръжка за използване на pidfd за прикачване на процес към пространства от имена (позволявайки pidfd да бъде указан при изпълнение на системното повикване setns). Използването на pidfd ви позволява да контролирате прикачването на процес към няколко типа пространства от имена с едно извикване, значително намалявайки броя на необходимите системни извиквания и прилагайки прикачване в атомен режим (ако прикачването към едно от пространствата от имена е неуспешно, другите няма да се свържат) .
    • Добавено е ново системно извикване facesat2(), различно от
      facesat() допълнителен аргумент с флагове, които отговарят на препоръките на POSIX (преди това тези флагове бяха емулирани в C библиотеката, а новият faccessat2 им позволява да бъдат внедрени в ядрото).

    • В Cgroup добави настройка memory.swap.high, която може да се използва за забавяне на задачи, които заемат твърде много място за суап.
    • Към асинхронния I/O интерфейс io_uring добавена поддръжка за системно повикване tee().
    • Добавен механизъм "BPF итератор, предназначен да извежда съдържанието на структурите на ядрото в потребителското пространство.
    • При условие възможност за използване на пръстен буфер за обмен на данни между BPF програми.
    • В механизма падата, предназначен да организира паралелно изпълнение на задачи в ядрото, добавена поддръжка за многонишкови задачи с балансиране на натоварването.
    • В механизма pstore, който ви позволява да запазите информация за отстраняване на грешки относно причината за срива в области на паметта, които не се губят между рестартирането, добавено бекенд за запазване на информация за блокиране на устройства.
    • От клона на ядрото PREEMPT_RT преместен изпълнение на локални брави.
    • Добавено нов API за разпределение на буфер (AF_XDP), насочен към опростяване на писането на мрежови драйвери с поддръжка на XDP (eXpress Data Path).
    • За архитектурата RISC-V е внедрена поддръжка за отстраняване на грешки на компоненти на ядрото с помощта на KGDB.
    • Преди версия 4.8 изискванията за версията на GCC, която може да се използва за изграждане на ядрото, бяха увеличени. В една от следващите версии се планира да се вдигне летвата до GCC 4.9.
  • Дискова подсистема, I/O и файлови системи
    • В Device Mapper добавено нов манипулатор на dm-ebs (emulate block size), който може да се използва за емулиране на по-малък размер на логически блок (например за емулиране на 512-байтови сектори на дискове с размер на сектора 4K).
    • Файловата система F2FS вече поддържа компресия с помощта на алгоритъма LZO-RLE.
    • В dm-crypt добави поддръжка на криптирани ключове.
    • Btrfs има подобрена обработка на операциите за четене в режим на директен I/O. При монтаж ускорено проверка на изтрити подсекции и директории, останали без родител.
    • Към CIFS е добавен параметър „nodelete“, който позволява нормални проверки на разрешения на сървъра, но забранява на клиента да изтрива файлове или директории.
    • Ext4 има подобрена обработка на грешки ENOSPC при използване на многопоточност. xattr добави поддръжка за пространството от имена gnu.*, използвано в GNU Hurd.
    • За Ext4 и XFS е активирана поддръжка за DAX операции (директен достъп до файловата система, заобикаляйки кеша на страницата, без да се използва ниво на блоково устройство) по отношение на отделни файлове и директории.
    • В системно повикване statx() добавен флаг STATX_ATTR_DAX, който, когато е посочен, извлича информация с помощта на DAX машината.
    • ЕКСАТ добави поддръжка за проверка на областта за зареждане.
    • В FAT подобрен проактивно зареждане на FS елементи. Тестването на бавно 2TB USB устройство показа намаляване на времето за завършване на теста от 383 на 51 секунди.
  • Мрежова подсистема
    • В кода за управление на работата на мрежови мостове добави поддръжка на протокол MRP (Media Redundancy Protocol), който позволява толерантност към грешки чрез зацикляне на множество Ethernet комутатори.
    • Към системата за контрол на трафика (Tc) добавен ново действие „gate“, което дава възможност да се определят времеви интервали за обработка и отхвърляне на определени пакети.
    • Към ядрото и помощната програма ethtool е добавена поддръжка за тестване на свързания мрежов кабел и самодиагностика на мрежови устройства.
    • Поддръжката на алгоритъма MPLS (Multiprotocol Label Switching) е добавена към IPv6 стека за маршрутизиране на пакети с помощта на многопротоколно превключване на етикети (MPLS преди се поддържаше за IPv4).
    • Добавена е поддръжка за предаване на IKE (Internet Key Exchange) и IPSec пакети през TCP (RFC 8229), за да заобиколите възможно UDP блокиране.
    • Добавен мрежово блоково устройство rnbd, което ви позволява да организирате отдалечен достъп до блоково устройство, използвайки RDMA транспорта (InfiniBand, RoCE, iWARP) и протокола RTRS.
    • В TCP стека добави поддръжка за компресиране на диапазона в отговорите на селективно потвърждение (SACK).
    • За IPv6 изпълнени TCP-LD поддръжка (RFC 6069, дълги прекъсвания на връзката).
  • Оборудование
    • Драйверът i915 DRM за видеокарти на 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 (Ограничение на текущата средна мощност).
    • Добавена е поддръжка за модификаторния формат на NVIDIA към драйвера Nouveau. За gv100 е въведена възможност за използване на режими на презредово сканиране. Добавено откриване на vGPU.
    • Добавена е поддръжка за графични процесори Adreno A405, A640 и A650 към драйвера MSM (Qualcomm).
    • Добавено вътрешна рамка за управление на DRM (Direct Rendering Manager) ресурси.
    • Добавена е поддръжка за смартфони Xiaomi Redmi Note 7 и Samsung Galaxy S2, както и за лаптопи Chromebook Elm/Hana.
    • Добавени драйвери за 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-T1 съдържа две суперскаларни ядра P5600 MIPS 32 r5, работещи на честота 1.2 GHz. Чипът съдържа L2 кеш (1 MB), DDR3-1600 ECC контролер на паметта, 1 10Gb Ethernet порт, 2 1Gb Ethernet порта, PCIe Gen.3 x4 контролер, 2 SATA 3.0 порта, USB 2.0, GPIO, UART, SPI, I2C. Процесорът осигурява хардуерна поддръжка за виртуализация, SIMD инструкции и интегриран хардуерен криптографски ускорител, който поддържа GOST 28147-89. Чипът е разработен с помощта на MIPS32 P5600 Warrior процесорен ядрен блок, лицензиран от Imagination Technologies.

В същото време латиноамериканската фондация за свободен софтуер образувани
вариант напълно безплатно ядро ​​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 Aamplifier, Microsemi ZL38060 Connected Home Audio Processor, и I2C EEPROM Slave. Актуализиран код за почистване на петна в Adreno GPU, HabanaLabs Goya, x86 сензорен екран, vt6656 и btbcm драйвери и подсистеми.

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

Добавяне на нов коментар