A Linux kernel stack egy nagyon véges erőforrás, el kell férnie két memória oldalban (2 memory page - 8KB). A kernel stack túlcsordítása nem nehéz feladat, sajnos sok programozó nem fordít elegendő figyelmet a stack ellenőrzésre. A stack túlcsorulása katasztrófális hatással lehet rendszerre nézve.Andries Brouwer elgondolkozott a problémán, és a symlinkek feloldásának oldaláról közelítette meg a kérdést. A symlinkek feloldásának során (symbolic link resolution - az a folyamat, amely során a rendszer végighalad a szimbolikus link által mutatott úton) a kernel találkozhat egy újabb symlikkel, amely egy újabb symlinkre mutat stb., ezeket fel kell oldania. Ehhez a kernelnek egy rekurzív híváshoz kell folyamodnia, amelyet a symlink feloldó kód tartalmaz. Természetesen minden hívás helyet igényel a kernel stackben, így a rekurzív hívást fokozott figyelemmel kell kísérni, mert különben egy bizonyos számú symlink feloldás azzal járhat, hogy a kernel stack elfogy, vagyis a kernel stack túlcsordul (overflow). Hogy ez ne történhessen meg, a symlink kód egy konstansban szabályozza az egymás után feloldható symlinkek számát, amelyet 5 darabban határoztak meg.
Andries készített egy új symlink implementációt amely megszűnteti ezt a rekurziós gondot. Az elképzelés - szemben a régi symlink kóddal -, hogy egy elkülönített saját stacket kezel, amely mindig a symlink feloldás éppen aktuális állapotát tartalmazza. Így az öt-szintű limitet könnyedén felemelhették anélkül, hogy tartani kellene a kernel stack túlcsordulásától.
Kapcsolódó linkek:
Ben LaHaise: A kernel stack megosztása - új 4KB méretű stack