firmware: arm_scpi: Prevent the ternary sign expansion bug
stable inclusion from linux-4.19.192 commit dcbce0b6f38476b380a0dec28e237d9398ca2bfe -------------------------------- [ Upstream commit d9cd78ed ] How the type promotion works in ternary expressions is a bit tricky. The problem is that scpi_clk_get_val() returns longs, "ret" is a int which holds a negative error code, and le32_to_cpu() is an unsigned int. We want the negative error code to be cast to a negative long. But because le32_to_cpu() is an u32 then "ret" is type promoted to u32 and becomes a high positive and then it is promoted to long and it is still a high positive value. Fix this by getting rid of the ternary. Link: https://lore.kernel.org/r/YIE7pdqV/h10tEAK@mwanda Fixes: 8cb7cf56 ("firmware: add support for ARM System Control and Power Interface(SCPI) protocol") Reviewed-by: NCristian Marussi <cristian.marussi@arm.com> Signed-off-by: NDan Carpenter <dan.carpenter@oracle.com> [sudeep.holla: changed to return 0 as clock rate on error] Signed-off-by: NSudeep Holla <sudeep.holla@arm.com> Signed-off-by: NSasha Levin <sashal@kernel.org> Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
Showing
想要评论请 注册 或 登录