]> git.itanic.dy.fi Git - linux-stable/commitdiff
firmware: arm_ffa: Check xa_load() return value
authorCristian Marussi <cristian.marussi@arm.com>
Mon, 8 Jan 2024 12:34:13 +0000 (12:34 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 1 Feb 2024 00:21:19 +0000 (16:21 -0800)
[ Upstream commit c00d9738fd5fce15dc5494d05b7599dce23e8146 ]

Add a check to verify the result of xa_load() during the partition
lookups done while registering/unregistering the scheduler receiver
interrupt callbacks and while executing the main scheduler receiver
interrupt callback handler.

Fixes: 0184450b8b1e ("firmware: arm_ffa: Add schedule receiver callback mechanism")
Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
Link: https://lore.kernel.org/r/20240108-ffa_fixes_6-8-v1-3-75bf7035bc50@arm.com
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/firmware/arm_ffa/driver.c

index 8df92c9521f43fe2b715e1ae762414d6a09008bf..0ea1dd6e55c409e79179b89d0e65ba6a1a1536b0 100644 (file)
@@ -733,6 +733,11 @@ static void __do_sched_recv_cb(u16 part_id, u16 vcpu, bool is_per_vcpu)
        void *cb_data;
 
        partition = xa_load(&drv_info->partition_info, part_id);
+       if (!partition) {
+               pr_err("%s: Invalid partition ID 0x%x\n", __func__, part_id);
+               return;
+       }
+
        read_lock(&partition->rw_lock);
        callback = partition->callback;
        cb_data = partition->cb_data;
@@ -915,6 +920,11 @@ static int ffa_sched_recv_cb_update(u16 part_id, ffa_sched_recv_cb callback,
                return -EOPNOTSUPP;
 
        partition = xa_load(&drv_info->partition_info, part_id);
+       if (!partition) {
+               pr_err("%s: Invalid partition ID 0x%x\n", __func__, part_id);
+               return -EINVAL;
+       }
+
        write_lock(&partition->rw_lock);
 
        cb_valid = !!partition->callback;