MFp4:
Ensure target/lun passed from user-level supported on this bus. Scanning unsupported IDs causes different issues from duplicate devices to system crash.
This commit is contained in:
parent
fd66267ffb
commit
d521940e9a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=198705
@ -452,7 +452,34 @@ xptioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flag, struct thread *td
|
||||
ccb = xpt_alloc_ccb();
|
||||
|
||||
CAM_SIM_LOCK(bus->sim);
|
||||
|
||||
/* Ensure passed in target/lun supported on this bus. */
|
||||
if ((inccb->ccb_h.target_id != CAM_TARGET_WILDCARD) ||
|
||||
(inccb->ccb_h.target_lun != CAM_LUN_WILDCARD)) {
|
||||
if (xpt_create_path(&ccb->ccb_h.path,
|
||||
xpt_periph,
|
||||
inccb->ccb_h.path_id,
|
||||
CAM_TARGET_WILDCARD,
|
||||
CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
|
||||
error = EINVAL;
|
||||
CAM_SIM_UNLOCK(bus->sim);
|
||||
xpt_free_ccb(ccb);
|
||||
break;
|
||||
}
|
||||
xpt_setup_ccb(&ccb->ccb_h, ccb->ccb_h.path,
|
||||
inccb->ccb_h.pinfo.priority);
|
||||
ccb->ccb_h.func_code = XPT_PATH_INQ;
|
||||
xpt_action(ccb);
|
||||
xpt_free_path(ccb->ccb_h.path);
|
||||
if ((inccb->ccb_h.target_id != CAM_TARGET_WILDCARD &&
|
||||
inccb->ccb_h.target_id > ccb->cpi.max_target) ||
|
||||
(inccb->ccb_h.target_lun != CAM_LUN_WILDCARD &&
|
||||
inccb->ccb_h.target_lun > ccb->cpi.max_lun)) {
|
||||
error = EINVAL;
|
||||
CAM_SIM_UNLOCK(bus->sim);
|
||||
xpt_free_ccb(ccb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Create a path using the bus, target, and lun the
|
||||
* user passed in.
|
||||
|
Loading…
Reference in New Issue
Block a user