xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@arm.com>
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: nd@arm.com, volodymyr_babchuk@epam.com,
	andre.przywara@linaro.org, xen-devel@lists.xen.org
Subject: Re: [PATCH v3 10/17] xen/arm64: Add ARM_SMCCC_ARCH_WORKAROUND_1 BP hardening support
Date: Wed, 21 Feb 2018 08:17:17 +0000	[thread overview]
Message-ID: <83a77e71-c7b8-2e69-454c-89b1f60be65b@arm.com> (raw)
In-Reply-To: <alpine.DEB.2.10.1802201627440.19448@sstabellini-ThinkPad-X260>

Hi Stefano,

On 21/02/2018 00:35, Stefano Stabellini wrote:
> On Thu, 15 Feb 2018, Julien Grall wrote:
>> Add the detection and runtime code for ARM_SMCCC_ARCH_WORKAROUND_1.
>>
>> Signed-off-by: Julien Grall <julien.grall@arm.com>
>>
>> ---
>>      Changes in v3:
>>          - Add the missing call to smc #0.
>>
>>      Changes in v2:
>>          - Patch added
>> ---
>>   xen/arch/arm/arm64/bpi.S    | 13 +++++++++++++
>>   xen/arch/arm/cpuerrata.c    | 32 +++++++++++++++++++++++++++++++-
>>   xen/include/asm-arm/smccc.h |  1 +
>>   3 files changed, 45 insertions(+), 1 deletion(-)
>>
>> diff --git a/xen/arch/arm/arm64/bpi.S b/xen/arch/arm/arm64/bpi.S
>> index 4b7f1dc21f..981fb83a88 100644
>> --- a/xen/arch/arm/arm64/bpi.S
>> +++ b/xen/arch/arm/arm64/bpi.S
>> @@ -16,6 +16,8 @@
>>    * along with this program.  If not, see <http://www.gnu.org/licenses/>.
>>    */
>>   
>> +#include <asm/smccc.h>
>> +
>>   .macro ventry target
>>       .rept 31
>>       nop
>> @@ -81,6 +83,17 @@ ENTRY(__psci_hyp_bp_inval_start)
>>       add     sp, sp, #(8 * 18)
>>   ENTRY(__psci_hyp_bp_inval_end)
>>   
>> +ENTRY(__smccc_workaround_1_smc_start)
>> +    sub     sp, sp, #(8 * 4)
>> +    stp     x2, x3, [sp, #(8 * 0)]
>> +    stp     x0, x1, [sp, #(8 * 2)]
>> +    mov     w0, #ARM_SMCCC_ARCH_WORKAROUND_1_FID
>> +    smc     #0
>> +    ldp     x2, x3, [sp, #(8 * 0)]
>> +    ldp     x0, x1, [sp, #(8 * 2)]
>> +    add     sp, sp, #(8 * 4)
>> +ENTRY(__smccc_workaround_1_smc_end)
>> +
>>   /*
>>    * Local variables:
>>    * mode: ASM
>> diff --git a/xen/arch/arm/cpuerrata.c b/xen/arch/arm/cpuerrata.c
>> index 8d5f8d372a..dec9074422 100644
>> --- a/xen/arch/arm/cpuerrata.c
>> +++ b/xen/arch/arm/cpuerrata.c
>> @@ -147,6 +147,34 @@ install_bp_hardening_vec(const struct arm_cpu_capabilities *entry,
>>       return ret;
>>   }
>>   
>> +extern char __smccc_workaround_1_smc_start[], __smccc_workaround_1_smc_end[];
>> +
>> +static bool
>> +check_smccc_arch_workaround_1(const struct arm_cpu_capabilities *entry)
>> +{
>> +    struct arm_smccc_res res;
>> +
>> +    /*
>> +     * Enable callbacks are called on every CPU based on the
>> +     * capabilities. So double-check whether the CPU matches the
>> +     * entry.
>> +     */
>> +    if ( !entry->matches(entry) )
>> +        return false;
> 
> I think this should be return true?

Both are valid. It depends how you consider the workflow here. If you 
return:
	- true: You say that this helper already took care of that CPU. So no 
need to continue further.
	- false: This CPU does not match, let's fallback to a different method. 
That method will bailout later (see install_bp_hardening_vec).

I choose the latte because the SMCCC workaround is considered as an 
alternative method. So we want to fallback to the other one if it does 
not work at the cost of few extra instructions. But that's boot and 
going to be reworked in patch #11. Indeed this is just a temporary 
solution to plumb the new hardening method before we kill the 
PSCI_GET_VERSION one.

Cheers,

-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  reply	other threads:[~2018-02-21  8:17 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-15 15:02 [PATCH v3 00/17] xen/arm: PSCI 1.1 and SMCCC-1.1 support and XSA-254 variant 2 update Julien Grall
2018-02-15 15:02 ` [PATCH v3 01/17] xen/arm: vpsci: Add support for PSCI 1.1 Julien Grall
2018-02-20  0:14   ` Stefano Stabellini
2018-02-21  0:37   ` Stefano Stabellini
2018-02-21  8:05     ` Julien Grall
2018-02-15 15:02 ` [PATCH v3 02/17] xen/arm: vsmc: Implement SMCCC 1.1 Julien Grall
2018-02-15 15:11   ` Volodymyr Babchuk
2018-02-20  0:22   ` Stefano Stabellini
2018-02-15 15:02 ` [PATCH v3 03/17] xen/arm: vsmc: Implement SMCCC_ARCH_WORKAROUND_1 BP hardening support Julien Grall
2018-02-20  0:30   ` Stefano Stabellini
2018-02-21 16:34   ` Andre Przywara
2018-02-21 16:41     ` Julien Grall
2018-02-21 16:50       ` Andre Przywara
2018-02-15 15:02 ` [PATCH v3 04/17] xen/arm: Adapt smccc.h to be able to use it in assembly code Julien Grall
2018-02-20  0:30   ` Stefano Stabellini
2018-02-15 15:02 ` [PATCH v3 05/17] xen/arm64: Implement a fast path for handling SMCCC_ARCH_WORKAROUND_1 Julien Grall
2018-02-21  0:37   ` Stefano Stabellini
2018-02-21 14:27   ` Andre Przywara
2018-02-22 13:58     ` Julien Grall
2018-02-15 15:02 ` [PATCH v3 06/17] xen/arm64: Print a per-CPU message with the BP hardening method used Julien Grall
2018-02-20  0:35   ` Stefano Stabellini
2018-02-15 15:02 ` [PATCH v3 07/17] xen/arm: smccc: Add macros SMCCC_VERSION, SMCCC_VERSION_{MINOR, MAJOR} Julien Grall
2018-02-20  0:36   ` Stefano Stabellini
2018-02-15 15:02 ` [PATCH v3 08/17] xen/arm: psci: Detect SMCCC version Julien Grall
2018-02-21  0:16   ` Stefano Stabellini
2018-02-21 14:43   ` Andre Przywara
2018-02-15 15:02 ` [PATCH v3 09/17] xen/arm: smccc: Implement SMCCC v1.1 inline primitive Julien Grall
2018-02-21  0:21   ` Stefano Stabellini
2018-02-15 15:02 ` [PATCH v3 10/17] xen/arm64: Add ARM_SMCCC_ARCH_WORKAROUND_1 BP hardening support Julien Grall
2018-02-15 15:13   ` Volodymyr Babchuk
2018-02-21  0:35   ` Stefano Stabellini
2018-02-21  8:17     ` Julien Grall [this message]
2018-02-21 17:35       ` Stefano Stabellini
2018-02-22 16:03         ` Julien Grall
2018-02-21 16:07   ` Andre Przywara
2018-02-22 15:59     ` Julien Grall
2018-02-15 15:02 ` [PATCH v3 11/17] xen/arm64: Kill PSCI_GET_VERSION as a variant-2 workaround Julien Grall
2018-02-21  0:44   ` Stefano Stabellini
2018-02-15 15:02 ` [PATCH v3 12/17] xen/arm: vpsci: Remove parameter 'ver' from do_common_cpu Julien Grall
2018-02-21  0:48   ` Stefano Stabellini
2018-02-21 16:27   ` Andre Przywara
2018-02-21 16:37     ` Julien Grall
2018-02-22 16:12       ` Julien Grall
2018-02-15 15:02 ` [PATCH v3 13/17] xen/arm: psci: Consolidate PSCI version print Julien Grall
2018-02-21  0:49   ` Stefano Stabellini
2018-02-15 15:02 ` [PATCH v3 14/17] xen/arm: psci: Prefix with static any functions not exported Julien Grall
2018-02-21  0:50   ` Stefano Stabellini
2018-02-15 15:02 ` [PATCH v3 15/17] xen/arm: vpsci: Update the return type for MIGRATE_INFO_TYPE Julien Grall
2018-02-21  0:52   ` Stefano Stabellini
2018-02-15 15:02 ` [PATCH v3 16/17] xen/arm: vpsci: Introduce and use PSCI_INVALID_ADDRESS Julien Grall
2018-02-21  0:53   ` Stefano Stabellini
2018-02-15 15:02 ` [PATCH v3 17/17] xen/arm: vpsci: Rework the logic to start AArch32 vCPU in Thumb mode Julien Grall
2018-02-21  0:59   ` Stefano Stabellini
2018-02-21 16:01   ` Andre Przywara

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83a77e71-c7b8-2e69-454c-89b1f60be65b@arm.com \
    --to=julien.grall@arm.com \
    --cc=andre.przywara@linaro.org \
    --cc=nd@arm.com \
    --cc=sstabellini@kernel.org \
    --cc=volodymyr_babchuk@epam.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).