⬢ DragonFlyBSD Kernel Audit
DF-2360 / fix.diff
← back to finding ↓ download raw
--- a/sys/cpu/x86_64/misc/db_disasm.c
+++ b/sys/cpu/x86_64/misc/db_disasm.c
@@ -1272,7 +1272,12 @@
 	}
 	else if (ip->i_extra == db_Grp7) {
 	     if((regmodrm & 0xC0) == 0xC0) {
-		i_name = db_Grp7_11[f_reg(rex, regmodrm)][regmodrm &0x7];
+		int rg = f_reg(rex, regmodrm);
+		if (rg >= (int)(sizeof(db_Grp7_11) / sizeof(db_Grp7_11[0])) ||
+		    db_Grp7_11[rg] == NULL)
+			i_name = "???";
+		else
+			i_name = db_Grp7_11[rg][regmodrm & 0x7];
 		i_mode = 0;
 	     }
 	     else {
@@ -1378,11 +1383,11 @@
 		    break;
 
 		case S:
-		    db_printf("%s", db_seg_reg[f_reg(rex, regmodrm)]);
+		    db_printf("%s", db_seg_reg[f_reg(rex, regmodrm) & 7]);
 		    break;
 
 		case Si:
-		    db_printf("%s", db_seg_reg[f_reg(rex, inst)]);
+		    db_printf("%s", db_seg_reg[f_reg(rex, inst) & 7]);
 		    break;
 
 		case A: