mě se líbí ta část s tím mapováním na adresu 0. Nějak jsem nepochopil, jak je možné, že kernel vůbec má práva spouštět něco v userspace bez změny kontextu. Ale spíš to bude totální nesystémovostí celého jádra linuxu (a Windows na tom nebudou lépe)
Protiřečíte si - jednak říkáte, že si "platíme" za to, že Linux je zdarma, ale bezprostředně předtím, že Windows [která jsou pochopitelně placená] na tom nebudou lépe. Tak jak to bylo myšleno?
Přesně tak. Všichni se spoléhají na to že když je Linux open-source, že to přece ti lidé musí vidět...
No jo, ale kolik uživatetelů linuxu se ve zdrojácích hrabe? :)
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.
Windows jsou na tom lépe :D, a co ty pache kritických a nejkritičtějších chyb které opravují díry od verze Windows Vista až po Windows 2000 někdy i starší :D. To nemluvím o nedostatcích které MS nenapravil od dob Windows NT 4.0 případně 95 :D. Windows na tom lépe nejsou což dokazuje i velké množství škodlivého softwaru. Kolik virů a škodlivého softu je na linux, případně ma Mac OS X. Ať někdo nějak tu chybu zneužije a ukáže kolik tuxíků ohromí :D.
Zavirovanost systému je dána jeho počtem kopií a nasazením mezi lammy. Ve Windows je možná mnoho virů, ale jen málo tzv. skutečných virů. Tedy viry, které se nešíří jen díky sociálního inženýrstvý, ale skutečně napadají systém. Kdyby linux byl tak rozšířený jako Windows, tak chyba z roku 2001 je již dávno opravena po tom, co by díky tomu někdo sestřelil polovinu uživatelských stanic.