U podsustavu kriptografije Linux se priprema uklanjanje podrške zero-copy iz sučelja AF_ALG za tipove algoritama SKCIPHER i AEAD. Promjena je već u stablu cryptodev i očekuje se da će biti poslana u prozor spajanja Linux 7.2, koji bi trebao otvoriti u lipnju. Povod su rasprave o sigurnosti zero-copy mehanizama u Kernelu, posebno nakon nedavnih ranjivosti u kriptografskom kodu Linuxa.
AF_ALG — to je korisničko sučelje za kriptografski API jezgre Linuxa. Kroz njega programi mogu pristupiti implementacijama šifri, hešova i AEAD algoritama u jezgru kao socketima. Dokumentacija Linuxa posebno opisuje za AF_ALG zero-copy način kroz splice() i vmsplice(), gdje jezgra nastoji izbjeći nepotrebno kopiranje podataka u memoriju jezgre.
Problem je u tome što je u slučaju AF_ALG takva dobit u performansama bila manje važna, a rizici su preveliki. Autor promjene, developer kriptografske podsustave Linux, Erik Biggers iz Googlea, je naveo, ističe da zero-copy omogućava korisničkom prostoru izvođenje kriptografskih operacija izravno na stranicama page cache datoteka, poput binarnika su, a također stvara uvjete za TOCTOU ranjivosti, kada se memorija može mijenjati istovremeno s operacijama nad njom.
Drugim riječima, mehanizam koji je koristan u mrežnim ili datotečnim ulazno-izlaznim operacijama, u AF_ALG izgleda kao preopasna optimizacija. Sam AF_ALG, prema riječima developera, sada se u osnovi zadržava zbog unazadne kompatibilnosti s malim skupom programa, poput iwd, koji još nisu prešli na kriptografiju u korisničkom prostoru. Izvorno je AF_ALG zamišljen i za pristup hardverskim kriptoakceleratorima, no u praksi se pokazao kao ne previše učinkovit sučelje za ovu svrhu.
Važno je napomenuti da se ne radi o potpunom uklanjanju splice() ili sendfile() za AF_ALG. Promjena se opisuje kao "softver za prekid" kompatibilnosti: prijenos podataka u AF_ALG upitima putem splice() i sendfile() će se nastaviti, ali jezgra će sada raditi unutarnju stabilnu kopiju podataka prije kriptografske operacije. Performanse se u nekim slučajevima mogu smanjiti, ali korisničko API formalno ne propada.
Posebno se naglašava da se zero-copy za sada uklanja iz skcipher i aead. Podrška za tip hash bit će razmatrana posebno.
Kontekst promjena je neugodan. Krajem travnja otkrivena je ranjivost Kopiranje nije uspjelo (CVE-2026-31431) u algif_aead, što se točno odnosi na korisničko kripto sučelje AF_ALG. Istraživači su pokazali da povezanost AF_ALG, splice() i značajki AEAD obrade omogućuje neprivilegiranom korisniku oštećivanje page cachea, uključujući stranice povezane sa setuid binarnim datotekama, i stjecanje privilegija do root.
Pojava Kopiranje nije uspjelo bila je povezana s optimizacijom iz 2017. godine koja je prebacila AEAD operacije na obradu 'na mjestu'; prilikom prijenosa datoteke putem splice() u AF_ALG, jezgra je radila ne s kopijom, već s referencama na stranice page cachea. Kao rezultat toga, dio podataka koji su se smatrali samo ulaznima mogao je završiti u zapisivom scatterlistu.
Uklanjanje zero-copy iz AF_ALG nije točka ispravka samo jedne ranjivosti. Radije, to je pokušaj da se ukloni čitava klasa rizičnih scenarija iz rijetko korištenog UAPI-a, gdje dobit od optimizacije ne opravdava složenost i potencijalne posljedice. Za prosječne korisnike, promjena će najvjerojatnije ostati neprimijećena; za rijetke aplikacije koje aktivno koriste AF_ALG putem splice() ili sendfile(), moguća je degradacija performansi zbog dodatnog kopiranja.
Izvor: linux.org.ru
