[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