From: Alex Hung <alex.h...@amd.com>

[ Upstream commit 2a5626eeb3b5eec7a36886f9556113dd93ec8ed6 ]

[WHY & HOW]
GPIO_ID_UNKNOWN (-1) is not a valid value for array index and therefore
should be checked in advance.

This fixes 5 OVERRUN issues reported by Coverity.

Reviewed-by: Harry Wentland <harry.wentl...@amd.com>
Acked-by: Tom Chung <chiahsuan.ch...@amd.com>
Signed-off-by: Alex Hung <alex.h...@amd.com>
Tested-by: Daniel Wheeler <daniel.whee...@amd.com>
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c 
b/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c
index 0be817f8cae6b..f76ec0dd29e7b 100644
--- a/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c
+++ b/drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c
@@ -242,6 +242,9 @@ static bool is_pin_busy(
        enum gpio_id id,
        uint32_t en)
 {
+       if (id == GPIO_ID_UNKNOWN)
+               return false;
+
        return service->busyness[id][en];
 }
 
@@ -250,6 +253,9 @@ static void set_pin_busy(
        enum gpio_id id,
        uint32_t en)
 {
+       if (id == GPIO_ID_UNKNOWN)
+               return;
+
        service->busyness[id][en] = true;
 }
 
@@ -258,6 +264,9 @@ static void set_pin_free(
        enum gpio_id id,
        uint32_t en)
 {
+       if (id == GPIO_ID_UNKNOWN)
+               return;
+
        service->busyness[id][en] = false;
 }
 
@@ -266,7 +275,7 @@ enum gpio_result dal_gpio_service_lock(
        enum gpio_id id,
        uint32_t en)
 {
-       if (!service->busyness[id]) {
+       if (id != GPIO_ID_UNKNOWN && !service->busyness[id]) {
                ASSERT_CRITICAL(false);
                return GPIO_RESULT_OPEN_FAILED;
        }
@@ -280,7 +289,7 @@ enum gpio_result dal_gpio_service_unlock(
        enum gpio_id id,
        uint32_t en)
 {
-       if (!service->busyness[id]) {
+       if (id != GPIO_ID_UNKNOWN && !service->busyness[id]) {
                ASSERT_CRITICAL(false);
                return GPIO_RESULT_OPEN_FAILED;
        }
-- 
2.43.0

Reply via email to