summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorahl <none@none>2005-07-08 07:54:02 -0700
committerahl <none@none>2005-07-08 07:54:02 -0700
commit40c00cd7c8e55ec14d49b13d636ebecb232852fc (patch)
tree77cf1407f37b6c2db84f7dbf20b92ae484405fa1
parentcf839854c6f4252cbdfd0c4c84cb177a825fc8ad (diff)
downloadillumos-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.c24
-rw-r--r--usr/src/uts/i86pc/os/instr_size.c4
-rw-r--r--usr/src/uts/intel/ia32/ml/copy.s51
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 */