[pso] [Tema1] Bug test last_child?

Alexandru-Mihai Carp carpalex at gmail.com
Fri Mar 28 20:21:11 EET 2008


Salut,

Confruntandu-ma cu problema pe care am descris-o intr-un mail anterior, 
am impresia ca testul last_child nu testeaza ceea ce ar trebui (sau ceea 
ce cred eu ca ar trebui).

Ce cred eu ca trebuie sa faca:
- do_as_guest("./test start %d -1 %d", syscall, 0); face fork, iar 
copilul porneste monitorizarea pentru un syscall, pe propriul pid.
- copilul se termina, apoi in parinte se face: do_stop(syscall, 
last_child, -EINVAL);
- ar trebui sa returneze -EINVAL pentru ca monitorizarea a fost deja 
oprita cand s-a terminat copilul (conform cerintei).

De ce zic eu ca nu merge (nu testeaza asta):
- parintele face fork si, intr-adevar, isi salveaza in last_child pid-ul 
copilului
- copilul face exec, cu ceva de genul execvp("/bin/bash", "su nobody -c 
bash -c ./test 5 -1 0");
- asta inseamna ca imaginea procesului copil se inlocuieste cu imaginea 
lui su!
- su face fork
- su face exec cu "bash"
- bash face fork
- bash face exec cu "test"
- noul "test" isi va porni monitorizarea pe propriul pid, dar acesta 
este diferit de last_child salvat in parinte! (last_child este de fapt 
pid-ul lui "su")
- pana la urma, cand se incearca oprirea monitorizarii, se va returna 
oricum -EINVAL, deoarece se incearca oprirea monitorizarii pt pid-ul lui 
"su", care nu si-a pornit niciodata monitorizarea!

Cu alte cuvinte, testul nu testeaza daca s-a oprit monitorizarea asupra 
copilului "test" cand acesta a iesit, ci daca s-a oprit monitorizarea 
asupra lui "su", care nu a fost pornita niciodata.

Alex Carp


More information about the pso mailing list