Hlavní navigace

Názor k článku Programování pod Linuxem pro všechny (3) od Jirka Kosina - > pak si musite zkontrolovat, jestli ten soubor...

  • Článek je starý, nové názory již nelze přidávat.
  • 9. 2. 2004 22:20

    Jirka Kosina (neregistrovaný)

    > pak si musite zkontrolovat, jestli ten soubor uz
    > neexistuje, napriklad ho utocnik muze predvytvorit
    > jako symlink nekam k sobe a data si pak precist

    Testovani existence/neexistence souboru samo o sobe smrdi race condition, pokud se neudela spravne.

    Tzn naivni reseni, ktere lze jeste dnes najit skutecne v leckterych programech (a ktere nefunguje), je (v pseudokodu):

    stat(filename, &st);
    if (!S_ISREG(st.st_mode)) return(-1);
    fd = open(filename, ...)

    mezi radky 2 a 3 je na prvni pohled viditelna race condition - pokud utocnik trefi chvili, kdy probehl test ze soubor neni symlink (radka 2), ale jeste se soubor neotevrel (neprobehla radka 3) a vytvori v tu chvili symlink, ma vyhrano.

    Jedno ze spravnych reseni je soubor nejdrive pomoci open() otevrit a pak teprve na od jadra pridelenem deskriptoru provadet fstat() - je zaruceno, ze jakmile programu kernel jednou deskriptor priradi, "to pod nim" se uz zmenit nemuze (tzn. nikdo nam nevymeni soubor za symlink, apod.).