Vlákno názorů k článku Heartbleed bug: vážná zranitelnost v OpenSSL od mc - Kdyz si v C naalokuji pamet co je...

  • Článek je starý, nové názory již nelze přidávat.
  • 11. 4. 2014 19:58

    mc (neregistrovaný)

    Kdyz si v C naalokuji pamet co je obsahem? Nemuze se stat, ze tam budou data treba z uplne jineho procesu co jiz danou pamet uvolnil? Copak se pri uvolnovani pameti ten usek napred prepisuje nejakymi nulami?

  • 11. 4. 2014 20:44

    KarelI

    Kdyz se nad tim zamyslite, tak vam asi samotnemu dojde, ze by to byla dost zasadni dira do systemu. Takto by slo cist jakakoli data z jinych procesu napr. jinych uzivatelu.
    Kdyz alokujete v C, tak vam knihovna da nejaky kus ktery byl nejspis v tom danem procesu uz pouzit drive, cili tam bude nahodny bordel z toho procesu. Pokud uz v ramci procesu pamet neni, tak system prideli nejake nove stranky a predpokladam (popravde nevim), ze to vynuluje nebo nejak jinak nastavi/znahodni.

  • 11. 4. 2014 22:21

    Ondřej Novák

    No ve Windows se alokuje pomocí VirtualAlloc a každý commitnutý 4KB blok (stránka) je automaticky nulovaný. V linuxu se blok commituje při prvním přístupu (před tím, co je rezervován mallocem) a vsadím se, že je taky vynulovaný. Jakmile je blok commitlý, patří plně do vlastnictví procesu.

    Jednodušeji a lépe, každý proces je v paměti naprosto a dokonale izolován. Z jeho pohledu je v paměti sám a na nevyužitých adresách jsou buď nuly, nebo minové pole. Jen za určitých okolnosti lze sdílet paměť mezi procesy, ale to musí extra vyjednat a pak ten proces vidí sdílený kus ve vyjednaném rozsahu a ani o bajt víc.

  • 13. 4. 2014 23:33

    Sten (neregistrovaný)

    Alokace paměti má dvě vrstvy: procesovou a jadernou. Jaderná alokuje vždy po stránkách, jinak to neumí. Ty samozřejmě mohly patřit jiné aplikace, a tak je při alokaci vždy vynuluje. Takže k úniku dat z jiné aplikace takhle dojít nemůže. Uvnitř procesu se pak tyto stránky rozdělují na menší jednotky, protože datové struktury málokdy potřebují celou stránku. Ty se po dealokaci recyklují (volání jádra jsou dost drahá, proto se alokátor snaží je minimalizovat), ale to už nikdo nemaže a tak při další alokaci můžou být na naalokovaném místě dříve smazaná data toho samého procesu.