Il creatore di Linux, Linus Torvalds, oggigiorno non scrive tanto codice del kernel effettivo quanto prima. In questi giorni è spesso impegnato a supervisionare la comunità di sviluppo del kernel upstream con la revisione del codice, la gestione dei rilasci e la partecipazione alle discussioni sulle mailing list. Di tanto in tanto però si sporca e si sporca con qualche hacking del kernel di basso livello proprio come ha fatto ora per Linux 6.5 con il miglioramento del codice di espansione dello stack in modalità utente.
Il poco meno di 500 righe di rielaborazione del codice è per migliorare i bit di espansione dello stack in modalità utente. Ha spiegato nell’unione:
Questo modifica il nostro codice di espansione dello stack in modalità utente per prendere sempre mmap_lock per la scrittura prima di modificare il layout della VM.
In realtà è qualcosa che tecnicamente avremmo sempre dovuto fare, ma poiché non ne avevamo strettamente bisogno, eravamo pigri (“opportunisti”suona molto meglio, vero?) riguardo alle cose, e abbiamo avuto questo trucco posto in cui estenderemmo lo stack vma sul posto senza eseguire il blocco appropriato.
E ha funzionato bene. Avevamo solo bisogno di cambiare vm_start (o, nel caso di stack di crescita, vm_end) e insieme ad alcuni blocchi speciali ad hoc usando il blocco anon_vma e mm->page_table_lock, tutto è stato abbastanza semplice.
Cioè, andava tutto bene fino a Ruihan Li ha sottolineato che ora che il layout vma utilizza il codice dell’albero di acero, *davvero* non cambiamo più solo vm_start e vm_end, e il blocco è davvero rotto. Ops.
In realtà non è tutto _così_ orribile risolvere questo problema una volta per tutte e fare un blocco adeguato, ma è un po’doloroso. Abbiamo fondamentalmente tre diversi casi di espansione dello stack, e funzionano tutti in modo leggermente diverso.
Per Linux 6.5 questo problema dovrebbe ora essere risolto grazie a Linus Torvalds che ha accettato lui stesso la sfida del codice. Maggiori dettagli in unione.