diff options
| author | ahl <none@none> | 2005-07-08 07:54:02 -0700 |
|---|---|---|
| committer | ahl <none@none> | 2005-07-08 07:54:02 -0700 |
| commit | 40c00cd7c8e55ec14d49b13d636ebecb232852fc (patch) | |
| tree | 77cf1407f37b6c2db84f7dbf20b92ae484405fa1 | |
| parent | cf839854c6f4252cbdfd0c4c84cb177a825fc8ad (diff) | |
| download | illumos-joyent-40c00cd7c8e55ec14d49b13d636ebecb232852fc.tar.gz | |
6289672 gcore(1) will produce zero-sized LDT notes
6293270 mm driver needs to be more robust
6293493 incorrect procfs watchpoint action on amd64 kernel.
| -rw-r--r-- | usr/src/lib/libproc/common/Pgcore.c | 24 | ||||
| -rw-r--r-- | usr/src/uts/i86pc/os/instr_size.c | 4 | ||||
| -rw-r--r-- | usr/src/uts/intel/ia32/ml/copy.s | 51 |
3 files changed, 32 insertions, 47 deletions
diff --git a/usr/src/lib/libproc/common/Pgcore.c b/usr/src/lib/libproc/common/Pgcore.c index 9147bcb201..aa374a71af 100644 --- a/usr/src/lib/libproc/common/Pgcore.c +++ b/usr/src/lib/libproc/common/Pgcore.c @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -1308,18 +1308,22 @@ Pfgcore(struct ps_prochandle *P, int fd, core_content_t content) size_t size; int nldt; - nldt = Pldt(P, NULL, 0); - size = sizeof (struct ssd) * nldt; - if ((ldtp = malloc(size)) == NULL) - goto err; + /* + * Only dump out non-zero sized LDT notes. + */ + if ((nldt = Pldt(P, NULL, 0)) != 0) { + size = sizeof (struct ssd) * nldt; + if ((ldtp = malloc(size)) == NULL) + goto err; + + if (Pldt(P, ldtp, nldt) == -1 || + write_note(fd, NT_LDT, ldtp, size, &doff) != 0) { + free(ldtp); + goto err; + } - if (Pldt(P, ldtp, nldt) == -1 || - write_note(fd, NT_LDT, ldtp, size, &doff) != 0) { free(ldtp); - goto err; } - - free(ldtp); } #endif /* __i386 || __amd64 */ diff --git a/usr/src/uts/i86pc/os/instr_size.c b/usr/src/uts/i86pc/os/instr_size.c index ad09efe1c2..97423b4734 100644 --- a/usr/src/uts/i86pc/os/instr_size.c +++ b/usr/src/uts/i86pc/os/instr_size.c @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -135,5 +135,5 @@ instr_size(struct regs *rp, caddr_t *addrp, enum seg_rw rw) return (dtrace_dis_isize(instr, rw == S_EXEC ? DIS_ISIZE_INSTR : DIS_ISIZE_OPERAND, - DATAMODEL_NATIVE, NULL)); + curproc->p_model, NULL)); } diff --git a/usr/src/uts/intel/ia32/ml/copy.s b/usr/src/uts/intel/ia32/ml/copy.s index ea6cb4c168..654da20ae4 100644 --- a/usr/src/uts/intel/ia32/ml/copy.s +++ b/usr/src/uts/intel/ia32/ml/copy.s @@ -2061,27 +2061,22 @@ ucopy(const void *ufrom, void *uto, size_t ulength) SET_SIZE(copyout_noerr) ENTRY(uzero) -#ifdef DEBUG - cmpq kernelbase(%rip), %rdi /* addr < kernelbase */ - jb 1f - leaq .uzero_panic_msg(%rip), %rdi - jmp call_panic /* setup stack and call panic */ -1: -#endif + movq kernelbase(%rip), %rax + cmpq %rax, %rdi + jb do_zero + movq %rax, %rdi /* force fault at kernelbase */ jmp do_zero SET_SIZE(uzero) ENTRY(ucopy) -#ifdef DEBUG movq kernelbase(%rip), %rax - cmpq %rax, %rdi /* %rdi = ufrom */ - jae 0f - cmpq %rax, %rsi /* %rsi = uto */ + cmpq %rax, %rdi jb 1f -0: leaq .ucopy_panic_msg(%rip), %rdi - jmp call_panic /* setup stack and call panic */ + movq %rax, %rdi 1: -#endif + cmpq %rax, %rsi + jb do_copy + movq %rax, %rsi jmp do_copy SET_SIZE(ucopy) @@ -2118,32 +2113,22 @@ ucopy(const void *ufrom, void *uto, size_t ulength) SET_SIZE(copyout_noerr) ENTRY(uzero) -#ifdef DEBUG movl kernelbase, %eax cmpl %eax, 4(%esp) - jb 1f - pushl %ebp - movl %esp, %ebp - pushl $.uzero_panic_msg - call panic -1: -#endif + jb do_zero + movl %eax, 4(%esp) /* force fault at kernelbase */ jmp do_zero SET_SIZE(uzero) ENTRY(ucopy) -#ifdef DEBUG movl kernelbase, %eax - cmpl %eax, 4(%esp) - jae 0f - cmpl %eax, 8(%esp) + cmpl %eax, 4(%esp) jb 1f -0: pushl %ebp - movl %esp, %ebp - pushl $.ucopy_panic_msg - call panic + movl %eax, 4(%esp) /* force fault at kernelbase */ 1: -#endif + cmpl %eax, 8(%esp) + jb do_copy + movl %eax, 8(%esp) /* force fault at kernelbase */ jmp do_copy SET_SIZE(ucopy) @@ -2177,10 +2162,6 @@ ucopy(const void *ufrom, void *uto, size_t ulength) .string "copyin_noerr: argument not in kernel address space" .cpyout_ne_pmsg: .string "copyout_noerr: argument not in kernel address space" -.uzero_panic_msg: - .string "uzero: argument is not in user space" -.ucopy_panic_msg: - .string "ucopy: argument is not in user space" #endif #endif /* __lint */ |
