copyin()

Tomas Pluskal plusik at pohoda.cz
Tue May 18 11:53:33 CEST 2004


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



More information about the Users-l mailing list