[pso] [Tema 1] Race acceptabil?
Vladimir-Andrei Olteanu
kooliva at gmail.com
Mon Mar 29 15:11:38 EEST 2010
On 3/29/2010 12:06 PM, Octavian Voicu wrote:
> 2010/3/29 Vladimir-Andrei Olteanu<kooliva at gmail.com>:
>
>> Salut!
>>
>> E acceptabil urmatorul scenariu?
>>
>> T1: interceptare apel de sistem monitorizat (neterminata)
>> T2: cerere de oprire a monitorizarii (terminata)
>> T3: aparitia mesajului
>>
>> Apelarea functiei originale intr-o zona protejata cu un spinlock poate cauza
>> probleme. (De ex: pe Linux poate ca face sleep; pe Windows se schimba
>> IRQL-ul si primul acces la memoria din userspace = BSOD).
>>
> Nu ai nevoie sa apelezi functia din spinlock (si da, ar fi gresit sa
> faci asta). In mod normal ai un backup al tabelei de syscall-uri (pe
> windows e clonata, pe linux poti face backup la inserarea modulului).
> Daca faci backup al handler-ului vechi abia in momentul interceptarii
> (si la deinterceptare il setezi pe null), poti folosi abordarea lui
> Alex cu salvarea pointerului la syscall in zona critica.
>
>
>> Tester-ul de pe Windows asteapta aparitia mesajelor intr-o bucla infinita
>> (deci nu pot aparea probleme). Cel de pe Linux apeleaza dmesg doar odata si
>> declara testul picat daca nu gaseste ceea ce cauta (dar asta nu mi s-a
>> intamplat inca).
>>
> Nu se poate intampla asta. Testerul apeleaza dmesg abia dupa ce s-a
> revenit din syscall, deci in acel moment interceptorul tau trebuia sa
> fi logat deja mesajul.
>
> Octavian
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>
>
Mersi! Mesajul tau mi-a raspuns indirect la intrebare (pe care cred ca
am formulat-o prea vag). Nu era vorba de protejarea structurilor de
date, ci de apelarea si terminarea cu cod de eroare 0 (STATUS_SUCCESS)
a unui apel MY_SYSCALL(REQUEST_STOP_MONITOR, APEL_X, PID) dupa
inceperea interceptarii apelului APEL_X, dar inainte de logare. In
esenta, intrebam daca MY_SYSCALL(REQUEST_STOP_MONITOR) trebuie sa
astepte terminarea handler-ului nou (in caz ca apelul era monitorizat)
inainte de a intoarce 0.
More information about the pso
mailing list