diff mbox series

ocxl: Fix endiannes bug in read_afu_name()

Message ID 154445465027.866316.3631489273007908874.stgit@bahia.lan (mailing list archive)
State Superseded
Headers show
Series ocxl: Fix endiannes bug in read_afu_name() | expand

Checks

Context Check Description
snowpatch_ozlabs/apply_patch success next/apply_patch Successfully applied
snowpatch_ozlabs/build-ppc64le warning build succeeded but added 1 new sparse warning(s)
snowpatch_ozlabs/build-ppc64be warning build succeeded but added 6 new sparse warning(s)
snowpatch_ozlabs/build-ppc64e success build succeded & removed 0 sparse warning(s)
snowpatch_ozlabs/build-pmac32 success build succeded & removed 0 sparse warning(s)
snowpatch_ozlabs/checkpatch success total: 0 errors, 0 warnings, 0 checks, 8 lines checked

Commit Message

Greg Kurz Dec. 10, 2018, 3:10 p.m. UTC
The double word returned by read_afu_info(OCXL_DVSEC_TEMPL_NAME) contains
four characters of the AFU name, read from the PCI config space, hence
with a little-endian ordering. When composing the string, a big-endian
system must swap the bytes so that the characters appear in the right
order.

Do this with le32_to_cpu().

Signed-off-by: Greg Kurz <groug@kaod.org>
---
 drivers/misc/ocxl/config.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Frederic Barrat Dec. 10, 2018, 3:54 p.m. UTC | #1
Le 10/12/2018 à 16:10, Greg Kurz a écrit :
> The double word returned by read_afu_info(OCXL_DVSEC_TEMPL_NAME) contains
> four characters of the AFU name, read from the PCI config space, hence
> with a little-endian ordering. When composing the string, a big-endian
> system must swap the bytes so that the characters appear in the right
> order.
> 
> Do this with le32_to_cpu().
> 
> Signed-off-by: Greg Kurz <groug@kaod.org>
> ---

Thanks!

Acked-by: Frederic Barrat <fbarrat@linux.ibm.com>


>   drivers/misc/ocxl/config.c |    2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/misc/ocxl/config.c b/drivers/misc/ocxl/config.c
> index 57a6bb1fd3c9..b76198ba8630 100644
> --- a/drivers/misc/ocxl/config.c
> +++ b/drivers/misc/ocxl/config.c
> @@ -318,7 +318,7 @@ static int read_afu_name(struct pci_dev *dev, struct ocxl_fn_config *fn,
>   		if (rc)
>   			return rc;
>   		ptr = (u32 *) &afu->name[i];
> -		*ptr = val;
> +		*ptr = le32_to_cpu(val);
>   	}
>   	afu->name[OCXL_AFU_NAME_SZ - 1] = '\0'; /* play safe */
>   	return 0;
>
Andrew Donnellan Dec. 11, 2018, 12:05 a.m. UTC | #2
On 11/12/18 2:10 am, Greg Kurz wrote:
> The double word returned by read_afu_info(OCXL_DVSEC_TEMPL_NAME) contains
> four characters of the AFU name, read from the PCI config space, hence
> with a little-endian ordering. When composing the string, a big-endian
> system must swap the bytes so that the characters appear in the right
> order.
> 
> Do this with le32_to_cpu().
> 
> Signed-off-by: Greg Kurz <groug@kaod.org>

snowpatch reports the following sparse warning:

+drivers/misc/ocxl/config.c:321:24: warning: cast to restricted __le32

You probably need to change val from a u32 to a __le32.

> ---
>   drivers/misc/ocxl/config.c |    2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/misc/ocxl/config.c b/drivers/misc/ocxl/config.c
> index 57a6bb1fd3c9..b76198ba8630 100644
> --- a/drivers/misc/ocxl/config.c
> +++ b/drivers/misc/ocxl/config.c
> @@ -318,7 +318,7 @@ static int read_afu_name(struct pci_dev *dev, struct ocxl_fn_config *fn,
>   		if (rc)
>   			return rc;
>   		ptr = (u32 *) &afu->name[i];
> -		*ptr = val;
> +		*ptr = le32_to_cpu(val);
>   	}
>   	afu->name[OCXL_AFU_NAME_SZ - 1] = '\0'; /* play safe */
>   	return 0;
>
Andrew Donnellan Dec. 11, 2018, 12:24 a.m. UTC | #3
On 11/12/18 11:05 am, Andrew Donnellan wrote:
> On 11/12/18 2:10 am, Greg Kurz wrote:
>> The double word returned by read_afu_info(OCXL_DVSEC_TEMPL_NAME) contains
>> four characters of the AFU name, read from the PCI config space, hence
>> with a little-endian ordering. When composing the string, a big-endian
>> system must swap the bytes so that the characters appear in the right
>> order.
>>
>> Do this with le32_to_cpu().
>>
>> Signed-off-by: Greg Kurz <groug@kaod.org>
> 
> snowpatch reports the following sparse warning:
> 
> +drivers/misc/ocxl/config.c:321:24: warning: cast to restricted __le32
> 
> You probably need to change val from a u32 to a __le32.

Also does this need to go to stable?
Greg Kurz Dec. 11, 2018, 8:33 a.m. UTC | #4
On Tue, 11 Dec 2018 11:24:08 +1100
Andrew Donnellan <andrew.donnellan@au1.ibm.com> wrote:

> On 11/12/18 11:05 am, Andrew Donnellan wrote:
> > On 11/12/18 2:10 am, Greg Kurz wrote:  
> >> The double word returned by read_afu_info(OCXL_DVSEC_TEMPL_NAME) contains
> >> four characters of the AFU name, read from the PCI config space, hence
> >> with a little-endian ordering. When composing the string, a big-endian
> >> system must swap the bytes so that the characters appear in the right
> >> order.
> >>
> >> Do this with le32_to_cpu().
> >>
> >> Signed-off-by: Greg Kurz <groug@kaod.org>  
> > 
> > snowpatch reports the following sparse warning:
> > 
> > +drivers/misc/ocxl/config.c:321:24: warning: cast to restricted __le32
> > 
> > You probably need to change val from a u32 to a __le32.  
> 

You might be right, I'll look into this.

> Also does this need to go to stable?
> 

Oops... this bug has been there since the beginning, so yes
it does. I simply forgot to add the Cc: stable tag... :-\

Cheers,

--
Greg
diff mbox series

Patch

diff --git a/drivers/misc/ocxl/config.c b/drivers/misc/ocxl/config.c
index 57a6bb1fd3c9..b76198ba8630 100644
--- a/drivers/misc/ocxl/config.c
+++ b/drivers/misc/ocxl/config.c
@@ -318,7 +318,7 @@  static int read_afu_name(struct pci_dev *dev, struct ocxl_fn_config *fn,
 		if (rc)
 			return rc;
 		ptr = (u32 *) &afu->name[i];
-		*ptr = val;
+		*ptr = le32_to_cpu(val);
 	}
 	afu->name[OCXL_AFU_NAME_SZ - 1] = '\0'; /* play safe */
 	return 0;