[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