Patch "firmware: arm_scmi: Fix possible scmi_linux_errmap buffer overflow" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    firmware: arm_scmi: Fix possible scmi_linux_errmap buffer overflow

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     firmware-arm_scmi-fix-possible-scmi_linux_errmap-buf.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 2800d6e4495adb4b9db72cc88dfa6bdfa592310f
Author: Sudeep Holla <sudeep.holla@xxxxxxx>
Date:   Wed Jul 7 14:50:28 2021 +0100

    firmware: arm_scmi: Fix possible scmi_linux_errmap buffer overflow
    
    [ Upstream commit 7a691f16ccad05d770f813d9c4b4337a30c6d63f ]
    
    The scmi_linux_errmap buffer access index is supposed to depend on the
    array size to prevent element out of bounds access. It uses SCMI_ERR_MAX
    to check bounds but that can mismatch with the array size. It also
    changes the success into -EIO though scmi_linux_errmap is never used in
    case of success, it is expected to work for success case too.
    
    It is slightly confusing code as the negative of the error code
    is used as index to the buffer. Fix it by negating it at the start and
    make it more readable.
    
    Link: https://lore.kernel.org/r/20210707135028.1869642-1-sudeep.holla@xxxxxxx
    Reported-by: kernel test robot <lkp@xxxxxxxxx>
    Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
    Reviewed-by: Cristian Marussi <cristian.marussi@xxxxxxx>
    Signed-off-by: Sudeep Holla <sudeep.holla@xxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
index 7b6903bad408..ba2e18d9e0e4 100644
--- a/drivers/firmware/arm_scmi/driver.c
+++ b/drivers/firmware/arm_scmi/driver.c
@@ -54,7 +54,6 @@ enum scmi_error_codes {
 	SCMI_ERR_GENERIC = -8,	/* Generic Error */
 	SCMI_ERR_HARDWARE = -9,	/* Hardware Error */
 	SCMI_ERR_PROTOCOL = -10,/* Protocol Error */
-	SCMI_ERR_MAX
 };
 
 /* List of all SCMI devices active in system */
@@ -176,8 +175,10 @@ static const int scmi_linux_errmap[] = {
 
 static inline int scmi_to_linux_errno(int errno)
 {
-	if (errno < SCMI_SUCCESS && errno > SCMI_ERR_MAX)
-		return scmi_linux_errmap[-errno];
+	int err_idx = -errno;
+
+	if (err_idx >= SCMI_SUCCESS && err_idx < ARRAY_SIZE(scmi_linux_errmap))
+		return scmi_linux_errmap[err_idx];
 	return -EIO;
 }
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux