All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1] arm/optee: Use only least 32 bits for SMC type arg according to SMCCC
@ 2021-01-06 11:26 Roman Skakun
  2021-01-06 17:24 ` Volodymyr Babchuk
  2021-01-06 18:02 ` Julien Grall
  0 siblings, 2 replies; 5+ messages in thread
From: Roman Skakun @ 2021-01-06 11:26 UTC (permalink / raw)
  To: xen-devel
  Cc: Volodymyr Babchuk, Stefano Stabellini, Julien Grall, Volodymyr Babchuk

This patch added additional sanity and increases an understanding for
getting proper value from the first argument for SMC call on aarch64
according to SMCC Convention.

[0] ARM DEN0028B, page 12

Signed-off-by: Roman Skakun <roman_skakun@epam.com>
---
 xen/arch/arm/tee/optee.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/xen/arch/arm/tee/optee.c b/xen/arch/arm/tee/optee.c
index ee85359742..87060b52b8 100644
--- a/xen/arch/arm/tee/optee.c
+++ b/xen/arch/arm/tee/optee.c
@@ -1643,7 +1643,8 @@ static bool optee_handle_call(struct cpu_user_regs *regs)
     if ( !ctx )
         return false;
 
-    switch ( get_user_reg(regs, 0) )
+    /* Only least 32 bits are significant (see ARM DEN 0028B, page 12) */
+    switch ( (uint32_t)get_user_reg(regs, 0) )
     {
     case OPTEE_SMC_CALLS_COUNT:
         set_user_reg(regs, 0, OPTEE_MEDIATOR_SMC_COUNT);
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v1] arm/optee: Use only least 32 bits for SMC type arg according to SMCCC
  2021-01-06 11:26 [PATCH v1] arm/optee: Use only least 32 bits for SMC type arg according to SMCCC Roman Skakun
@ 2021-01-06 17:24 ` Volodymyr Babchuk
  2021-01-06 18:02 ` Julien Grall
  1 sibling, 0 replies; 5+ messages in thread
From: Volodymyr Babchuk @ 2021-01-06 17:24 UTC (permalink / raw)
  To: Roman Skakun; +Cc: Stefano Stabellini, Julien Grall, xen-devel


Hi Roman,

Thank you for the contribution.

Roman Skakun writes:

> This patch added additional sanity and increases an understanding for
> getting proper value from the first argument for SMC call on aarch64
> according to SMCC Convention.
>
> [0] ARM DEN0028B, page 12
>
> Signed-off-by: Roman Skakun <roman_skakun@epam.com>

Acked-by: Volodymyr Babchyk <volodymyr_babchuk@epam.com>

> ---
>  xen/arch/arm/tee/optee.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/xen/arch/arm/tee/optee.c b/xen/arch/arm/tee/optee.c
> index ee85359742..87060b52b8 100644
> --- a/xen/arch/arm/tee/optee.c
> +++ b/xen/arch/arm/tee/optee.c
> @@ -1643,7 +1643,8 @@ static bool optee_handle_call(struct cpu_user_regs *regs)
>      if ( !ctx )
>          return false;
>  
> -    switch ( get_user_reg(regs, 0) )
> +    /* Only least 32 bits are significant (see ARM DEN 0028B, page 12) */
> +    switch ( (uint32_t)get_user_reg(regs, 0) )
>      {
>      case OPTEE_SMC_CALLS_COUNT:
>          set_user_reg(regs, 0, OPTEE_MEDIATOR_SMC_COUNT);


-- 
Volodymyr Babchuk at EPAM

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v1] arm/optee: Use only least 32 bits for SMC type arg according to SMCCC
  2021-01-06 11:26 [PATCH v1] arm/optee: Use only least 32 bits for SMC type arg according to SMCCC Roman Skakun
  2021-01-06 17:24 ` Volodymyr Babchuk
@ 2021-01-06 18:02 ` Julien Grall
  2021-01-06 23:22   ` Volodymyr Babchuk
  1 sibling, 1 reply; 5+ messages in thread
From: Julien Grall @ 2021-01-06 18:02 UTC (permalink / raw)
  To: Roman Skakun, xen-devel; +Cc: Volodymyr Babchuk, Stefano Stabellini

Hi Roman,

On 06/01/2021 11:26, Roman Skakun wrote:
> This patch added additional sanity and increases an understanding for
> getting proper value from the first argument for SMC call on aarch64
> according to SMCC Convention.

I would suggest the following commit message:

"xen/arm: optee: The function identifier is always 32-bit

Per the SMCCC specification (see section 3.1 in ARM DEN 0028D), the 
function identifier is only stored in the least significant 32-bits. The 
most significant 32-bits should be ignored.

The function optee_handle_call() is now updated to ignore the most 
significant 32-bits.

"

Note that I used the version D rather than B because the latter has 
buggy wording (it seems to suggest that the least significants bits 
should be ignored).

Furthermore, I checked vsmc.c (the layer that dispatch the SMC) and it 
was already handled properly thanks to commit 7f4217cc6057 "xen/arm: 
vsmc: The function identifier is always 32-bit".

> [0] ARM DEN0028B, page 12
> 
> Signed-off-by: Roman Skakun <roman_skakun@epam.com>
> ---
>   xen/arch/arm/tee/optee.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/xen/arch/arm/tee/optee.c b/xen/arch/arm/tee/optee.c
> index ee85359742..87060b52b8 100644
> --- a/xen/arch/arm/tee/optee.c
> +++ b/xen/arch/arm/tee/optee.c
> @@ -1643,7 +1643,8 @@ static bool optee_handle_call(struct cpu_user_regs *regs)
>       if ( !ctx )
>           return false;
>   
> -    switch ( get_user_reg(regs, 0) )
> +    /* Only least 32 bits are significant (see ARM DEN 0028B, page 12) */

I would suggest:

/* The function identifier is always stored in the least significant 
32-bit (see section ARM DEN 0028D) */

I can update it while committing, if both Volodymyr and you are happy 
with changes.

Cheers,

> +    switch ( (uint32_t)get_user_reg(regs, 0) )
>       {
>       case OPTEE_SMC_CALLS_COUNT:
>           set_user_reg(regs, 0, OPTEE_MEDIATOR_SMC_COUNT);
> 

-- 
Julien Grall


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v1] arm/optee: Use only least 32 bits for SMC type arg according to SMCCC
  2021-01-06 18:02 ` Julien Grall
@ 2021-01-06 23:22   ` Volodymyr Babchuk
  2021-01-08 10:27     ` Julien Grall
  0 siblings, 1 reply; 5+ messages in thread
From: Volodymyr Babchuk @ 2021-01-06 23:22 UTC (permalink / raw)
  To: Julien Grall; +Cc: Roman Skakun, xen-devel, Stefano Stabellini


Hi Julien,

Julien Grall writes:

> Hi Roman,
>
> On 06/01/2021 11:26, Roman Skakun wrote:
>> This patch added additional sanity and increases an understanding for
>> getting proper value from the first argument for SMC call on aarch64
>> according to SMCC Convention.
>
> I would suggest the following commit message:
>
> "xen/arm: optee: The function identifier is always 32-bit
>
> Per the SMCCC specification (see section 3.1 in ARM DEN 0028D), the
> function identifier is only stored in the least significant
> 32-bits. The most significant 32-bits should be ignored.
>
> The function optee_handle_call() is now updated to ignore the most
> significant 32-bits.
>
> "
>
> Note that I used the version D rather than B because the latter has
> buggy wording (it seems to suggest that the least significants bits 
> should be ignored).
>
> Furthermore, I checked vsmc.c (the layer that dispatch the SMC) and it
> was already handled properly thanks to commit 7f4217cc6057 "xen/arm: 
> vsmc: The function identifier is always 32-bit".
>
>> [0] ARM DEN0028B, page 12
>> Signed-off-by: Roman Skakun <roman_skakun@epam.com>
>> ---
>>   xen/arch/arm/tee/optee.c | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>> diff --git a/xen/arch/arm/tee/optee.c b/xen/arch/arm/tee/optee.c
>> index ee85359742..87060b52b8 100644
>> --- a/xen/arch/arm/tee/optee.c
>> +++ b/xen/arch/arm/tee/optee.c
>> @@ -1643,7 +1643,8 @@ static bool optee_handle_call(struct cpu_user_regs *regs)
>>       if ( !ctx )
>>           return false;
>>   -    switch ( get_user_reg(regs, 0) )
>> +    /* Only least 32 bits are significant (see ARM DEN 0028B, page 12) */
>
> I would suggest:
>
> /* The function identifier is always stored in the least significant
> 32-bit (see section ARM DEN 0028D) */
>
> I can update it while committing, if both Volodymyr and you are happy
> with changes.

I'm totally fine with the proposed changes. Thank you for tidying this up.

-- 
Volodymyr Babchuk at EPAM

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v1] arm/optee: Use only least 32 bits for SMC type arg according to SMCCC
  2021-01-06 23:22   ` Volodymyr Babchuk
@ 2021-01-08 10:27     ` Julien Grall
  0 siblings, 0 replies; 5+ messages in thread
From: Julien Grall @ 2021-01-08 10:27 UTC (permalink / raw)
  To: Volodymyr Babchuk; +Cc: Roman Skakun, xen-devel, Stefano Stabellini



On 06/01/2021 23:22, Volodymyr Babchuk wrote:
> 
> Hi Julien,
> 
> Julien Grall writes:
> 
>> Hi Roman,
>>
>> On 06/01/2021 11:26, Roman Skakun wrote:
>>> This patch added additional sanity and increases an understanding for
>>> getting proper value from the first argument for SMC call on aarch64
>>> according to SMCC Convention.
>>
>> I would suggest the following commit message:
>>
>> "xen/arm: optee: The function identifier is always 32-bit
>>
>> Per the SMCCC specification (see section 3.1 in ARM DEN 0028D), the
>> function identifier is only stored in the least significant
>> 32-bits. The most significant 32-bits should be ignored.
>>
>> The function optee_handle_call() is now updated to ignore the most
>> significant 32-bits.
>>
>> "
>>
>> Note that I used the version D rather than B because the latter has
>> buggy wording (it seems to suggest that the least significants bits
>> should be ignored).
>>
>> Furthermore, I checked vsmc.c (the layer that dispatch the SMC) and it
>> was already handled properly thanks to commit 7f4217cc6057 "xen/arm:
>> vsmc: The function identifier is always 32-bit".
>>
>>> [0] ARM DEN0028B, page 12
>>> Signed-off-by: Roman Skakun <roman_skakun@epam.com>
>>> ---
>>>    xen/arch/arm/tee/optee.c | 3 ++-
>>>    1 file changed, 2 insertions(+), 1 deletion(-)
>>> diff --git a/xen/arch/arm/tee/optee.c b/xen/arch/arm/tee/optee.c
>>> index ee85359742..87060b52b8 100644
>>> --- a/xen/arch/arm/tee/optee.c
>>> +++ b/xen/arch/arm/tee/optee.c
>>> @@ -1643,7 +1643,8 @@ static bool optee_handle_call(struct cpu_user_regs *regs)
>>>        if ( !ctx )
>>>            return false;
>>>    -    switch ( get_user_reg(regs, 0) )
>>> +    /* Only least 32 bits are significant (see ARM DEN 0028B, page 12) */
>>
>> I would suggest:
>>
>> /* The function identifier is always stored in the least significant
>> 32-bit (see section ARM DEN 0028D) */
>>
>> I can update it while committing, if both Volodymyr and you are happy
>> with changes.
> 
> I'm totally fine with the proposed changes. Thank you for tidying this up.

Thanks! I have updated the patch and committed it.

Cheers,

> 

-- 
Julien Grall


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-01-08 10:28 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-06 11:26 [PATCH v1] arm/optee: Use only least 32 bits for SMC type arg according to SMCCC Roman Skakun
2021-01-06 17:24 ` Volodymyr Babchuk
2021-01-06 18:02 ` Julien Grall
2021-01-06 23:22   ` Volodymyr Babchuk
2021-01-08 10:27     ` Julien Grall

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.