След като разработката продължи два месеца, Линус Торвалдс представи версията на ядрото Linux 5.13. Сред най-значимите промени: файловата система EROFS, първоначална поддръжка на чиповете Apple M1, контролер за cgroup „misc“, прекратяване на поддръжката на /dev/kmem, поддръжка на нови GPU от Intel и AMD, възможност за директно извикване на функции на ядрото от BPF програми, рандомизация на стека на ядрото за всяко системно повикване, възможност за компилация с Clang с защита CFI (Control Flow Integrity), LSM модул Landlock за допълнително ограничаване на процесите, виртуално звуково устройство на базата на virtio, режим multi-shot в io_uring.
В новата версия са приети 17189 корекции от 2150 разработчици (най-много в историята), размерът на пача е 60 MB (промените обхващат 12996 файла, добавени са 794705 реда код, изтрити са 399590 реда). Около 47% от промените в 5.13 са свързани с драйверите на устройства, около 14% от промените касаят обновяване на код, специфичен за хардуерни архитектури, 13% са свързани с мрежовия стек, 5% – с файловите системи и 4% с вътрешните подсистеми на ядрото.
Основни нововъведения:
- Дисковата подсистема, вход/изход и файловите системи
- Добавена е поддръжка на файловата система EROFS (Enhanced Read-Only File System), предложена от компанията Huawei за използване на дялове, достъпни в режим само за четене. Новата файловата система поддържа съхранение на данни в компресиран вид и в сравнение с Ext4 демонстрира подобна производителност при изпълнение на операции за последователно четене, но многократно изпреварва Ext4 при произволен достъп до данни. Например, при ниво на компресия 4 и тестване на сървър с твърд диск файловата система EROFS надмина Ext4 в операцията за произволно четене повече от шест пъти, а при използване на Android смартфон с Flash почти три пъти. Както и при другите read-only файлови системи, структурата на EROFS е значително опростена чрез отхвърляне на някои области от метаданните, като битовата карта за свободни блокове.
- За файловата система SMB3 е реализирана опция за монтиране „rasize“, с помощта на която може да се определи размерът на прозореца за предварително четене (readahead), за да се увеличи производителността на някои видове натоварвания.
- В файловата система ext4 е осигурена презапис на елементите на каталог при изтриване на файлове. В ext4 също е разрешено едновременното използване на режим на работа без разлика в регистра и шифроване.
- В файловой системе exFAT добавена поддержка команды ioctl FITRIM (discard), что позволяет уведомлять накопитель о неиспользуемых блоках в файловой системе.
- В файловой системе XFS появилась возможность извлечения места из последней группы распределения, что стало первым шагом к реализации функции уменьшения размера существующих разделов с XFS.
- Добавлен новый системный вызов quotactl_path, который отличается от quotactl тем, что позволяет управлять квотами не через специальный файл устройства, а указывая путь к точке монтирования файловой системы.
- В механизме fanotify расширены возможности для непривилегированных пользователей. Например, теперь, аналогично inotify, без прав SYS_CAP_ADMIN можно отслеживать события OPEN, ACCESS, MODIFY и CLOSE для файлов и каталогов.
- Памет и системни услуги
- Добавлен новый контроллер cgroup — «Misc» (CONFIG_CGROUP_MISC), предназначенный для ограничения и отслеживания скалярных ресурсов, которые можно управлять с помощью простого счетчика и устанавливать максимальные допустимые значения. В качестве примера применения нового контроллера cgroup упоминается управление идентификаторами адресного пространства, использующимися в механизме AMD SEV (Secure Encrypted Virtualization).
- В интерфейсе асинхронного ввода/вывода io_uring для запросов POLL реализован режим «multi-shot», при котором POLL не удаляется после генерации события, а остается активным и может генерировать несколько событий.
- Из реального времени перенесен код, обеспечивающий обработку программно генерируемых прерываний в потоках ядра, что позволяет вытеснять их более приоритетными процессами.
- Добавлена внутренняя библиотека netfs, в которую вынесены стандартные функции, используемые в сетевых файловых системах.
- Для архитектуры PowerPC реализована поддержка пространств имен времени (time namespaces), позволяющих контейнеру использовать собственное время.
- Для архитектуры RISC-V реализована поддержка kexec, crash dump, kprobe и выполнения ядра на месте (execute-in-place, выполнение с исходного носителя без копирования в оперативную память).
- В BPF-программах трассировки появилась возможность использования локального для задачи хранилища данных (task-local storage), обеспечивающего более высокую производительность за счет привязки данных к конкретному BPF-обработчику.
- Реализиран е нов механизъм за директно извикване на функции от ядрото в BPF програми, който вече се използва в реализацията на алгоритми за натоварване на TCP. За да се осигури безопасност, извикваните функции трябва да бъдат явно дефинирани в бял списък.
- Към системата за проследяване на функции ftrace е добавена опция func-no-repeats, която позволява отражение на повторни последователни извиквания на функции под формата на брояч.
- В системния повик userfaultfd(), предназначен за обработка на page faults (достъп до неразпределени страници памет), е добавена възможност за управление на частични faults, при които страницата памет е налице, но няма запис в таблицата с памет.
- Поддръжката на специален файл /dev/kmem, чрез който може да се получи достъп до цялото адресно пространство на ядрото, е прекратена. Този файл е признат за остарял и създава проблеми с безопасността.
- За чипове Intel е реализиран нов драйвер за управление на охлаждането, който позволява намаляване на честотата на процесора при опасност от прегряване. В отличие от съществуващия механизъм за активиране на TCC (Thermal Control Circuit), новият драйвер манипулира относителните стойности, т.е. може да намали честотата в ранния етап на значително покачване на температурата, без да дожида преодоляването на критичната стойност.
- Виртуализация и сигурност
- Включен е LSM модул за предоставяне на изолация на приложения Landlock, който позволява ограничаване на взаимодействието с външната среда на група процеси и е разработен с оглед на механизми за изолация, като XNU Sandbox, FreeBSD Capsicum и OpenBSD Pledge/Unveil. Логиката за предоставяне на достъп се определя с помощта на BPF програма, но за разлика от seccomp-bpf, Landlock не филтрира системни повиквания и техните аргументи, а позволява ограничаване на използването на обекти на ядрото, като файлови хиерархии. С помощта на Landlock всеки процес, включително непривилегирован, може надеждно да се изолира и да предотврати обход на изолацията при откритие на уязвимости или злонамерени изменения в приложението. Landlock позволява на процеса да създава защитени изолирани среди, реализирани като допълнителен слой над съществуващите механизми за управление на достъпа.
- Добавена функция за рандомизация на преместванията в стека на ядрото при обработка на системни повиквания с цел да се усложнят атаките срещу стека. Същността на предложената защита е в избора на случайно преместване на стека при всяко системно повикване, което усложнява определянето на разположението на стека в паметта дори и при получаване на информация за адресите, тъй като при следващото системно повикване основният адрес на стека ще се промени. За включване на рандомизацията са предложени параметри на командния ред на ядрото „randomize_kstack_offset=on/off“ и настройка CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT. Разходите се оценяват приблизително на 1% загуба на производителност.
- Добавена е поддръжка за компилиране на ядрото с включване в компилатора Clang механизма за защита CFI (Control Flow Integrity), който добавя проверка преди всяко косвено повикване на функция, за да се идентифицират някои форми на неопределено поведение, които потенциално могат да доведат до нарушаване на нормалния ред на изпълнение (control flow) в резултат на прилагане на експлоити, променящи съхраняваните в паметта указатели на функции. За включване на CFI е предложен параметър CONFIG_CFI_CLANG.
- В предоставяния от ядрото сервис за съхранение на ключове за шифроване (key ring) механизмът за доверителни ключове (Trusted Keys) сега обхваща не само ключовете от TPM-модулите, но и от средите TEE (Trusted Execution Environment). За управление на източника на доверителни ключове е предложен параметър за зареждане „trusted.source“. Освен това е добавена възможност за обработка на доверителни ключове в формат ASN.1.
- Добавен е параметър за предварително зареждане на списъка на отзовани сертификати по време на зареждане на ядрото. Решен е проблемът (CVE-2020-26541) с игнориране на в черния списък UEFI Secure Boot сертификатите, предоставяни в формат EFI_CERT_X509_GUID, което позволяваше зареждане на системата с отзован сертификат.
- В криптоподсистемата на ядрото е добавена поддръжка за проверка на цифрови подписи ECDSA на базата на елиптични криви.
- Реализирана е възможност за верификация на политиките на SELinux чрез подсистемата IMA (Integrity Measurement Architecture), която осигурява поддържане на база хешове за проверка на целостта на данните.
- Мрежова подсистема
- Поддръжката на технологията WiMAX е премахната, тъй като не се използва в публични мрежи, а единственият драйвер, който може да се използва с WiMAX, остава остарял драйвер Intel 2400m. В мрежовия конфигуратор NetworkManager поддръжката на WiMAX беше прекратена през 2015 година. В момента WiMax практически е изместена от технологии като LTE, HSPA+ и Wi-Fi 802.11n.
- Добавен е драйвер за мрежовия адаптер MANA (Microsoft Azure Network Adapter).
- В драйвера ath11k е добавена поддръжка за безжични модули Qualcomm QCN9074 с поддръжка на 802.11ax.
- В драйвера iwlwifi е реализирана възможност за пасивно сканиране на канали в диапазона 6GHz. За Украйна е добавена поддръжка за включване/изключване на IEEE 802.11ax на базата на параметри в BIOS.
- Проведена е оптимизация на подсистемата XDP (eXpress Data Path), която позволява манипулиране на мрежовите пакети на етапа преди тяхната обработка от мрежовия стек на ядрото на Linux. Проведените тестове показват увеличаване на производителността на XDP с 4-8%. За устройства virtio увеличението на производителността при софтуерната обработка AF_XDP може да достигне до 33%.
- В ICMP е реализирана поддръжка на разширени PROBE-съобщения, определени в RFC 8335.
- Интеграцията в ядрото на MPTCP (MultiPath TCP) продължава, разширение на TCP протокола, което организира работата на TCP връзката с доставка на пакети одновременно по няколко маршрута чрез различни мрежови интерфейси. IP адреси. В новото издание е добавена поддръжка на sockopt за задаване на типови опции TCP. Реализирана е възможност за нулиране на отделни подпотоци (subflow).
- В netfilter е добавена поддръжка за управление на ресурсите чрез обединена йерархия cgroups v2.
- В ethtool е реализиран интерфейс за четене на статистика на IEEE MIB с поддръжка на mlx5 и bnxt. На мрежовите драйвери е разрешено извличането на произволни данни от SFP EEPROM, манипулирайки не сдвижение+размер, а с паметови страници.
- Оборудване
- Реализирана е начална поддръжка на ARM-чипа Apple M1, включваща контролер за прекъсвания, таймер, UART, SMP, функции за организиране на вход/изход и MMIO. Обратното инженерство на GPU все още не е завършено, за организиране на изход е предоставена поддръжка на фреймбуфер и конзола през сериен порт.
- Продължава почистването на ядрото от стари драйвери, премахнати са драйверите „gasket“ (Google ASIC), „sysace“, „umem“ и няколко стари драйвера за serial портове.
- След 13 години в ветка staging, драйверът „comedi“ за поддръжка на устройства за събиране на данни е стабилизиран и преместен в основния състав.
- Добавен драйвер GUD (Generic USB Display) с базова реализация за екрани и TV адаптери, свързващи се през USB интерфейс. Драйверът предоставя DRM свойства (Direct Rendering Manager) за завъртане на изображението, управление на яркостта, достъп до EDID, настройка на видео режимите и свързване на телевизори, които могат да се използват като основа за създаване на драйвери за конкретни устройства.
- Добавен е звуков драйвер 'virtio' с реализация на виртуално звуково устройство, което може да се използва в гостуващи системи за възпроизвеждане и запис на звук без нужда от проброс на достъп до звуковата карта и без емулация.
- В драйвера amdgpu е добавена начална поддръжка на GPU Aldebaran (gfx90a). Включена е начална поддръжка на технологията за адаптивна синхронизация FreeSync за HDMI (преди това достъпна за DisplayPort), която позволява корекция на честотата на обновяване на информацията на екрана. Добавена е поддръжка на ASSR (Alternate Scrambler Seed Reset). Добавен е ioctl за запитване на възможности, свързани с кодиране и декодиране на видео. Включен е режим CONFIG_DRM_AMD_SECURE_DISPLAY за откриване на промени в дисплеите, които показват критично важна информация. Добавена е поддръжка на механизма за пестене на енергия ASPM.
- В драйвера i915 за видеокарти Intel е включена поддръжка на чипове Intel Alderlake-S. Добавена е поддръжка на eDP MSO (Embedded DisplayPort Multi-SST Operation).
- Добавена е поддръжка на игровия контролер Luna (Amazon), както и на сензорни екрани Hycon HY46XX, ILITEK Lego Series и MStar MSG2638.
В същото време, латиноамериканският Фонд за свободен софтуер е създал версия на напълно свободното ядро 5.11 — Linux-libre 5.11-gnu, прочистено от елементи на фърмуер и драйвери, съдържащи несвободни компоненти или участъци от код, чийто обхват е ограничен от производителя. В новото издание е проведена очистка на драйвера comedi. Прекратено е прочистването на драйверите cyclades, isicom tty и i2400m wimax, които са били премахнати от ядрото. Актуализиран е кодът за прочистване на блобове в драйверите и подсистемите amdgpu, i915 csr, r8152 usb, mhi bus, x86 touchscreen и qualcomm arm64.
Източник: opennet.ru
