[pso] tema1 linux

Octavian Purdila pso@cursuri.cs.pub.ro
Sat, 19 Mar 2005 01:31:44 +0200


On Friday 18 March 2005 10:13 pm, George Adrian Drumea wrote:

> Teoretic: as wrapa deci fiecare syscall interceptat intr-un
> try_module_get {...} try_module_put. Exista race-ul urmator?

Mai corect ar fi sa faci un try_module_get la pornirea interceptarii unui apel 
de sistem, si module_put la oprirea interceptarii. Oricum nici solutia asta 
nu e corecta pentru ca oricum apelul de sistem 0 trebuie sa fie interceptat 
by defaut, si se ajunge in situatia descrisa de tine.

>  - un proces apeleaza sycall 0 sau un syscall interceptat
>  - din entry.S se apeleaza funtia interceptata in modul, dar functia
>  din modul nu apuca sa apeleze try_module_get (e intrerupta)
>  - tocmai atunci userul executa rmmod, ref countul e ok, deci modulul este
>  scos
>  - primul proces se trezeste executand o functie care nu mai exista in
>  memorie (aici nu stiu exact, fault la primul fetch de instructiune?)
>
> E posibil ce am scris mai sus?
>

Da, este posibil. Problema observata de tine este una generala: un modul nu 
poate gestiona reference cont-ul din interior fara sa apara race-uri. De 
altfel asta e si motivul pentru care s-au scos in 2.6 MOD_INC_USE_COUNT si 
MOD_DEC_USE_COUNT (in 2.4 erau obsolete, in 2.2 functionale).

tavi