--- a/sys/dev/disk/isp/isp_freebsd.c +++ b/sys/dev/disk/isp/isp_freebsd.c @@ -4563,6 +4563,11 @@ isp_action(struct cam_sim *sim, union ccb *ccb) } tgt = cts->ccb_h.target_id; bus = cam_sim_bus(xpt_path_sim(cts->ccb_h.path)); + if (tgt >= ISP_MAX_TARGETS(isp)) { + ccb->ccb_h.status = CAM_TID_INVALID; + xpt_done(ccb); + break; + } if (IS_SCSI(isp)) { struct ccb_trans_settings_scsi *scsi = &cts->proto_specific.scsi; struct ccb_trans_settings_spi *spi = &cts->xport_specific.spi; @@ -4628,6 +4633,11 @@ isp_action(struct cam_sim *sim, union ccb *ccb) case XPT_GET_TRAN_SETTINGS: cts = &ccb->cts; tgt = cts->ccb_h.target_id; bus = cam_sim_bus(xpt_path_sim(cts->ccb_h.path)); + if (tgt >= ISP_MAX_TARGETS(isp)) { + ccb->ccb_h.status = CAM_TID_INVALID; + xpt_done(ccb); + break; + } if (IS_FC(isp)) { fcparam *fcp = FCPARAM(isp, bus); struct ccb_trans_settings_scsi *scsi = &cts->proto_specific.scsi;