GNU/Linux >> Znalost Linux >  >> Linux

Jednoduché vysvětlení toho, jak funguje Dirty COW?

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.


Linux
  1. Jak Hexdump funguje

  2. Jak zkopírovat databázi MySQL

  3. Jak funguje příkaz oc debug v OpenShift

  1. Jak funguje Tee Command?

  2. Jak upgradovat na Ubuntu 22.04 LTS – jednoduché kroky

  3. Jak napsat svůj vlastní modul linuxového jádra s jednoduchým příkladem

  1. Jak napsat smyčku v Bash

  2. Jak zkopírovat symbolické odkazy?

  3. Jak transakčně zkopírovat soubor?