Date: Mon, 26 Jun 1995 22:50:06 +0800 (WST) From: Peter Wemm <peter@haywire.DIALix.COM> To: current@freebsd.org Subject: bug in Linux^H^H^H^H^HDoom Emulator Message-ID: <Pine.SV4.3.91.950626224220.12512A-100000@haywire.DIALix.COM>
next in thread | raw e-mail | index | archive | help
Thanks for committing it Soren (?? is that how you write it in 7-bit ascii?). If you compile a kernel with options DIAGNOSTIC, it running doom will cause a panic inside ufs_access - the vnode in the VOP_ACCESS call in linux_misc.c is not locked at this point. I've had a look, and based on what I saw in kern_exec.c, I suggest that the following patch *might* be in order... I dont know if it's correct and have not yet compiled a kernel to test it, so caveat emptor! kern_exec.c approximately does this: NDINIT(... FOLLOW | LOCKLEAF ...) namei(&nd). vp = nd..... [...] err = VOP_ACCESS(vp) err = VOP_OPEN(vp) VOP_UNLOCK(vp) err = vm_mmap(vp...) I added LOCKLEAF and a VOP_UNLOCK() to i386/linux/linux_misc.c - I'd appreciate knowing if it looks right or if it's going to cause the file system to get eaten.. :-) Cheers, -Peter (PS: Thanks for comitting it Soren! :-) *** linux_misc.c.dist Mon Jun 26 01:32:37 1995 --- linux_misc.c Mon Jun 26 22:38:41 1995 *************** *** 188,194 **** printf("Linux-emul(%d): uselib(%s)\n", p->p_pid, path); #endif ! NDINIT(&ni, LOOKUP, FOLLOW, UIO_SYSSPACE, path, p); if (error = namei(&ni)) return error; --- 188,194 ---- printf("Linux-emul(%d): uselib(%s)\n", p->p_pid, path); #endif ! NDINIT(&ni, LOOKUP, FOLLOW | LOCKLEAF, UIO_SYSSPACE, path, p); if (error = namei(&ni)) return error; *************** *** 215,220 **** --- 215,222 ---- if (error = VOP_OPEN(vnodep, FREAD, p->p_ucred, p)) return error; + + VOP_UNLOCK(vnodep); /* lock no longer needed */ error = vm_mmap(kernel_map, (vm_offset_t *)&a_out, 1024, VM_PROT_READ, VM_PROT_READ, 0, (caddr_t)vnodep, 0);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.SV4.3.91.950626224220.12512A-100000>