]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
firmware: arm_ffa: Explicitly cast return value from FFA_VERSION before comparison
authorSudeep Holla <sudeep.holla@arm.com>
Fri, 21 Feb 2025 09:56:31 +0000 (09:56 +0000)
committerSudeep Holla <sudeep.holla@arm.com>
Fri, 21 Feb 2025 11:40:24 +0000 (11:40 +0000)
The return value ver.a0 is unsigned long type and FFA_RET_NOT_SUPPORTED
is a negative value.

Since the return value from the firmware can be just 32-bit even on
64-bit systems as FFA specification mentions it as int32 error code in
w0 register, explicitly casting to s32 ensures correct sign interpretation
when comparing against a signed error code FFA_RET_NOT_SUPPORTED.

Without casting, comparison between unsigned long and a negative
constant could lead to unintended results due to type promotions.

Fixes: 3bbfe9871005 ("firmware: arm_ffa: Add initial Arm FFA driver support")
Reported-by: Andrei Homescu <ahomescu@google.com>
Message-Id: <20250221095633.506678-1-sudeep.holla@arm.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
drivers/firmware/arm_ffa/driver.c

index f3ca703a44413b6394559c68b12fda6a75acadf0..7c288ae74f97c34e616edaef4e43d8e6562493d9 100644 (file)
@@ -144,7 +144,7 @@ static int ffa_version_check(u32 *version)
                      .a0 = FFA_VERSION, .a1 = FFA_DRIVER_VERSION,
                      }, &ver);
 
-       if (ver.a0 == FFA_RET_NOT_SUPPORTED) {
+       if ((s32)ver.a0 == FFA_RET_NOT_SUPPORTED) {
                pr_info("FFA_VERSION returned not supported\n");
                return -EOPNOTSUPP;
        }