changeset 14027:ceba83929df4

3771 kmdb hangs when reading an invalid address Reviewed by: Eric Schrock <eric.schrock@delphix.com> Reviewed by: Jeff Biseda <jbiseda@delphix.com> Reviewed by: Christopher Siden <christopher.siden@delphix.com> Reviewed by: Albert Lee <trisk@nexenta.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Approved by: Garrett D'Amore <garrett@damore.org>
author Jeremy Jones <jeremy@delphix.com>
date Fri, 17 May 2013 11:06:02 -0800
parents 2031dcee618b
children bcbb822da4dd
files usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c
diffstat 1 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c	Wed May 08 16:39:56 2013 -0400
+++ b/usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c	Fri May 17 11:06:02 2013 -0800
@@ -20,6 +20,7 @@
  */
 /*
  * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013 by Delphix. All rights reserved.
  */
 
 #include <kmdb/kmdb_kvm.h>
@@ -137,7 +138,12 @@
 kmt_rw(mdb_tgt_t *t, void *buf, size_t nbytes, uint64_t addr,
     ssize_t (*rw)(void *, size_t, uint64_t))
 {
-	size_t n, ndone, chunksz;
+	/*
+	 * chunksz needs to be volatile because of the use of setjmp() in this
+	 * function.
+	 */
+	volatile size_t chunksz;
+	size_t n, ndone;
 	jmp_buf *oldpcb = NULL;
 	jmp_buf pcb;
 	ssize_t res;