mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
scsi: target: iblock: Fix wrong PR ops NULL check for PREEMPT/RELEASE
In the iblock_execute_pr_out() function, PRO_PREEMPT,
PRO_PREEMPT_AND_ABORT, and PRO_RELEASE all perform callback capability
checks through ops->pr_clear. The error check allows unimplemented hooks
to pass through the gate, resulting dereferencing a NULL function
pointer.
Check whether the hooks that need to be called are supported.
Fixes: 394f811848 ("scsi: target: Add block PR support to iblock")
Signed-off-by: TanZheng <tanzheng@kylinos.cn>
Reviewed-by: Mike Christie <michael.christie@oracle.com>
Link: https://patch.msgid.link/20260724075850.280699-1-kensanya@163.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
4d5282c06c
commit
9c33222bd3
|
|
@ -906,7 +906,7 @@ static sense_reason_t iblock_execute_pr_out(struct se_cmd *cmd, u8 sa, u64 key,
|
|||
break;
|
||||
case PRO_PREEMPT:
|
||||
case PRO_PREEMPT_AND_ABORT:
|
||||
if (!ops->pr_clear) {
|
||||
if (!ops->pr_preempt) {
|
||||
pr_err("block_device does not support pr_preempt.\n");
|
||||
return TCM_UNSUPPORTED_SCSI_OPCODE;
|
||||
}
|
||||
|
|
@ -916,8 +916,8 @@ static sense_reason_t iblock_execute_pr_out(struct se_cmd *cmd, u8 sa, u64 key,
|
|||
sa == PRO_PREEMPT_AND_ABORT);
|
||||
break;
|
||||
case PRO_RELEASE:
|
||||
if (!ops->pr_clear) {
|
||||
pr_err("block_device does not support pr_pclear.\n");
|
||||
if (!ops->pr_release) {
|
||||
pr_err("block_device does not support pr_release.\n");
|
||||
return TCM_UNSUPPORTED_SCSI_OPCODE;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user