Реліз ядра Linux 5.11

Після двох місяців розробки Лінус Торвальдс представив реліз ядра Linux 5.11. Серед найбільш помітних змін: підтримка анклавів Intel SGX, новий механізм перехоплення системних викликів, віртуальна шина auxiliary, заборона складання модулів без MODULE_LICENSE(), режим швидкої фільтрації системних викликів у seccomp, припинення супроводу архітектури ia64, перенесення технології WiMAX у гілку можливість інкапсуляції SCTP UDP.

У нову версію прийнято 15480 виправлень від 1991 розробників, розмір патчу - 72 МБ (зміни торкнулися 12090 файлів, додано 868025 рядків коду, видалено 261456 рядків). Близько 46% всіх представлених у 5.11 змін пов'язані з драйверами пристроїв, приблизно 16% змін стосуються оновлення коду, специфічного для апаратних архітектур, 13% пов'язано з мережевим стеком, 3% — з файловими системами і 4% з внутрішніми підсистемами ядра.

Основні нововведення:

  • Дискова підсистема, введення/виведення та файлові системи
    • У Btrfs додано кілька опцій монтування для застосування при відновленні даних з пошкодженою ФС: «rescue=ignorebadroots» для монтування, незважаючи на пошкодження деяких кореневих дерев (extent, uuid, data reloc, device, csum, free space), «rescue=ignoredatacsums» для відключення перевірки контрольних сум для даних та «rescue=all» для одночасного включення режимів 'ignorebadroots', 'ignoredatacsums' та 'nologreplay'. Припинено підтримку опції монтування «inode_cache», яка раніше була оголошена застарілою. Проведено підготовку коду для реалізації підтримки блоків з метаданими та даними, розміром меншим за сторінку (PAGE_SIZE), а також підтримки режиму зонованого виділення місця. Небуферизовані (Direct IO) запити переведені на інфраструктуру iomap. Оптимізована продуктивність низки операцій, у деяких випадках прискорення може досягати десятків відсотків.
    • У XFS реалізований прапор «needsrepair», що сигналізує необхідність відновлення. При встановленні цього прапора ФС не можна примонтувати доти, доки прапор не буде скинутий утилітою xfs_repair.
    • У Ext4 запропоновано лише виправлення помилок та оптимізації, а також проведено чищення коду.
    • Дозволено повторний експорт файлових систем, примонтованих поверх NFS (тобто примонтований через NFS розділ тепер можна експортувати через NFS і використовувати як проміжний кеш).
    • У системний виклик close_range(), що дозволяє процесу разом закрити цілий діапазон відкритих файлових дескрипторів, додано опцію CLOSE_RANGE_CLOEXEC для закриття дескрипторів у режимі close-on-exec.
    • У файловій системі F2FS додані нові виклики ioctl(), що дозволяють з простору користувача керувати тим, які файли зберігаються у стислому вигляді. Додано опцію монтування «compress_mode=» для вибору розміщення керуючого стисненням обробника на боці ядра або у просторі користувача.
    • Надано можливість монтування Overlayfs непривілейованими процесами, використовуючи окремий простір ідентифікаторів користувачів (user namespace). Для перевірки відповідності реалізації моделі безпеки проведено повний аудит коду. У Overlayfs також додано можливість запуску з використанням копій образів файлової системи через опціональне вимкнення перевірки UUID.
    • У файлову систему Ceph додано підтримку протоколу msgr2.1, що дозволяє застосовувати алгоритм AES-GCM для передачі даних у зашифрованому вигляді.
    • У модулі dm-multipath реалізовано можливість обліку прив'язки до CPU («IO affinity») під час вибору маршруту запитів вводу/вывода.
  • Пам'ять та системні сервіси
    • Додано новий механізм перехоплення системних викликів, заснований на prctl() і що дозволяє з простору користувача генерувати винятки при зверненні до певного системного виклику та емулювати його виконання. Зазначена функціональність потрібна Wine і Proton для емуляції системних викликів Windows, що необхідно для забезпечення сумісності з іграми і програмами, що безпосередньо виконують системні виклики в обхід Windows API (наприклад, для захисту від несанкціонованого використання).
    • У системний виклик userfaultfd(), призначений для обробки page faults (звернення до невиділених сторінок пам'яті) у просторі користувача, з'явилася можливість вимкнення обробки винятків, що виникають на рівні ядра, для ускладнення експлуатації деяких вразливостей.
    • У підсистему BPF додано підтримку локального завдання сховища даних (task-local storage), що забезпечує прив'язку даних до конкретного BPF-оброблювача.
    • Повністю перероблений облік споживання пам'яті програмами BPF - для керування використанням пам'яті в об'єктах BPF замість memlock rlimit запропоновано контролер cgroup.
    • У механізмі BTF (BPF Type Format), що надає інформацію для перевірки типів у псевдокод BPF, реалізована підтримка модулів ядра.
    • В інтерфейс асинхронного введення/виводу io_uring додано підтримку системних викликів shutdown(), renameat2() та unlinkat(). При виклику io_uring_enter() додано можливість вказівки таймауту (перевірити підтримку аргументу для вказівки таймауту можна за допомогою прапора IORING_FEAT_EXT_ARG).
    • Архітектура ia64, що використовується в процесорах Intel Itanium, переведена в категорію залишених без супроводу (orphaned), що передбачає припинення тестування. Компанія Hewlett Packard Enterprise припинила прийом замовлень на нове обладнання Itanium, а Intel зробив це ще торік.
    • Припинено підтримку систем на базі архітектури MicroBlaze, не укомплектованих блоком управління пам'яттю (MMU). Подібні системи давно не зустрічаються у побуті.
    • Для архітектури MIPS додано підтримку тестування покриття коду (coverage testing) за допомогою утиліти gcov.
    • Додано підтримку віртуальної шини auxiliary для взаємодії з багатофункціональними пристроями, що поєднують функціональність, що потребує різних драйверів (наприклад, мережні карти з підтримкою Ethernet та RDMA). Шина може використовуватися для призначення пристрою первинного і вторинного драйвера, в ситуації, коли проблематично використання підсистеми MFD (Multi-Function Devices).
    • Для архітектури RISC-V додано підтримку системи розподілу пам'яті CMA (Contiguous Memory Allocator), яка оптимізована на виділення великих безперервних областей пам'яті з використанням техніки переміщення сторінок пам'яті. Для RISC-V також реалізовано засоби обмеження доступу до /dev/mem та обліку часу обробки переривань.
    • Для 32-розрядних систем ARM додано підтримку налагоджувального інструменту KASan (Kernel address sanitizer), що забезпечує виявлення помилок під час роботи з пам'яттю. Для 64-розрядних ARM реалізація KASan переведена на використання тегів MTE (MemTag).
    • Доданий системний виклик epoll_pwait2(), що дозволяє використовувати таймаути з наносекундною точністю (дзвінок epoll_wait маніпулює мілісекундами).
    • У системі збирання забезпечено виведення помилки при спробі збирання завантажуваних модулів ядра, в яких за допомогою макросу MODULE_LICENSE() не визначено ліцензію на код. Помилка при складанні відтепер також викликатиме використання макросу EXPORT_SYMBOL() для статичних функцій.
    • Додана підтримка карти GEM-об'єктів з пам'яті, задіяної для введення/виводу, що дозволило прискорити роботу з фреймбуфером на деяких архітектурах.
    • У Kconfig припинено підтримку Qt4 (залишено підтримку Qt5, GTK і Ncurses).
  • Віртуалізація та безпека
    • У системний виклик seccomp() додано підтримку швидкого реагування, що дозволяє дуже швидко визначати дозволений або заборонений певний системний виклик на основі прикріпленої до процесу таблиці повноважень (constant-action bitmap), що не вимагає запуску BPF-обробника.
    • Інтегровані компоненти ядра для створення та управління анклавами на базі технології Intel SGX (Software Guard eXtensions), що дозволяє програмам виконувати код в ізольованих зашифрованих областях пам'яті, доступ решти системи до яких обмежений.
    • В рамках ініціативи з обмеження доступу з простору користувача до регістрів MSR (model-specific register) заборонено запис у регістр MSR_IA32_ENERGY_PERF_BIAS, що дозволяє змінити режим енергоефективності процесора (normal, performance, powersave).
    • З гілки kernel-rt для систем реального часу перенесено можливість відключення міграції високопріоритетних завдань між CPU.
    • Для систем ARM64 додано можливість застосування тегів MTE (MemTag, Memory Tagging Extension) для адрес пам'яті обробників сигналів. Використання MTE включається через вказівку опції SA_EXPOSE_TAGBITS в sigaction() і дозволяє організувати перевірку коректності використання покажчиків для блокування експлуатації вразливостей, викликаних зверненням до вже звільнених блоків пам'яті, переповнення буфера, зверненнями до ініціалізації та використанням поза поточним контекстом.
    • Доданий параметр "DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING", що дозволяє підсистемі dm-verity перевіряти хеш-сигнатури сертифікатів, що розміщуються у вторинному сховищі ключів (keyring). На практиці налаштування дозволяє верифікувати не тільки сертифікати вбудовані в ядро, але й завантажені сертифікати під час роботи, що дає можливість оновлювати сертифікати без оновлення всього ядра.
    • У User-mode Linux додана підтримка режиму suspend-to-idle, що дозволяє заморозити оточення та використовувати сигнал SIGUSR1 для виведення зі сплячого режиму.
    • У механізм virtio-mem, що дозволяє виконувати гаряче підключення та відключення пам'яті до віртуальних машин, додана підтримка режиму великого блоку (BBM, Big Block Mode), що дає можливість передавати або забирати пам'ять блоками, що перевищують розмір блоку пам'яті ядра, що необхідно для оптимізації VFIO QEMU.
    • У реалізацію TLS, що працює на рівні ядра, додана підтримка шифру CHACHA20-POLY1305.
  • Мережева підсистема
    • Для 802.1Q (VLAN) реалізований механізм управління збоями підключення (CFM, Connectivity Fault Management), що дозволяє виявляти, верифікувати та ізолювати збої в мережах з віртуальними мостами (Virtual Bridged Networks). Наприклад, CFM може використовуватися для локалізації проблем у мережах, що охоплюють кілька незалежних організацій, співробітники яких мають доступ лише до обладнання.
    • Додано підтримку інкапсуляції пакетів протоколу SCTP в UDP-пакети (RFC 6951), що дозволяє використовувати SCTP у мережах зі старими трансляторами адрес, які безпосередньо не підтримують SCTP, а також реалізовувати SCTP на системах, що не надають прямого доступу до рівня IP.
    • Реалізація технології WiMAX переміщена staging і в майбутньому намічена для видалення, якщо не знайдуться користувачі, яким необхідний WiMAX. WiMAX вже не використовується в публічних мережах, а в ядрі єдиним драйвером, з яким можна використовувати WiMAX, залишається застарілий драйвер Intel 2400m. У мережному конфігураторі NetworkManager підтримка WiMAX була припинена у 2015 році. В даний час WiMax практично повністю витіснена такими технологіями, як LTE, HSPA+ та Wi-Fi 802.11n.
    • Проведено роботу з оптимізації продуктивності обробки вхідного TCP-трафіку як zerocopy, тобто. без додаткового копіювання до нових буферів. Для трафіку середнього розміру, що охоплює десятки або кілька сотень кілобайт даних, застосування zerocopy замість recvmsg() помітно ефективніше. Наприклад, реалізовані зміни дозволили підвищити ефективність обробки трафіку у стилі RPC із повідомленнями у 32 КБ при використанні zerocopy на 60-70%.
    • Додані нові виклики ioctl() для створення мережних мостів, що охоплюють кілька каналів PPP. Запропонована можливість дозволяє кадрам переміщатися з одного каналу до іншого, наприклад, з PPPoE в сеанс PPPoL2TP.
    • Продовжено інтеграцію в ядро ​​MPTCP (MultiPath TCP), розширення протоколу TCP для організації роботи TCP-з'єднання з доставкою пакетів одночасно по кількох маршрутах через різні мережеві інтерфейси, прив'язані до різних IP-адрес. У новому випуску реалізовано підтримку опції ADD_ADDR для анонсу доступних IP-адрес до яких можливе з'єднання при додаванні нових потоків до існуючого з'єднання MPTCP.
    • Додано можливість настроювання дій при перевищенні бюджету поллінгу з'єднань (busy-polling). Раніше доступний режим SO_BUSY_POLL передбачав перемикання на softirq при вичерпанні бюджету. Для додатків, яким необхідно продовжувати використовувати полінг, запропоновано нову опцію SO_PREFER_BUSY_POLL.
    • В IPv6 реалізована підтримка режимів SRv6 End.DT4 і End.DT6, що застосовуються для створення розрахованих на багато користувачів IPv4 L3 VPN і пристроїв VRF (Virtual routing and forwarding).
    • У Netfilter уніфікована реалізація виразів set, що дозволило забезпечити можливість вказівки кількох виразів кожного елемента set-списків.
    • У бездротовий стек 802.11 додано API для налаштування обмежень потужності SAR, а також параметрів AE PWE та HE MCS. У драйвер Intel iwlwifi додано підтримку діапазону 6GHz (Ultra High Band). У драйвер Qualcomm Ath11k додано підтримку технології швидкого налаштування з'єднання FILS (Fast Initial Link Setup, стандартизована як IEEE 802.11ai), що дозволяє позбутися затримок при роумінгу під час міграції від однієї точки доступу до іншої.
  • Обладнання
    • У драйвері amdgpu реалізована підтримка APU AMD Green Sardine (Ryzen 5000) і GPU Dimgrey Cavefish (Navi 2), а також початкова підтримка APU AMD Van Gogh з ядром Zen 2 і GPU RDNA 2 (Navi 2). Додано підтримку нових ідентифікаторів APU Renoir (на базі CPU Zen 2 CPU та GPU Vega).
    • У драйвері i915 для відеокарт Intel реалізовано підтримку технології IS (Integer scaling) з реалізацією фільтра для збільшення масштабу з урахуванням стану сусідніх пікселів (інтерполяція Nearest-neighbor) для визначення кольору відсутніх пікселів. Розширено підтримку дискретних карт Intel DG1. Реалізована підтримка технології «Big Joiner», що присутня починаючи з чіпів Ice Lake/Gen11 і дозволяє використовувати один транскодер для обробки двох потоків, наприклад, для виведення на 8K екран через один DisplayPort. Додано режим асинхронного перемикання між двома буферами у відеопам'яті (async flip).
    • У драйвер nouveau додано початкову підтримку GPU NVIDIA на базі мікроархітектури "Ampere" (GA100, GeForce RTX 30xx), поки обмежена засобами для управління відеорежимами.
    • Додано підтримку протоколу 3WIRE, що використовується в LCD-панелях. Додано підтримку панелей novatek nt36672a, TDO tl070wsh30, Innolux N125HCE-GN1 та ABT Y030XX067A 3.0. Окремо можна відзначити підтримку панелі смартфонів OnePlus 6 та 6T, яка дозволила організувати завантаження на пристрої немодифікованого ядра.
    • Додано підтримку першого дискретного USB4 хост-контролера Intel Maple Ridge.
    • Додано підтримку звукових кодеків Allwinner H6 I2S, Analog Devices ADAU1372, Intel Alderlake-S, GMediatek MT8192, NXP i.MX HDMI та XCVR, Realtek RT715 та Qualcomm SM8250.
    • Додана підтримка ARM-плат, пристроїв та платформ: Galaxy Note 10.1, Microsoft Lumia 950 XL, NanoPi R1, Friendly Arm ZeroPi, Elimo Initium SBC, Broadcom BCM4908, Mediatek MT8192/MT6779/MT8167, M , Мікротик на базі Marvell Prestera 2DX730, сервери з Nuvoton NPCM382 BMC, Kontron i.MX98M Mini, Espressobin Ultra, "Trogdor" Chromebook, Kobol Helios3236, Engicam PX750.Core.
    • Вбудована підтримка ігрової консолі Ouya на базі NVIDIA Tegra 3.

Одночасно латиноамериканський Фонд вільного програмного забезпечення сформував варіант повністю вільного ядра 5.11 — Linux-libre 5.11-gnu, очищеного від елементів прошивок та драйверів, що містять невільні компоненти або ділянки коду, сфера застосування яких обмежена виробником. У новому випуску проведено чищення драйверів для qat_4xxx (crypto), lt9611uxcm (dsi/hdmi bridge), ccs/smia++ (sensor), ath11k_pci, nxp audio transceiver та mhi pci controller. Оновлено код чищення блобів у драйверах та підсистемах amdgpu, btqca, btrtl, btusb, i915 csr. Відключені нові блоби в m3 rproc, idt82p33 ptp clock та qualcomm arm64.

Джерело: opennet.ru

Додати коментар або відгук