copyin()

Milos Urbanek urbanek at openbsd.cz
Wed May 19 13:58:19 CEST 2004


On Tue, May 18, 2004 at 03:25:35PM +0200, Tomas Pluskal wrote:
> 
> dal jsem dohromady maly pokusny modul, ktery to trochu demonstruje (prosim
> nekoukat na kod, je to poslepovane narychlo z ruznych zdrojaku). povesil
> jsem to na http://plusik.pohoda.cz/pokus.tgz
> 
> je to udelane tak, ze kazdou vterinu se zavola funkce perform_pokus, ktera
> se pokusi precist pamet prislusneho procesu (okopirovano z funkce pro
> coredump)
> 
> po nahrani modulu staci do sysctl kern.pokuspid dat pid nejakeho procesu,
> a na konzoli to pak vypise napr. (v mem pripade):
> 
> copying process 359 [sh]
> copyin 0x8061000 err 0
> copyin 0x8064000 err 14
> copyin 0x2807f000 err 0
> copyin 0x28080000 err 0
> copyin 0x28084000 err 14
> copyin 0x280a9000 err 0
> copyin 0x280c3000 err 0
> copyin 0x2818a000 err 14
> copyin 0x2818f000 err 14
> copyin 0x281d8000 err 14
> copyin 0x281e0000 err 14
> copyin 0xbfbe0000 err 14
>

EFAULT je chyba, ktera se ti vrati, pokud pristupujes do pameti, ktera
neni v danem okamziku namapovana do tveho adresoveho prostoru (AS).

v pripade tveho modulu pouzivas callout pro periodicke spusteni urcite rutiny,
v kernelu >=5.0 je mechanismus callout obsluhovan specialnim threadem,
tento thread bezi v kontextu procesu 0 (swapper), je to vlastne AS jadra.

v okamziku, kdy se pokousis pristupovat na nekterou z virtualnich adres,
pochazejicich z AS jineho procesu, tak ve tvem AS neni dana pamet namapovana.

na otazku proc nektere copyin vrati 0 a nektere zase 14 neznam odpoved.

spravne reseni pri cteni pameti uzivatelskeho procesu jadrem je namapovat
pamet uzivatelskeho procesu do AS jadra pomoci odpovidajicich vm_ rutin.

v pripade coredumpu kod funguje, protoze v okamziku coredumpu bezi system
v kontextu procesu, ktery dumpuje sve core, a tudiz vse (TLB, page table,
CR3 registr, a dalsi nastaveni) odpovida tomuto kontextu.

Milos

> tedy nektere bloky precist sly a nektere hodily EFAULT, ale proc? pokud
> proces spadne, a vytvari se jeho coredump, tak se snad tohle nestava, ne?
> 
> 
> Tomas
> 
> 
> On Tue, 18 May 2004, Milos Urbanek wrote:
> 
> > a zdrojak toho modulu vypada jak?
> >
> > Milos
> >
> -- 
> FreeBSD mailing list (users-l at freebsd.cz)
> http://www.freebsd.cz/listserv/listinfo/users-l
> 



More information about the Users-l mailing list