| From foo@baz Fri 08 Nov 2019 02:08:46 PM CET |
| From: Ard Biesheuvel <ardb@kernel.org> |
| Date: Fri, 8 Nov 2019 13:35:16 +0100 |
| Subject: arm/arm64: smccc: Make function identifiers an unsigned quantity |
| To: stable@vger.kernel.org |
| Cc: linus.walleij@linaro.org, rmk+kernel@armlinux.org.uk, Mark Rutland <mark.rutland@arm.com>, Ard Biesheuvel <ardb@kernel.org> |
| Message-ID: <20191108123554.29004-13-ardb@kernel.org> |
| |
| From: Marc Zyngier <marc.zyngier@arm.com> |
| |
| commit ded4c39e93f3b72968fdb79baba27f3b83dad34c upstream. |
| |
| Function identifiers are a 32bit, unsigned quantity. But we never |
| tell so to the compiler, resulting in the following: |
| |
| 4ac: b26187e0 mov x0, #0xffffffff80000001 |
| |
| We thus rely on the firmware narrowing it for us, which is not |
| always a reasonable expectation. |
| |
| Cc: stable@vger.kernel.org |
| Reported-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> |
| Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> |
| Reviewed-by: Robin Murphy <robin.murphy@arm.com> |
| Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> |
| Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> |
| Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> |
| Signed-off-by: Mark Rutland <mark.rutland@arm.com> [v4.9 backport] |
| Tested-by: Greg Hackmann <ghackmann@google.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Ard Biesheuvel <ardb@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| include/linux/arm-smccc.h | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/include/linux/arm-smccc.h |
| +++ b/include/linux/arm-smccc.h |
| @@ -14,14 +14,16 @@ |
| #ifndef __LINUX_ARM_SMCCC_H |
| #define __LINUX_ARM_SMCCC_H |
| |
| +#include <uapi/linux/const.h> |
| + |
| /* |
| * This file provides common defines for ARM SMC Calling Convention as |
| * specified in |
| * http://infocenter.arm.com/help/topic/com.arm.doc.den0028a/index.html |
| */ |
| |
| -#define ARM_SMCCC_STD_CALL 0 |
| -#define ARM_SMCCC_FAST_CALL 1 |
| +#define ARM_SMCCC_STD_CALL _AC(0,U) |
| +#define ARM_SMCCC_FAST_CALL _AC(1,U) |
| #define ARM_SMCCC_TYPE_SHIFT 31 |
| |
| #define ARM_SMCCC_SMC_32 0 |