DF-2360 / fix.diff
--- 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: |