Despois de dous meses de desenvolvemento, Linus Torvalds presentou o lanzamento do kernel Linux 6.2. Entre os cambios máis salientables: permítese a aceptación de código baixo a licenza Copyleft-Next, mellórase a implementación de RAID5/6 en Btrfs, continúa a integración do soporte para a linguaxe Rust, redúcese a sobrecarga de protección contra ataques de Retbleed, engádese a capacidade de regular o consumo de memoria durante a escritura, engádese un mecanismo para o equilibrio TCP PLB (Protective Load Balancing), engadiuse un mecanismo híbrido de protección de fluxo de comandos (FineIBT), BPF agora ten a capacidade de definir os seus propios obxectos e estruturas de datos , a utilidade rv (Verificación en tempo de execución) está incluída, reduciuse o consumo de enerxía na implementación de bloqueos RCU.
A nova versión inclúe 16843 correccións de 2178 desenvolvedores, o tamaño do parche é de 62 MB (os cambios afectaron a 14108 ficheiros, engadíronse 730195 liñas de código, elimináronse 409485 liñas). Aproximadamente o 42% de todos os cambios introducidos en 6.2 están relacionados con controladores de dispositivos, aproximadamente o 16% dos cambios están relacionados coa actualización de código específico de arquitecturas de hardware, o 12% están relacionados coa pila de rede, o 4% están relacionados con sistemas de ficheiros e o 3% están relacionados cos subsistemas do núcleo interno.
Principais novidades no núcleo 6.2:
- Servizos de memoria e sistema
- Permítese incluír no código do núcleo e cambios proporcionados baixo a licenza Copyleft-Next 0.3.1. A licenza Copyleft-Next foi creada por un dos autores de GPLv3 e é totalmente compatible coa licenza GPLv2, segundo confirmaron os avogados de SUSE e Red Hat. En comparación coa GPLv2, a licenza Copyleft-Next é moito máis compacta e máis fácil de entender (elimináronse a parte introdutoria e a mención de compromisos obsoletos), define o prazo e o procedemento para eliminar as infraccións e elimina automaticamente os requisitos de copyleft para o software obsoleto que ten máis de 15 anos.
Copyleft-Next tamén contén unha cláusula de concesión de tecnoloxía propietaria, que, a diferenza da GPLv2, fai que esta licenza sexa compatible coa licenza Apache 2.0. Para garantir a total compatibilidade coa GPLv2, Copyleft-Next indica explícitamente que se pode proporcionar un traballo derivado baixo a licenza GPL ademais da licenza Copyleft-Next orixinal.
- A estrutura inclúe a utilidade "rv", que proporciona unha interface para a interacción desde o espazo do usuario cos controladores do subsistema RV (Runtime Verification), deseñada para comprobar o correcto funcionamento en sistemas altamente fiables que garanten a ausencia de fallos. A verificación realízase en tempo de execución unindo controladores a puntos de rastrexo que verifican o progreso real da execución fronte a un modelo determinista de referencia predeterminado da máquina que define o comportamento esperado do sistema.
- O dispositivo zRAM, que permite almacenar a partición de intercambio na memoria de forma comprimida (créase un dispositivo de bloque na memoria ao que se realiza o intercambio con compresión), implementa a capacidade de reempaquetar páxinas utilizando un algoritmo alternativo para acadar un nivel superior. de compresión. A idea principal é proporcionar unha elección entre varios algoritmos (lzo, lzo-rle, lz4, lz4hc, zstd), que ofrecen os seus propios compromisos entre a velocidade de compresión/descompresión e o nivel de compresión, ou óptimo en situacións especiais (por exemplo, para comprimir grandes páxinas de memoria).
- Engadida a API "iommufd" para xestionar o sistema de xestión de memoria de E/S - IOMMU (Unidade de xestión de memoria de E/S) desde o espazo do usuario. A nova API permite xestionar táboas de páxinas de memoria de E/S mediante descritores de ficheiros.
- BPF ofrece a posibilidade de crear tipos, definir os seus propios obxectos, construír a súa propia xerarquía de obxectos e crear de forma flexible as súas propias estruturas de datos, como listas vinculadas. Para os programas BPF que entran en modo de suspensión (BPF_F_SLEEPABLE), engadiuse soporte para bloqueos bpf_rcu_read_{,un}lock(). Compatibilidade implementada para gardar obxectos task_struct. Engadiuse o tipo de mapa BPF_MAP_TYPE_CGRP_STORAGE, que proporciona almacenamento local para cgroups.
- Para o mecanismo de bloqueo RCU (Read-copy-update), implícase un mecanismo opcional de chamadas de devolución de chamada "preguiceiras", no que se procesan varias chamadas de devolución de chamada á vez usando un temporizador en modo por lotes. A aplicación da optimización proposta permítenos reducir o consumo de enerxía en dispositivos Android e ChromeOS nun 5-10% ao pospoñer as solicitudes de RCU durante os tempos de inactividade ou a baixa carga do sistema.
- Engadido sysctl split_lock_mitigate para controlar como reacciona o sistema cando detecta bloqueos divididos que se producen ao acceder a datos non aliñados na memoria debido a que os datos cruzan dúas liñas de caché da CPU ao executar unha instrución atómica. Tales bloqueos levan a unha caída significativa no rendemento. Establecer split_lock_mitigate en 0 só emite un aviso de que hai un problema, mentres que se establece split_lock_mitigate en 1 tamén fai que o proceso que fixo que o bloqueo se ralentice para preservar o rendemento do resto do sistema.
- Propúxose unha nova implementación de qspinlock para a arquitectura PowerPC, que demostra un maior rendemento e resolve algúns problemas de bloqueo que xorden en casos excepcionais.
- O código de manexo de interrupcións MSI (Message-Signaled Interrupts) foi reelaborado, eliminando os problemas arquitectónicos acumulados e engadindo soporte para vincular controladores individuais a diferentes dispositivos.
- Para os sistemas baseados na arquitectura de conxunto de instrucións LoongArch usada nos procesadores Loongson 3 5000 e que implementan o novo RISC ISA, similar a MIPS e RISC-V, implícase o soporte para os modos ftrace, protección de pila, suspensión e espera.
- Proporcionouse a posibilidade de asignar nomes a áreas de memoria anónima compartida (antes os nomes só se podían asignar á memoria anónima privada asignada a un proceso específico).
- Engadiuse un novo parámetro de liña de comandos do núcleo "trace_trigger", deseñado para activar un activador de rastrexo usado para vincular comandos condicionais chamados cando se activa unha comprobación de control (por exemplo, trace_trigger="sched_switch.stacktrace se prev_state == 2").
- Aumentáronse os requisitos para a versión do paquete binutils. A construción do núcleo agora require polo menos binutils 2.25.
- Ao chamar a exec(), engadiuse a posibilidade de colocar un proceso nun espazo de nomes de tempo, no que o tempo é diferente da hora do sistema.
- Comezamos a transferir funcionalidades adicionais da rama Rust-for-Linux relacionadas co uso da linguaxe Rust como segunda lingua para desenvolver controladores e módulos do núcleo. O soporte de Rust está desactivado por defecto e non fai que Rust se inclúa como unha dependencia obrigatoria da construción do núcleo. A funcionalidade básica ofrecida na última versión amplíase para admitir código de baixo nivel, como o tipo Vec e as macros pr_debug!(), pr_cont!() e pr_alert!(), así como a macro de procedemento "#[vtable". ]”, que simplifica o traballo con táboas de punteiros sobre funcións. En próximas versións espérase a adición de enlaces Rust de alto nivel sobre os subsistemas do núcleo, que permitirán a creación de controladores completos en Rust.
- O tipo "char" usado no núcleo agora declárase sen asinar por defecto para todas as arquitecturas.
- O mecanismo de asignación de memoria de placa - SLOB (asignador de lousa), que foi deseñado para sistemas cunha pequena cantidade de memoria, foi declarado obsoleto. En lugar de SLOB, en condicións normais recoméndase utilizar SLUB ou SLAB. Para sistemas cunha pequena cantidade de memoria, recoméndase utilizar SLUB no modo SLUB_TINY.
- Permítese incluír no código do núcleo e cambios proporcionados baixo a licenza Copyleft-Next 0.3.1. A licenza Copyleft-Next foi creada por un dos autores de GPLv3 e é totalmente compatible coa licenza GPLv2, segundo confirmaron os avogados de SUSE e Red Hat. En comparación coa GPLv2, a licenza Copyleft-Next é moito máis compacta e máis fácil de entender (elimináronse a parte introdutoria e a mención de compromisos obsoletos), define o prazo e o procedemento para eliminar as infraccións e elimina automaticamente os requisitos de copyleft para o software obsoleto que ten máis de 15 anos.
- Subsistema de disco, E/S e sistemas de ficheiros
- Realizáronse melloras en Btrfs destinadas a solucionar o problema do "buraco de escritura" nas implementacións de RAID 5/6 (un intento de restaurar un RAID se se produce un fallo durante a escritura e é imposible entender en que bloque se escribiu correctamente o dispositivo RAID, que pode levar á destrución de bloques, correspondentes a bloques suscritos). Ademais, agora os SSD activan automaticamente a operación de descarte asíncrona de forma predeterminada cando é posible, o que permite mellorar o rendemento debido á agrupación eficiente das operacións de descarte en filas e ao procesamento da cola por un procesador en segundo plano. Mellora do rendemento das operacións send e lseek, así como do FIEMAP ioctl.
- Ampliáronse as capacidades para xestionar a escritura diferida (escritura posterior, gardado en segundo plano dos datos modificados) para dispositivos de bloque. Nalgunhas situacións, como cando se usan dispositivos de bloqueo de rede ou unidades USB, as escrituras perezosas poden provocar un gran consumo de memoria RAM. Para controlar o comportamento das escrituras preguiceiras e manter o tamaño da caché da páxina dentro de certos límites, introducíronse en sysfs (/sys/class/bdi/) novos parámetros strict_limit, min_bytes, max_bytes, min_ratio_fine e max_ratio_fine.
- O sistema de ficheiros F2FS implementa unha operación de substitución atómica ioctl, que lle permite escribir datos nun ficheiro nunha única operación atómica. F2FS tamén engade unha caché de extensión de bloque para axudar a identificar os datos utilizados activamente ou aos que non se accedeu durante moito tempo.
- No ext4 FS só se observan correccións de erros.
- O sistema de ficheiros ntfs3 ofrece varias opcións de montaxe novas: "nocase" para controlar a distinción entre maiúsculas e minúsculas nos nomes de ficheiros e directorios; windows_name para prohibir a creación de nomes de ficheiros que conteñan caracteres que non sexan válidos para Windows; hide_dot_files para controlar a asignación da etiqueta do ficheiro oculta para os ficheiros que comezan cun punto.
- O sistema de ficheiros Squashfs implementa unha opción de montaxe "threads=", que permite definir o número de fíos para paralelizar as operacións de descompresión. Squashfs tamén introduciu a posibilidade de asignar ID de usuario dos sistemas de ficheiros montados, que se usan para facer coincidir os ficheiros dun usuario específico nunha partición externa montada con outro usuario do sistema actual.
- Reelaborouse a implementación das listas de control de acceso POSIX (ACL POSIX). A nova implementación elimina problemas arquitectónicos, simplifica o mantemento da base de código e introduce tipos de datos máis seguros.
- O subsistema fscrypt, que se usa para o cifrado transparente de ficheiros e directorios, engadiu soporte para o algoritmo de cifrado SM4 (estándar chinés GB/T 32907-2016).
- Proporcionouse a capacidade de construír o núcleo sen soporte para NFSv2 (no futuro planean deixar completamente de soportar NFSv2).
- Cambiouse a organización da comprobación dos dereitos de acceso aos dispositivos NVMe. Ofrece a capacidade de ler e escribir nun dispositivo NVMe se o proceso de escritura ten acceso ao ficheiro dedicado do dispositivo (anteriormente o proceso tiña que ter o permiso CAP_SYS_ADMIN).
- Eliminouse o controlador do paquete de CD/DVD, que quedou obsoleto en 2016.
- Virtualización e seguridade
- Implementouse un novo método de protección contra a vulnerabilidade de Retbleed nas CPU Intel e AMD, utilizando o seguimento da profundidade de chamadas, que non ralentiza o traballo tanto como a anterior protección contra Retbleed. Para activar o novo modo, propúxose o parámetro da liña de comandos do núcleo "retbleed=stuff".
- Engadiuse un mecanismo híbrido de protección do fluxo de instrucións FineIBT, que combina o uso de instrucións de hardware Intel IBT (seguimento indirecto de ramas) e protección de software kCFI (kernel Control Flow Integrity) para bloquear a violación da orde de execución normal (fluxo de control) como resultado do uso. de exploits que modifican os punteiros almacenados na memoria sobre funcións. FineIBT permite a execución por salto indirecto só no caso dun salto á instrución ENDBR, que se sitúa ao comezo da función. Ademais, por analoxía co mecanismo kCFI, compróbanse os hash para garantir a inmutabilidade dos punteiros.
- Engadíronse restricións para bloquear ataques que manipulan a xeración de estados "vaya", despois de que se completan as tarefas problemáticas e restablece o estado sen deter o sistema. Cun número moi grande de chamadas ao estado "oops", prodúcese un desbordamento do contador de referencia (refcount), que permite a explotación de vulnerabilidades causadas por desreferencias de punteiro NULL. Para protexerse contra tales ataques, engadiuse ao núcleo un límite para o número máximo de disparadores "oops", tras superar o cal o núcleo iniciará unha transición ao estado "pánico" seguido dun reinicio, o que non permitirá lograr o número de iteracións necesarias para desbordar o refcount. Por defecto, o límite está establecido en 10 mil "oops", pero se o desexa, pódese cambiar mediante o parámetro oops_limit.
- Engadíronse os parámetros de configuración LEGACY_TIOCSTI e sysctl legacy_tiocsti para desactivar a posibilidade de poñer datos no terminal usando o ioctl TIOCSTI, xa que esta funcionalidade pódese usar para substituír caracteres arbitrarios no búfer de entrada do terminal e simular a entrada do usuario.
- Proponse un novo tipo de estrutura interna, encoded_page, na que se usan os bits inferiores do punteiro para almacenar información adicional utilizada para protexerse contra a desreferencia accidental do punteiro (se realmente é necesaria a desreferencia, primeiro deben borrarse estes bits adicionais). .
- Na plataforma ARM64, na fase de inicio, é posible activar ou desactivar a implementación de software do mecanismo Shadow Stack, que se usa para protexer contra a sobreescritura do enderezo de retorno dunha función en caso de desbordamento do búfer na pila ( a esencia da protección é gardar o enderezo de retorno nunha pila "sombra" separada despois de que o control se transfira á función e recupere o enderezo indicado antes de saír da función). O soporte para implementacións de hardware e software de Shadow Stack nun conxunto de núcleo permítelle usar un núcleo en diferentes sistemas ARM, independentemente da súa compatibilidade con instrucións para a autenticación do punteiro. A inclusión dunha implementación de software realízase mediante a substitución das instrucións necesarias no código durante a carga.
- Engadido soporte para o uso do mecanismo de notificación de saída asíncrona nos procesadores Intel, que permite detectar ataques dun só paso ao código executado en enclaves SGX.
- Proponse un conxunto de operacións que permite ao hipervisor admitir solicitudes dos sistemas invitados Intel TDX (Trusted Domain Extensions).
- Elimináronse as opcións de compilación do núcleo RANDOM_TRUST_BOOTLOADER e RANDOM_TRUST_CPU, en favor das correspondentes opcións de liña de comandos random.trust_bootloader e random.trust_cpu.
- O mecanismo Landlock, que permite limitar a interacción dun grupo de procesos co entorno externo, engade soporte para a marca LANDLOCK_ACCESS_FS_TRUNCATE, que permite controlar a execución das operacións de truncamento de ficheiros.
- Subsistema de rede
- Para IPv6, engadiuse soporte para PLB (Protective Load Balancing), un mecanismo de equilibrio de carga entre enlaces de rede destinado a reducir os puntos de sobrecarga nos conmutadores do centro de datos. Ao cambiar a etiqueta de fluxo IPv6, o PLB cambia aleatoriamente as rutas dos paquetes para equilibrar a carga nos portos do switch. Para reducir a reordenación de paquetes, esta operación realízase despois de períodos de inactividade sempre que sexa posible. O uso de PLB nos centros de datos de Google reduciu o desequilibrio de carga nos portos do switch nunha media dun 60 %, reduciu a perda de paquetes nun 33 % e reduciu a latencia nun 20 %.
- Engadido controlador para dispositivos MediaTek compatibles con Wi-Fi 7 (802.11be).
- Engadido soporte para ligazóns de 800 gigabits.
- Engadida a posibilidade de cambiar o nome das interfaces de rede sobre a marcha, sen deixar de traballar.
- Engadiuse unha mención ao enderezo IP ao que chegou o paquete ás mensaxes de rexistro sobre SYN flood.
- Para UDP, implementouse a capacidade de usar táboas hash separadas para diferentes espazos de nomes de rede.
- Para as pontes de rede, implementouse o soporte para o método de autenticación MAB (MAC Authentication Bypass).
- Para o protocolo CAN (CAN_RAW), implementouse soporte para o modo de socket SO_MARK para engadir filtros de tráfico baseados en fwmark.
- ipset implementa un novo parámetro de máscara de bits que lle permite establecer unha máscara baseada en bits arbitrarios no enderezo IP (por exemplo, "ipset create set1 hash:ip bitmask 255.128.255.0").
- Engadido soporte para procesar cabeceiras internas dentro de paquetes tunelizados a nf_tables.
- Оборудование
- Engadiuse o subsistema "accel" coa implementación dun marco para aceleradores computacionais, que se pode subministrar en forma de ASIC individuais ou en forma de bloques IP dentro do SoC e da GPU. Estes aceleradores están dirixidos principalmente a acelerar a solución de problemas de aprendizaxe automática.
- O controlador amdgpu inclúe soporte para os compoñentes IP GC, PSP, SMU e NBIO. Para os sistemas ARM64, está implementado o soporte para DCN (Display Core Next). A implementación da saída de pantalla protexida pasou de usar DCN10 a DCN21 e agora pódese usar ao conectar varias pantallas.
- O controlador i915 (Intel) ten soporte estabilizado para tarxetas de vídeo Intel Arc (DG2/Alchemist) discretas.
- O controlador Nouveau admite as GPU NVIDIA GA102 (RTX 30) baseadas na arquitectura Ampere. Para as tarxetas nva3 (GT215), engadiuse a capacidade de controlar a luz de fondo.
- Engadiuse soporte para adaptadores sen fíos baseados en chips Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) e MediaTek MT7996, interfaces Bluetooth Broadcom BCM4377/4378/4387, así como controladores Motorcomm ytVIDIA yt8521GE NVIDIA.
- Engadido soporte ASoC (ALSA System on Chip) para chips de son integrados HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Engadiuse soporte para a interface de audio Focusrite Saffire Pro 40. Engadiuse o códec de audio Realtek RT1318.
- Engadido soporte para teléfonos intelixentes e tabletas Sony (Xperia 10 IV, 5 IV, X e X compacto, OnePlus One, 3, 3T e Nord N100, Xiaomi Poco F1 e Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
- Engadiuse soporte para ARM SoC e Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695), (SM670) placas , SDM670 (Snapdragon 8976), MSM652 (Snapdragon 8956), MSM650 (Snapdragon 3326), RK351 Odroid-Go/rg310, Zyxel NSA8S, InnoComm i.MXXNUMXMM, Odroid Go Ultra.
Ao mesmo tempo, a Latin American Free Software Foundation formou unha versión do núcleo completamente gratuíto 6.2 - Linux-libre 6.2-gnu, eliminada de elementos de firmware e controladores que conteñan compoñentes propietarios ou seccións de código, cuxo alcance está limitado por o fabricante. A nova versión limpa novas manchas no controlador nouveau. A carga de blob está desactivada nos controladores Bluetooth mt7622, mt7996 e bcm4377. Limpáronse os nomes de blob en ficheiros dts para a arquitectura Aarch64. Código de limpeza de blob actualizado en varios controladores e subsistemas. Deixou de limpar o controlador s5k4ecgx, xa que foi eliminado do núcleo.
Fonte: opennet.ru
