Egy kernel patchben vonták vissza az SMC protokollhoz készült TCP ULP funkciót, mivel hibásan működött

A Linux kernel hálózati alrendszerének net-next fejlesztési ágában megjelent egy revert patch, amely kivezeti az SMC protokollhoz készült TCP ULP támogatást. Eredetileg az volt a cél, hogy a programok a TCP helyett észrevétlenül az SMC-t használhassák, anélkül hogy ehhez bármit át kellene írni az alkalmazásban, a fejlesztők szerint azonban a mostani megoldás felépítése nem tartható. Az SMC, vagyis a Shared Memory Communications egy Linuxos kommunikációs protokoll, amely bizonyos környezetekben a megszokott TCP/IP adatút helyett megosztott memóriára és nagy sebességű összeköttetésekre, például RDMA/Infiniband vagy RoCE kapcsolatra támaszkodik, hogy csökkentse a késleltetést és a processzorterhelést.

Egy kernel patchben vonták vissza az SMC protokollhoz készült TCP ULP funkciót, mivel hibásan működött

Mi volt a gond a megvalósítással?

A commit szövege szerint az ULP implementáció egy már aktív TCP socketet próbált SMC socketre átalakítani úgy, hogy futás közben helyben átírta a hozzá tartozó fájlleíró struktúrákat, vagyis a struct file, a dentry és az inode példányokat. Ez ütközik a VFS alapfeltevéseivel, mert nyitott fájlnál ezek az objektumok a kernel működési modellje szerint nem cserélhetők szabadon, a helyben átírás pedig use-after-free jellegű hibákat és általános instabilitás kockázatát hozták magukkal.

Mint jelent ez a következő kernel ciklusra nézve?

A commit szövege kiemeli, hogy az átláthatóságot célzó régi alkalmazások támogatására léteznek tisztább megközelítések, például LD_PRELOAD alapú megoldások vagy BPF-es útvonalak, ezért a helyes lépés a funkció teljes eltávolítása. A revert patch a net-next ágban már megjelent, így a következő Linux 7.0 kernelciklusban várhatóan ez a TCP ULP réteg már nem lesz része az SMC kódbázisnak.