[so2] [Linux][Tema1] Sincronizare interceptor

Mihail Costea mihail.costea90 at gmail.com
Tue Mar 12 21:52:22 EET 2013


2013/3/12 Liviu Chircu <liviu.chircu at gmail.com>:
> On 03/12/2013 09:36 PM, Alexandru Juncu wrote:
>>
>> 2013/3/12 Mihail Costea <mihail.costea90 at gmail.com>:
>>>
>>> 2013/3/12 Alexandru Juncu <alexj at rosedu.org>:
>>>>
>>>> 2013/3/12 Mihail Costea <mihail.costea90 at gmail.com>:
>>>>>
>>>>> Fie urmatorul caz de utilizare:
>>>>>
>>>>> Un syscall este interceptat de catre modulul nostru.
>>>>>
>>>>> La un moment dat o functie apeleaza acest syscall, dar fix inainte de
>>>>> a obtine pointer-ul la functia syscall-ului original primim
>>>>> deinterceptarea
>>>>> acestui syscall.
>>>>> Cum tratam acest caz? Pur si simplu rulam sycall-ul original in
>>>>> continuare sau returnam o eroare?
>>>>>
>>>> Cred că ar trebui să ai un lock pe tabelă în momentul acela.  Adică
>>>> cât faci operațiuni de modificare a unui apel de sistem ar trebui să
>>>> te asiguri că nu sunt folosite informatiile ce se modifică.
>>>> _______________________________________________
>>>> http://ocw.cs.pub.ro/courses/so2/resurse/lista-discutii
>>>
>>> Am asta, ma gandeam ce ar fi sa se intample daca interceptorul e
>>> preemptat inainte de a obtine lock-ul (adica intra in functie dar nu
>>> ia lock-ul) si in locul lui vine apelul de deinterceptare si astfel se
>>> elimina anumite date despre apelul de sistem care ar trebui pentru
>>> rularea in interceptor.
>>
>> Prin interceptor te referi la funcția hander pentru un apel
>> interceptat care înlocuiește handerul original și care apelează la
>> rândul ei handlerul original, da? (just to be on the same page)
>>
>> OK, să zicem că avem cazul tău. Intră în funcție dar încă nu ia
>> lock-ul pentru lista de pid-uri interceptate. Între timp vine cererea
>> de deinterceptare și pid-ul/apelul este scos din listă. Revine înapoi
>> rândul funcției interceptor care continuă rularea. Interceptorul ia
>> lock-ul și parcurge lista (sigur altcineva nu va modifica lista pentru
>> că e locked). Caută pid în listă și nu îl va găsi, prin urmare va ieși
>> fără să mai facă nimic. Iese din functie după ce a cedat lock-ul și
>> viața merge mai departe :P Da, am făcut o căutare inutilă, dar nu s-a
>> blocat nimic.
>> _______________________________________________
>> http://ocw.cs.pub.ro/courses/so2/resurse/lista-discutii
>
> Bine, o să facă totuși o chestie minoră... va apela mai departe "the real"
> syscall.
> _______________________________________________
> http://ocw.cs.pub.ro/courses/so2/resurse/lista-discutii

La cazul mentionat de Liviu ma refeream si eu in mare. Pentru a evita
asta am ales sa tin pointer catre functia reala tot timpul, chiar daca
deinterceptez apelul. Altfel nu vad cum as putea face.

-- 
Mihail Costea


More information about the so2 mailing list