copyin()

Milos Urbanek urbanek at openbsd.cz
Tue May 18 12:17:41 CEST 2004


On Tue, May 18, 2004 at 11:53:33AM +0200, Tomas Pluskal wrote:

a zdrojak toho modulu vypada jak?

Milos

> 
> ahoj,
> 
> mel bych opet takovy dotazek na kernel. Mam nejaky proces, dejme tomu
> bash, PID 797.
> 
> [root at eddie 797]# cat /proc/797/map
> 0x8048000 0x8104000 147 0 0xc476c294 r-x 22 11 0x0 COW NC vnode /usr/local/bin/bash
> 0x8104000 0x810a000 6 0 0xc4c32840 rw- 1 0 0x2180 COW NNC vnode /usr/local/bin/bash
> 0x810a000 0x811b000 8 0 0xc4ce37bc rw- 1 0 0x2180 COW NNC default -
> 0x811b000 0x812e000 19 0 0xc4befbdc rwx 1 0 0x2180 COW NNC default -
> 0x812e000 0x8146000 24 0 0xc51b16b4 rwx 1 0 0x2180 COW NNC default -
> 0x28104000 0x28105000 1 0 0xc4a984a4 rwx 1 0 0x2180 COW NNC default -
> 0xbfbe0000 0xbfc00000 5 0 0xc4ddedec rwx 1 0 0x2180 COW NNC default -
> 
> 
> Pokud v kernelovem modulu prochazim tyhle bloky pameti a snazim se je
> nacist pomoci copyin(), pripadne i jediny bajt pomoci fubyte(), tak to
> vzdycky na nekterem bloku nejde (copyin vrati EFAULT, fubyte vrati -1).
> Podivne ale je, ze treba jednou nejde nacist 0x811b000, ale o vterinu
> pozdeji uz nacist jde a nejde treba 0x28104000.
> 
> Koukal jsem se do /sys/i386/i386/support.s, kde jsou funkce copyin() a
> fubyte(), a vycetl jsem z toho, ze zhavarovat by melo jen pokud
> - adresa je vetsi nez VM_MAXUSER_ADDRESS(coz nehrozi)
> - dojde k preteceni (coz nehrozi)
> - dojde k zavolani PCB_ONFAULT, tak jak je nastaveno zde:
> 	movl $copyin_fault,PCB_ONFAULT(%eax)
> 
> Neni mi ale jasne, co presne PCB_ONFAULT znamena. Mohl by mi to nekdo
> prosim nastinit? Pripadne mate nekdo nejake vysvetleni, proc nekdy ta
> pamet nejde zkopirovat?
> 
> predem diky,
> 
> Tomas Pluskal
> -- 
> FreeBSD mailing list (users-l at freebsd.cz)
> http://www.freebsd.cz/listserv/listinfo/users-l
> 



More information about the Users-l mailing list