scsi: ufs: core: Fix referencing invalid rsp field
Fix referencing sense data when it is invalid. When the length of the data
segment is 0, there is no valid information in the rsp field, so
ufshpb_rsp_upiu() is returned without additional operation.
Link: https://lore.kernel.org/r/252651381.41652940482659.JavaMail.epsvc@epcpadp4
Fixes: 4b5f49079c
("scsi: ufs: ufshpb: L2P map management for HPB read")
Acked-by: Avri Altman <avri.altman@wdc.com>
Signed-off-by: Daejun Park <daejun7.park@samsung.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
525f447f88
commit
d5d92b6440
@ -1254,6 +1254,13 @@ void ufshpb_rsp_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
|
||||
struct utp_hpb_rsp *rsp_field = &lrbp->ucd_rsp_ptr->hr;
|
||||
int data_seg_len;
|
||||
|
||||
data_seg_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2)
|
||||
& MASK_RSP_UPIU_DATA_SEG_LEN;
|
||||
|
||||
/* If data segment length is zero, rsp_field is not valid */
|
||||
if (!data_seg_len)
|
||||
return;
|
||||
|
||||
if (unlikely(lrbp->lun != rsp_field->lun)) {
|
||||
struct scsi_device *sdev;
|
||||
bool found = false;
|
||||
@ -1288,18 +1295,6 @@ void ufshpb_rsp_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
|
||||
return;
|
||||
}
|
||||
|
||||
data_seg_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2)
|
||||
& MASK_RSP_UPIU_DATA_SEG_LEN;
|
||||
|
||||
/* To flush remained rsp_list, we queue the map_work task */
|
||||
if (!data_seg_len) {
|
||||
if (!ufshpb_is_general_lun(hpb->lun))
|
||||
return;
|
||||
|
||||
ufshpb_kick_map_work(hpb);
|
||||
return;
|
||||
}
|
||||
|
||||
BUILD_BUG_ON(sizeof(struct utp_hpb_rsp) != UTP_HPB_RSP_SIZE);
|
||||
|
||||
if (!ufshpb_is_hpb_rsp_valid(hba, lrbp, rsp_field))
|
||||
|
Loading…
Reference in New Issue
Block a user