DF-1347 / fix.diff
diff --git a/sys/dev/disk/amd/amd.c b/sys/dev/disk/amd/amd.c --- a/sys/dev/disk/amd/amd.c +++ b/sys/dev/disk/amd/amd.c @@ -1828,6 +1828,12 @@ /* get ID */ amd->cur_target = amd_read8(amd, SCSIFIFOREG); amd->cur_target ^= amd->HostID_Bit; + if (amd->cur_target == 0 || (amd->cur_target & (amd->cur_target - 1)) != 0) { + device_printf(amd->dev, "invalid reselect id 0x%x\n", amd->cur_target); + amd->cur_target = 0; + amd_write8(amd, SCSICMDREG, RST_SCSI_BUS_CMD); + return; + } amd->cur_target = ffs(amd->cur_target) - 1; amd->cur_lun = amd_read8(amd, SCSIFIFOREG) & 7; tinfo = &amd->tinfo[amd->cur_target]; |