diff mbox series

[2/2,v1,2/2] sd: Fixing interpretation of VPD B9h length

Message ID 20220531175009.850-3-tyler.erickson@seagate.com
State New
Headers show
Series ata,sd: Fix reading concurrent positioning ranges | expand

Commit Message

Tyler Erickson May 31, 2022, 5:50 p.m. UTC
Fixing the interpretation of the length of the B9h VPD page
(concurrent positioning ranges). Adding 4 is necessary as
the first 4 bytes of the page is the header with page number
and length information. Adding 3 was likely a misinterpretation
of the SBC-5 specification which sets all offsets starting at zero.

This fixes the error in dmesg:
[ 9.014456] sd 1:0:0:0: [sda] Invalid Concurrent Positioning Ranges VPD page

Signed-off-by: Tyler Erickson <tyler.erickson@seagate.com>
Reviewed-by: Muhammad Ahmad <muhammad.ahmad@seagate.com>
Tested-by: Michael English <michael.english@seagate.com>

Comments

Damien Le Moal May 31, 2022, 9:30 p.m. UTC | #1
On 6/1/22 02:50, Tyler Erickson wrote:
> Fixing the interpretation of the length of the B9h VPD page
> (concurrent positioning ranges). Adding 4 is necessary as
> the first 4 bytes of the page is the header with page number
> and length information. Adding 3 was likely a misinterpretation
> of the SBC-5 specification which sets all offsets starting at zero.
> 
> This fixes the error in dmesg:
> [ 9.014456] sd 1:0:0:0: [sda] Invalid Concurrent Positioning Ranges VPD page
> 
> Signed-off-by: Tyler Erickson <tyler.erickson@seagate.com>
> Reviewed-by: Muhammad Ahmad <muhammad.ahmad@seagate.com>
> Tested-by: Michael English <michael.english@seagate.com>

This needs a fixes tag and cc stable. Your patch format is also starnge.
It is missing the "---" separator after the tags. This is not going to
apply. Did you generate this with git format-patch ?

> 
> diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
> index dc6e55761fd1..14867e8cd687 100644
> --- a/drivers/scsi/sd.c
> +++ b/drivers/scsi/sd.c
> @@ -3067,7 +3067,7 @@ static void sd_read_cpr(struct scsi_disk *sdkp)
>  		goto out;
>  
>  	/* We must have at least a 64B header and one 32B range descriptor */
> -	vpd_len = get_unaligned_be16(&buffer[2]) + 3;
> +	vpd_len = get_unaligned_be16(&buffer[2]) + 4;
>  	if (vpd_len > buf_len || vpd_len < 64 + 32 || (vpd_len & 31)) {
>  		sd_printk(KERN_ERR, sdkp,
>  			  "Invalid Concurrent Positioning Ranges VPD page\n");
Tyler Erickson May 31, 2022, 9:57 p.m. UTC | #2
Thanks for the feedback. 
I did use git format-patch. I will double check my work and see if I can figure out what caused the formatting issues and resubmit with the changes you have mentioned.

Tyler Erickson
Seagate Technology


Seagate Internal

-----Original Message-----
From: Damien Le Moal <damien.lemoal@opensource.wdc.com> 
Sent: Tuesday, May 31, 2022 3:30 PM
To: Tyler Erickson <tyler.erickson@seagate.com>; jejb@linux.ibm.com; martin.petersen@oracle.com
Cc: linux-scsi@vger.kernel.org; linux-ide@vger.kernel.org; Muhammad Ahmad <muhammad.ahmad@seagate.com>; Michael English <michael.english@seagate.com>
Subject: Re: [PATCH 2/2] [PATCH v1 2/2] sd: Fixing interpretation of VPD B9h length


This message has originated from an External Source. Please use proper judgment and caution when opening attachments, clicking links, or responding to this email.


On 6/1/22 02:50, Tyler Erickson wrote:
> Fixing the interpretation of the length of the B9h VPD page 
> (concurrent positioning ranges). Adding 4 is necessary as the first 4 
> bytes of the page is the header with page number and length 
> information. Adding 3 was likely a misinterpretation of the SBC-5 
> specification which sets all offsets starting at zero.
>
> This fixes the error in dmesg:
> [ 9.014456] sd 1:0:0:0: [sda] Invalid Concurrent Positioning Ranges 
> VPD page
>
> Signed-off-by: Tyler Erickson <tyler.erickson@seagate.com>
> Reviewed-by: Muhammad Ahmad <muhammad.ahmad@seagate.com>
> Tested-by: Michael English <michael.english@seagate.com>

This needs a fixes tag and cc stable. Your patch format is also starnge.
It is missing the "---" separator after the tags. This is not going to apply. Did you generate this with git format-patch ?

>
> diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 
> dc6e55761fd1..14867e8cd687 100644
> --- a/drivers/scsi/sd.c
> +++ b/drivers/scsi/sd.c
> @@ -3067,7 +3067,7 @@ static void sd_read_cpr(struct scsi_disk *sdkp)
>               goto out;
>
>       /* We must have at least a 64B header and one 32B range descriptor */
> -     vpd_len = get_unaligned_be16(&buffer[2]) + 3;
> +     vpd_len = get_unaligned_be16(&buffer[2]) + 4;
>       if (vpd_len > buf_len || vpd_len < 64 + 32 || (vpd_len & 31)) {
>               sd_printk(KERN_ERR, sdkp,
>                         "Invalid Concurrent Positioning Ranges VPD 
> page\n");


--
Damien Le Moal
Western Digital Research
diff mbox series

Patch

diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index dc6e55761fd1..14867e8cd687 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -3067,7 +3067,7 @@  static void sd_read_cpr(struct scsi_disk *sdkp)
 		goto out;
 
 	/* We must have at least a 64B header and one 32B range descriptor */
-	vpd_len = get_unaligned_be16(&buffer[2]) + 3;
+	vpd_len = get_unaligned_be16(&buffer[2]) + 4;
 	if (vpd_len > buf_len || vpd_len < 64 + 32 || (vpd_len & 31)) {
 		sd_printk(KERN_ERR, sdkp,
 			  "Invalid Concurrent Positioning Ranges VPD page\n");