Fórum Root.cz
Hlavní témata => Software => Téma založeno: Martin Sršeň 15. 04. 2017, 02:14:00
-
Zistil som ze na jednej stránke sa mi objavuje pomerne bizarný grafický bug. V podstate mi na pozadie stránky vykresľovali objekty z iných kariet. Prikladám súbor ktorý to (aspoň u mňa) dokáže zreprodukovať a video (https://www.youtube.com/watch?v=nwtmRkSL-JE (https://www.youtube.com/watch?v=nwtmRkSL-JE)) čo sa vlastne deje.
Pravdepodobne to bude asi môj lokálny problém ale čo by ma zaujímalo je: Čím môže byť takáto chyba spôsobená?
-
Minimálně v aktuálním Vivaldi (založené na Chromiu, samotné jádro by mělo být stejné) to nedělá nic
-
ani v Chromium 57.0.2987.98 (Xubuntu 14.04.5 32bit) to problem nedela...
-
Čím môže byť takáto chyba spôsobená?
- Naalokuješ paměť na obrázek
- Nakreslíš do ni obrázek
- Uvolníš ji (free z libc skoro nikdy nemaže, proč taky)
- Naalokuješ paměť na jiný obrázek (malloc z libc skoro nikdy paměť neinicializuje, proč taky)
- Dostaneš paměť, kterou jsi před chvílí uvolnil
- Nakreslíš do ní omylem menší obrázek
- Zobrazíš ji celou → vidíš zbytky původního obrázky
+ totéž se může stát v driverech grafiky nebo přímo na hardwaru GPU, akorát místo alokátoru z libc se to děje přímo s fyzickou pamětí.
https://news.slashdot.org/story/16/01/11/1435237/nvidia-gpus-can-leak-data-from-google-chromes-incognito-mode
Když něco píšeš a chceš aby to hlavně proboha fungovalo :), tak můžeš zkusit používat calloc, který paměť nuluje. Má divnější sémantiku (počet prvků a velikost prvku, ne jen počet bajtů jako malloc). Nebo si malloc obalíš vlastní funkcí (což jsem dělal ne kvůli nulování, ale proto, že když malloc selže, chci to kontrolovaně zalogovat skončit a nenechat se sestřelit až si na ten NULL sáhnu).