Látod ezért írtam, hogy jobb lenne, ha utánaolvasnál...
A logikai bukfenc a mondandódban ott van, hogy a "gonosz kód" már eleve nem fut, nem futhat, hisz a PaX PAGEEXEC/SEGMEXEC megvalósítás pont arra hivatott, hogy a kód szegmens csak olvasható és futtatható, de nem írható, az adat szegmens pedig csak írható és olvasható, de nem futtatható (W^X). Tehát egy overflow esetén (amely ugye csak az adat szegmensen történhet) a hagyományos kódvégrehajtás (buffer-be "gonosz kód" kerül és a túlcsordulás által a visszatérési érték vagy függvény pointer átíródik úgy, hogy a "gonosz kód" hajtódjon végre) nem működhet, mert ott az adatszegmensen _alapból_ nem futhat a kód. Mit lehet azonban továbbra is csinálni? Azt, hogy a túlcsorduláskor a visszatérési érték nem úgy kerül felülírásra, hogy a shellcode-ra mutasson kapásból, hanem az mprotect() függvényre és annak felparaméterezésével először futtathatóra mappeli a shellcode memóriaterületét, amely utána így már lefuthat. A PaX mprotect resztrikció pont ezt akadályozza meg, azaz nem enged egy már írhatóra mappelt memóriaterületet átírni futtathatóvá, a futtathatót pedig írhatóvá. Az ilyen jellegű átmeneteket korlátozza. Tehát nem teheti meg azt, hogy "elobb csak write -ra ker jogot, aztan csak exec re".