From 475333c8a9bf027dfb64dff7fe61fd0729548d2a Mon Sep 17 00:00:00 2001 From: Jeremy Linton Date: Thu, 1 Apr 2021 13:10:24 -0500 Subject: [PATCH] SMCCC: Hoist SMC_32 sanitization The SMCCC, part 3 indicates that only the bottom 32-bits of a 32-bit SMC call are valid. The upper bits must be zero. Lets enforce that so standard service code can assume its been called that way. Signed-off-by: Jeremy Linton Change-Id: I1bac50fbdc3b6ddca5fe2d1d1f96166a65ac4eb4 --- services/std_svc/std_svc_setup.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/services/std_svc/std_svc_setup.c b/services/std_svc/std_svc_setup.c index 23f13ab82..540bb86a9 100644 --- a/services/std_svc/std_svc_setup.c +++ b/services/std_svc/std_svc_setup.c @@ -82,6 +82,15 @@ static uintptr_t std_svc_smc_handler(uint32_t smc_fid, void *handle, u_register_t flags) { + if (((smc_fid >> FUNCID_CC_SHIFT) & FUNCID_CC_MASK) == SMC_32) { + /* 32-bit SMC function, clear top parameter bits */ + + x1 &= UINT32_MAX; + x2 &= UINT32_MAX; + x3 &= UINT32_MAX; + x4 &= UINT32_MAX; + } + /* * Dispatch PSCI calls to PSCI SMC handler and return its return * value -- GitLab