Il lancio di la nuova versione del kernel Linux 6.13 è stato ritardato a causa di problemi di stabilità generato a causa di una modifica introdotta da un dipendente Microsoft. Si dice che questo cambiamento è stato accettato nella filiale principale lo scorso novembre in un modo che ha sorpreso molti, poiché non seguiva le pratiche abituali.
La patch è stata inviata in modo non standard e approvato senza ricevere riconoscimenti (ACK) da un peer dei manutentori dell'architettura x86, il che costituisce una violazione degli standard accettati nello sviluppo del kernel.
Introdotta la patch in questione sostegno per utilizzare pagine di memoria di grandi dimensioni in modalità ROX (di sola lettura ed eseguibile) durante l'allocazione della memoria destinata al codice eseguibile e lo scopo della patch inviata era Rafforzare la sicurezza del sistema rendendo più difficile lo sfruttamento delle vulnerabilità eseguendo codice dannoso nella memoria contrassegnata come di sola lettura.
L'utilizzo di pagine di grandi dimensioni per mappare le aree di testo riduce la pressione su iTLB e migliora le prestazioni.
Estendi execmem_alloc() con la possibilità di utilizzare pagine di grandi dimensioni con autorizzazioni ROX come cache per allocazioni più piccole. Per riempire la cache, una grande pagina scrivibile viene allocata da vmalloc con VM_ALLOW_HUGE_VMAP, riempita con istruzioni non valide e quindi rimappata come ROX.
L'alias della mappa diretta di quella pagina grande è escluso dalla mappa diretta. Parti di quella grande pagina vengono fornite ai chiamanti di execmem_alloc() senza alcuna modifica nei permessi. Quando la memoria viene liberata con execmem_free(), viene nuovamente invalidata in modo che non contenga istruzioni obsolete.
Si dice che il ritardo nella versione del kernel 6.13 è perchè utilizzando una grande cache di pagine di memoria eseguibile in modalità ROX era abilitato per impostazione predefinita per i moduli sui sistemi x86_64. La modifica ha risolto un problema tecnico importante: l'allocazione delle pagine in modalità ROX per il codice eseguibile non ancora completamente preparato.
Ciò ha evitato la necessità di riassegnare temporaneamente le pagine dalla modalità ROX alla modalità di scrittura finché i moduli del kernel non furono pronti per essere eseguiti. Tuttavia, nonostante i benefici attesi, i problemi di stabilità individuati mettono in discussione la qualità e la sicurezza della patch, portando alla necessità di estendere i test prima del rilascio finale.
E sembra che gli sviluppatori non avessero torto, visto che durante la fase di test finale del kernel Linux 6.13, un ingegnere Intel rilevato un problema critico che ha influenzato il funzionamento del sistema su alcuni laptop con processori basati sulla microarchitettura Alderlake. Il problema si è manifestato durante il tentativo di riattivare il kernel dalla modalità di sospensione, un errore particolarmente rilevante sui dispositivi mobili.
x86: disabilita il supporto EXECMEM_ROX
Il module_writable_address() ha causato un enorme pasticcio.
alternative.c, per non parlare del fatto che contiene ancora bug, alcuni dei quali notevoli.
Le varianti CFI falliscono e falliscono.Mike ha lavorato sulle patch per ripulire nuovamente il tutto, ma data la situazione attuale, semplicemente non è pronto.
Disattiva per ora, riproviamo nel ciclo successivo.
Il problema è sorto durante la compilazione del kernel con il compilatore Clang e abilitare la modalità di protezione CFI (Integrità del flusso di controllo). Questa modalità è progettata per rafforzare la sicurezza bloccando manipolazioni improprie del flusso di controllo, come quelle che si verificano negli attacchi che alterano i puntatori a funzioni in memoria. Tuttavia, l'interazione tra CFI e le nuove ottimizzazioni introdotte nel kernel per la gestione delle pagine di memoria ROX (di sola lettura ed eseguibili) si è rivelata problematica.
Il meccanismo EXECMEM_ROX, che consente di utilizzare una cache di pagine di memoria eseguibili contrassegnate come di sola lettura, sembrava essere la causa principale dei guasti osservati alla riattivazione del sistema. Come soluzione temporanea, i manutentori Intel e AMD responsabili dell'architettura x86 hanno proposto di disabilitare EXECMEM_ROX nella versione 6.13 del kernel. Ciò consentirà il rilascio del kernel mentre si lavora su una patch definitiva che risolva il problema senza compromettere stabilità o sicurezza.