Deleted Added
full compact
subr_syscall.c (2578) subr_syscall.c (2660)
1/*-
2 * Copyright (C) 1994, David Greenman
3 * Copyright (c) 1990, 1993
4 * The Regents of the University of California. All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * the University of Utah, and William Jolitz.
8 *

--- 21 unchanged lines hidden (view full) ---

30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 * SUCH DAMAGE.
36 *
37 * from: @(#)trap.c 7.4 (Berkeley) 5/13/91
1/*-
2 * Copyright (C) 1994, David Greenman
3 * Copyright (c) 1990, 1993
4 * The Regents of the University of California. All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * the University of Utah, and William Jolitz.
8 *

--- 21 unchanged lines hidden (view full) ---

30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 * SUCH DAMAGE.
36 *
37 * from: @(#)trap.c 7.4 (Berkeley) 5/13/91
38 * $Id: trap.c,v 1.32 1994/08/28 16:16:33 bde Exp $
38 * $Id: trap.c,v 1.33 1994/09/08 11:48:52 bde Exp $
39 */
40
41/*
42 * 386 Trap and System call handling
43 */
44
45#include <sys/param.h>
46#include <sys/systm.h>

--- 285 unchanged lines hidden (view full) ---

332}
333
334int
335trap_pfault(frame, usermode)
336 struct trapframe *frame;
337 int usermode;
338{
339 vm_offset_t va;
39 */
40
41/*
42 * 386 Trap and System call handling
43 */
44
45#include <sys/param.h>
46#include <sys/systm.h>

--- 285 unchanged lines hidden (view full) ---

332}
333
334int
335trap_pfault(frame, usermode)
336 struct trapframe *frame;
337 int usermode;
338{
339 vm_offset_t va;
340 struct vmspace *vm;
340 struct vmspace *vm = NULL;
341 vm_map_t map = 0;
342 int rv = 0, oldflags;
343 vm_prot_t ftype;
344 extern vm_map_t kernel_map;
345 int eva;
346 struct proc *p = curproc;
347
348 eva = rcr2();
349 va = trunc_page((vm_offset_t)eva);
350
341 vm_map_t map = 0;
342 int rv = 0, oldflags;
343 vm_prot_t ftype;
344 extern vm_map_t kernel_map;
345 int eva;
346 struct proc *p = curproc;
347
348 eva = rcr2();
349 va = trunc_page((vm_offset_t)eva);
350
351 /*
352 * Don't allow user-mode faults in kernel address space
353 */
354 if (usermode && (va >= KERNBASE)) {
355 goto nogo;
356 }
351 if (va >= KERNBASE) {
352 /*
353 * Don't allow user-mode faults in kernel address space.
354 */
355 if (usermode)
356 goto nogo;
357
357
358 if ((p == 0) || (va >= KERNBASE)) {
359 vm = 0;
360 map = kernel_map;
361 } else {
358 map = kernel_map;
359 } else {
362 vm = p->p_vmspace;
360 /*
361 * This is a fault on non-kernel virtual memory.
362 * vm is initialized above to NULL. If curproc is NULL
363 * or curproc->p_vmspace is NULL the fault is fatal.
364 */
365 if (p != NULL)
366 vm = p->p_vmspace;
367
368 if (vm == NULL)
369 goto nogo;
370
363 map = &vm->vm_map;
364 }
365
366 if (frame->tf_err & PGEX_W)
367 ftype = VM_PROT_READ | VM_PROT_WRITE;
368 else
369 ftype = VM_PROT_READ;
370

--- 57 unchanged lines hidden (view full) ---

428 */
429 rv = vm_fault(map, va, ftype, FALSE);
430 }
431
432 if (rv == KERN_SUCCESS)
433 return (0);
434nogo:
435 if (!usermode) {
371 map = &vm->vm_map;
372 }
373
374 if (frame->tf_err & PGEX_W)
375 ftype = VM_PROT_READ | VM_PROT_WRITE;
376 else
377 ftype = VM_PROT_READ;
378

--- 57 unchanged lines hidden (view full) ---

436 */
437 rv = vm_fault(map, va, ftype, FALSE);
438 }
439
440 if (rv == KERN_SUCCESS)
441 return (0);
442nogo:
443 if (!usermode) {
436 if (curpcb->pcb_onfault) {
444 if (curpcb && curpcb->pcb_onfault) {
437 frame->tf_eip = (int)curpcb->pcb_onfault;
438 return (0);
439 }
440 trap_fatal(frame);
441 }
442
443 /* kludge to pass faulting virtual address to sendsig */
444 frame->tf_err = eva;

--- 243 unchanged lines hidden ---
445 frame->tf_eip = (int)curpcb->pcb_onfault;
446 return (0);
447 }
448 trap_fatal(frame);
449 }
450
451 /* kludge to pass faulting virtual address to sendsig */
452 frame->tf_err = eva;

--- 243 unchanged lines hidden ---