Vy a 3 další lidé se učíte na test a používáte stejné poznámky.
Řeknete:"Musím jít, potřebuji si udělat kopii těchto poznámek pro sebe, kterou si můžu označit... nech mě udělat kopii!"
Vezmete poznámky do kopírky, zkopírujete je, změníte originál a poté vezměte upravený originál zpět ke zbytku skupiny. Ta upravená verze je špatná; změnili jste některé odpovědi na nesprávné.
Zbytek skupiny se nechá studovat špatnou verzi poznámek, zatímco vy si vezmete domů dobrou verzi.
Projdete testem.
Selhají.
Jedinou nuancí mezi tímto příkladem a Dirty COW je to, že v Dirty COW nemáte být předal originál; jádro vytvoří kopii za vás. Ale existuje rasová podmínka, která vám omylem umožní přístup k originálu, když požádáte o kopii. „Race condition“ znamená „můžete se dostat k něčemu, k čemu byste neměli mít přístup.“
Nejsem odborník na linuxové jádro, ale jsem obeznámen se souvisejícími pojmy a četl jsem Linusův komentář a rozdíl. Zkusím to – možná mě lidé opraví, pokud se pletu, a společně to vyřešíme.
Copy On Write je koncept interní paměti, kde, především z důvodů výkonu, operace, které vytvářejí kopii části paměti, ve skutečnosti nezískají svou vlastní kopii, dokud a dokud neprovedou změnu v této paměti - v tom okamžiku můžete rychle vytvořit jejich kopii, provést změnu a předat jim ji zpět. Výhodou je, že nemusíte dělat práci s vytvářením kopie, dokud a dokud ji skutečně nezmění – rychlejší, menší využití paměti, lepší ukládání do mezipaměti.
Chyba je v kódu, který kopíruje. Zdá se, že v této kopii (nebo ve skutečnosti v účetnictví kolem této kopie) existuje spor. Spor nastane, když dva různé procesy nebo vlákna přistupují ke stejnému prostředku a šlapou na sebe. V tomto případě se stane, že paměť je označena jako zapisovatelná před tím, než je skutečně zkopírována - pokud dvě vlákna spolupracují velmi blízko u sebe, druhé může využít příznak zapisovatelné a ve skutečnosti zapisovat do původní paměti, nikoli kopie.
Výhoda spočívá v tom, že to umožňuje procesu povznést se tím, že získá přístup pro zápis do vlastního chápání jádra. Jádro ví, na jakém uživateli každý proces běží – tím, že vezme kopii paměti, kterou jádro používá k uložení těchto informací pomocí funkce Copy On Write, a pak pomocí této chyby Dirty COW, může skutečně zapsat informace o uživateli do vlastní kopie jádra. . Takže napíšou, že proces je spuštěn jako root.. a pak mohou dělat cokoli.
Demo program to používá k zápisu do souboru, do kterého může zapisovat pouze root, ale mohl udělat doslova cokoliv. Opravou bylo oddělit nový příznak, který říká, že provádějí CopyOnWrite, namísto použití příznaku Write pro oba.