projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
This commit was manufactured by cvs2svn to create tag 'FreeBSD-release/1.1'.
[unix-history]
/
sys
/
kern
/
sys_process.c
diff --git
a/sys/kern/sys_process.c
b/sys/kern/sys_process.c
index
2a328de
..
ce39424
100644
(file)
--- a/
sys/kern/sys_process.c
+++ b/
sys/kern/sys_process.c
@@
-31,7
+31,7
@@
* SUCH DAMAGE.
*
* from: @(#)sys_process.c 7.22 (Berkeley) 5/11/91
* SUCH DAMAGE.
*
* from: @(#)sys_process.c 7.22 (Berkeley) 5/11/91
- * $Id: sys_process.c,v 1.
8 1993/12/02 02:48:15 davidg
Exp $
+ * $Id: sys_process.c,v 1.
9.2.1 1994/03/07 01:45:36 rgrimes
Exp $
*/
#include "param.h"
*/
#include "param.h"
@@
-180,13
+180,24
@@
pwrite (struct proc *procp, unsigned int addr, unsigned int datum) {
vm_map_lookup_done (tmap, out_entry);
vm_map_lookup_done (tmap, out_entry);
+ /*
+ * Fault the page-table-page in...
+ */
+ vm_map_pageable(map, trunc_page(vtopte(pageno)),
+ trunc_page(vtopte(pageno)) + NBPG, FALSE);
/*
* Fault the page in...
*/
rv = vm_fault (map, pageno, VM_PROT_WRITE, FALSE);
/*
* Fault the page in...
*/
rv = vm_fault (map, pageno, VM_PROT_WRITE, FALSE);
- if (rv != KERN_SUCCESS)
+ if (rv != KERN_SUCCESS) {
+ /*
+ * release the page table page
+ */
+ vm_map_pageable(map, trunc_page(vtopte(pageno)),
+ trunc_page(vtopte(pageno)) + NBPG, TRUE);
return EFAULT;
return EFAULT;
+ }
/*
* The page may need to be faulted in again, it seems.
/*
* The page may need to be faulted in again, it seems.
@@
-203,7
+214,7
@@
pwrite (struct proc *procp, unsigned int addr, unsigned int datum) {
if (!rv) {
vm_object_reference (object);
if (!rv) {
vm_object_reference (object);
- rv = vm_map_pageable (kernel_map, kva, kva + PAGE_SIZE,
0
);
+ rv = vm_map_pageable (kernel_map, kva, kva + PAGE_SIZE,
FALSE
);
if (!rv) {
bcopy (&datum, (caddr_t)(kva + page_offset), sizeof datum);
}
if (!rv) {
bcopy (&datum, (caddr_t)(kva + page_offset), sizeof datum);
}
@@
-213,6
+224,13
@@
pwrite (struct proc *procp, unsigned int addr, unsigned int datum) {
if (fix_prot)
vm_map_protect (map, pageno, pageno + PAGE_SIZE,
VM_PROT_READ|VM_PROT_EXECUTE, 0);
if (fix_prot)
vm_map_protect (map, pageno, pageno + PAGE_SIZE,
VM_PROT_READ|VM_PROT_EXECUTE, 0);
+
+ /*
+ * release the page table page
+ */
+ vm_map_pageable(map, trunc_page(vtopte(pageno)),
+ trunc_page(vtopte(pageno)) + NBPG, TRUE);
+
return rv;
}
return rv;
}
@@
-427,9
+445,13
@@
profil(p, uap, retval)
*
* so we've gotta check to make sure that the info set up for
* addupc is set right... it's gotta be writable by the user...
*
* so we've gotta check to make sure that the info set up for
* addupc is set right... it's gotta be writable by the user...
+ *
+ * Add a little extra sanity checking so that end profil requests
+ * don't generate spurious faults. -jkh
*/
*/
- if (useracc((caddr_t)uap->bufbase, uap->bufsize * sizeof(short),
+ if (uap->bufbase && uap->bufsize &&
+ useracc((caddr_t)uap->bufbase, uap->bufsize * sizeof(short),
B_WRITE) == 0)
return EFAULT;
B_WRITE) == 0)
return EFAULT;