Ono je to trochu komplikovaný. Přečtete si například od Isaca Assimova knihu Nahé Slunce. Přestože roboti nesmí porušit tři zákony robotiky, stejně dojde nakonec k zavraždění člověka robotem. Chyba v robotech, v zákonech? Nikoliv. Jen komplikovaný způsob jak spojit několik povolených technik a vlastností v zákeřnou a ničivou zbraň. Tohle je stejný. Výše zmíněný bug vlastně vznikl jen kombinací několika nasobě nezávislých vlastností.
Je pravdou, že pointery by se měli kontrolovat, nicméně, právě proto se inicializují na NULL, což má značit, že jsou neplatné. Většinou pak OS provádí zneplatnění první stránky právě proto, aby se předešlo používání neplatných ukazatelů.
Pokud však jiná část systému umožní uživateli mapovat i adresu 0, pak si jen zadělává na další bezpečnostní problém. Je to prostě nestandardní operace (už jen to, že mmap prostě vezme 0 jako číslo, nikoliv jako neplatný ukazatel).
Když se k tomu přídá nějaká optimalizace, dovolující kernelu spouštět kód v user-space bez předchozího průchodu nějakou tou branou, problém je na světě. A můžeme tomu říkat,že chyba tam je dlouho. Není to pravda. Jen doposud nikdo nedokázal sestavit tu správnou situaci, aby uvedená série drobných prohřešků způsobila velký problém. Doposud prostě ještě nikdo nenamýchal ten správný lektvar.
Tohle celé je problém konecepce. Nikdo prostě na začátku neřekl jasně: "NULL znamená neplatný". To je jen uzus, jakýsi folklor, štábní kultura céčkových programátorů. A zatímco jeden si myslí, že NULL je neplatný, druhý si řekne, nula je také adresa, tak proč tam nemapovat. A když si k tomu třetí myslí, že kernel = root (což je omyl!), tak čtvrty to zamýchá, uvaří, a pak se správným zaříkávání vyrobí pěkný exploit.
Tím jsem jen nechtěl říct, že Windows jsou na tom lépe. Microsoft je velká firma, má mnoho týmů a každy pracuje na něčem jiném. Velké firmy mívají problém s koncepcí. Ale z mého pohledu s tím Microsoft má měnší problémy, než Linux a jeho komunita.