copyin()
Tomas Pluskal
plusik at pohoda.cz
Tue May 18 12:47:33 CEST 2004
On Tue, 18 May 2004, Milos Urbanek wrote:
> On Tue, May 18, 2004 at 11:53:33AM +0200, Tomas Pluskal wrote:
>
> a zdrojak toho modulu vypada jak?
cele to sem posilat nebudu, je to prilis dlouhe a dela to spoustu veci
ktere s timhle nesouvisi. Nicmene ten kod na kterem to zkousim je
okopirovany z /sys/kern/imgact_elf.c, funkce
__elfN(coredump)(td, vp, limit)
Udelal jsem si presnou kopii te funkci, jen jsem tam pridal debug vypisy.
Pokud ji ale zavolam, tak to v tomhle cyklu:
for (i = 0; i < seginfo.count; i++) {
error = fubyte((void*) php->p_vaddr);
printf("%p %d\n", (void*) php->p_vaddr, error);
error = vn_rdwr_inchunks(UIO_WRITE, vp,
(caddr_t)(uintptr_t)php->p_vaddr,
php->p_filesz, offset, UIO_USERSPACE,
IO_UNIT | IO_DIRECT, cred, NOCRED, (int *)NULL,
curthread); /* XXXKSE */
if (error != 0)
break;
offset += php->p_filesz;
php++;
}
vrati EFAULT, protoze vn_rdwr_inchunks vrati EFAULT, protoze copyin VRATI
EFAULT. ten fubyte jsem tam pridal ja, a podle toho jsem zjistil, ze to
zhavaruje pokazde na jine adrese, ackoli jindy ta adresa precist jde.
pokud tomu dobre rozumim, tak normalne se ta funkce vola v kontextu
dumpovaneho threadu, tj. parametr td==curthread, to v mem pripade neplati.
ale neni mi jasne jaky to muze mit vliv.
T.P.
More information about the Users-l
mailing list