Message ID | 252651381.41652940482659.JavaMail.epsvc@epcpadp4 (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | scsi: ufs: Fix referencing invalid rsp field | expand |
> This is a patch for fixing 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. > > Signed-off-by: Daejun Park <daejun7.park@samsung.com> Acked-by: Avri Altman <avri.altman@wdc.com>
> This is a patch for fixing 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. > You should put a proper fix tag to be applied the corresponding stable tree. See https://www.kernel.org/doc/html/latest/process/submitting-patches.html Fixes: 4b5f49079c52 ("scsi: ufs: ufshpb: L2P map management for HPB read") Best Regards, Chanho Park > Signed-off-by: Daejun Park <daejun7.park@samsung.com> > --- > drivers/scsi/ufs/ufshpb.c | 19 +++++++------------ > 1 file changed, 7 insertions(+), 12 deletions(-) > > diff --git a/drivers/scsi/ufs/ufshpb.c b/drivers/scsi/ufs/ufshpb.c index > f1f65383e97d..8882b47f76d3 100644 > --- a/drivers/scsi/ufs/ufshpb.c > +++ b/drivers/scsi/ufs/ufshpb.c > @@ -1304,6 +1304,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; > @@ -1338,18 +1345,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)) > -- > 2.25.1 >
On Thu, 19 May 2022 15:05:29 +0900, Daejun Park wrote: > This is a patch for fixing 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. > > Applied to 5.18/scsi-fixes, thanks! [1/1] scsi: ufs: Fix referencing invalid rsp field https://git.kernel.org/mkp/scsi/c/d5d92b644084
diff --git a/drivers/scsi/ufs/ufshpb.c b/drivers/scsi/ufs/ufshpb.c index f1f65383e97d..8882b47f76d3 100644 --- a/drivers/scsi/ufs/ufshpb.c +++ b/drivers/scsi/ufs/ufshpb.c @@ -1304,6 +1304,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; @@ -1338,18 +1345,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))
This is a patch for fixing 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. Signed-off-by: Daejun Park <daejun7.park@samsung.com> --- drivers/scsi/ufs/ufshpb.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-)