diff options
author | dillon <dillon@FreeBSD.org> | 1999-09-20 19:08:48 +0000 |
---|---|---|
committer | dillon <dillon@FreeBSD.org> | 1999-09-20 19:08:48 +0000 |
commit | e8761b4e052785153d92b664a5dbe32e4a1de18e (patch) | |
tree | dcac6780728b4221aa67e14342e5541829c1b0c5 /sys/powerpc | |
parent | 93e77b056762475c3c25ed8a6e2f428c8969b448 (diff) | |
download | FreeBSD-src-e8761b4e052785153d92b664a5dbe32e4a1de18e.zip FreeBSD-src-e8761b4e052785153d92b664a5dbe32e4a1de18e.tar.gz |
Fix bug in pipe code relating to writes of mmap'd but illegal address
spaces which cross a segment boundry in the page table. pmap_kextract()
is not designed for access to the user space portion of the page
table and cannot handle the null-page-directory-entry case.
The fix is to have vm_fault_quick() return a success or failure which
is then used to avoid calling pmap_kextract().
Diffstat (limited to 'sys/powerpc')
-rw-r--r-- | sys/powerpc/aim/vm_machdep.c | 8 | ||||
-rw-r--r-- | sys/powerpc/powerpc/vm_machdep.c | 8 |
2 files changed, 10 insertions, 6 deletions
diff --git a/sys/powerpc/aim/vm_machdep.c b/sys/powerpc/aim/vm_machdep.c index 2f0dabb..a77458c 100644 --- a/sys/powerpc/aim/vm_machdep.c +++ b/sys/powerpc/aim/vm_machdep.c @@ -97,15 +97,17 @@ /* * quick version of vm_fault */ -void +int vm_fault_quick(v, prot) caddr_t v; int prot; { + int r; if (prot & VM_PROT_WRITE) - subyte(v, fubyte(v)); + r = subyte(v, fubyte(v)); else - fubyte(v); + r = fubyte(v); + return(r); } /* diff --git a/sys/powerpc/powerpc/vm_machdep.c b/sys/powerpc/powerpc/vm_machdep.c index 2f0dabb..a77458c 100644 --- a/sys/powerpc/powerpc/vm_machdep.c +++ b/sys/powerpc/powerpc/vm_machdep.c @@ -97,15 +97,17 @@ /* * quick version of vm_fault */ -void +int vm_fault_quick(v, prot) caddr_t v; int prot; { + int r; if (prot & VM_PROT_WRITE) - subyte(v, fubyte(v)); + r = subyte(v, fubyte(v)); else - fubyte(v); + r = fubyte(v); + return(r); } /* |