Module Name:    src
Committed By:   skrll
Date:           Mon Jan 16 09:01:35 UTC 2012

Modified Files:
        src/sys/arch/hppa/hppa: db_disasm.c

Log Message:
Don't NULL deref on unknown subop, e.g. PA2.0 instruction.

Print undefined instead of ???.


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/hppa/hppa/db_disasm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/hppa/hppa/db_disasm.c
diff -u src/sys/arch/hppa/hppa/db_disasm.c:1.12 src/sys/arch/hppa/hppa/db_disasm.c:1.13
--- src/sys/arch/hppa/hppa/db_disasm.c:1.12	Tue Nov  3 05:07:26 2009
+++ src/sys/arch/hppa/hppa/db_disasm.c	Mon Jan 16 09:01:35 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: db_disasm.c,v 1.12 2009/11/03 05:07:26 snj Exp $	*/
+/*	$NetBSD: db_disasm.c,v 1.13 2012/01/16 09:01:35 skrll Exp $	*/
 
 /*	$OpenBSD: db_disasm.c,v 1.9 2000/04/18 20:02:45 mickey Exp $	*/
 
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_disasm.c,v 1.12 2009/11/03 05:07:26 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_disasm.c,v 1.13 2012/01/16 09:01:35 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -2253,16 +2253,18 @@ db_disasm(vaddr_t loc, bool flag)
 		else
 			i = m->subops[ext];
 
-		if (i->dasmfcn != coprDasm && i->dasmfcn != diagDasm &&
-		    i->dasmfcn != ariDasm && i->dasmfcn != scDasm &&
-		    i->dasmfcn != ldDasm)
-			db_printf(i->mnem);
-		if (i->dasmfcn)
-			(*i->dasmfcn)(i, ofs, instruct);
-		else if (i->mnem[0] == '?')
-			db_printf("???");
+		if (i) {
+			if (i->dasmfcn != coprDasm && i->dasmfcn != diagDasm &&
+			    i->dasmfcn != ariDasm && i->dasmfcn != scDasm &&
+			    i->dasmfcn != ldDasm)
+				db_printf("%s", i->mnem);
+			if (i->dasmfcn)
+				(*i->dasmfcn)(i, ofs, instruct);
+		} else {
+			db_printf("undefined subop");
+		}
 	} else
-		db_printf("???");
+		db_printf("undefined");
 
 	db_printf("\n");
 	return (loc + sizeof(instruct));

Reply via email to