drm/amd/display: Have risk for memory exhaustion
authorLongJun Tang <tanglongjun@kylinos.cn>
Fri, 4 Nov 2022 09:29:31 +0000 (17:29 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 9 Nov 2022 22:41:42 +0000 (17:41 -0500)
In dcn*_clock_source_create when dcn*_clk_src_construct fails allocated
clk_src needs release. A local attack could use this to cause memory
exhaustion.

Signed-off-by: LongJun Tang <tanglongjun@kylinos.cn>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c
drivers/gpu/drm/amd/display/dc/dcn301/dcn301_resource.c
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_resource.c
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_resource.c
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c
drivers/gpu/drm/amd/display/dc/dcn315/dcn315_resource.c
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c
drivers/gpu/drm/amd/display/dc/dcn321/dcn321_resource.c

index af4fe69..e057f8a 100644 (file)
@@ -1328,6 +1328,7 @@ static struct clock_source *dcn30_clock_source_create(
                return &clk_src->base;
        }
 
+       kfree(clk_src);
        BREAK_TO_DEBUGGER();
        return NULL;
 }
index f04595b..7c12250 100644 (file)
@@ -1288,6 +1288,7 @@ static struct clock_source *dcn301_clock_source_create(
                return &clk_src->base;
        }
 
+       kfree(clk_src);
        BREAK_TO_DEBUGGER();
        return NULL;
 }
index d394587..9ca7db0 100644 (file)
@@ -464,6 +464,7 @@ static struct clock_source *dcn302_clock_source_create(struct dc_context *ctx, s
                return &clk_src->base;
        }
 
+       kfree(clk_src);
        BREAK_TO_DEBUGGER();
        return NULL;
 }
index 7e7f18b..932c5d5 100644 (file)
@@ -431,6 +431,7 @@ static struct clock_source *dcn303_clock_source_create(struct dc_context *ctx, s
                return &clk_src->base;
        }
 
+       kfree(clk_src);
        BREAK_TO_DEBUGGER();
        return NULL;
 }
index 8f5e89c..15e73f4 100644 (file)
@@ -1629,6 +1629,7 @@ static struct clock_source *dcn31_clock_source_create(
                return &clk_src->base;
        }
 
+       kfree(clk_src);
        BREAK_TO_DEBUGGER();
        return NULL;
 }
index 96a3d41..2c68862 100644 (file)
@@ -1627,6 +1627,7 @@ static struct clock_source *dcn31_clock_source_create(
                return &clk_src->base;
        }
 
+       kfree(clk_src);
        BREAK_TO_DEBUGGER();
        return NULL;
 }
index 77e40ee..f7fea35 100644 (file)
@@ -830,6 +830,7 @@ static struct clock_source *dcn32_clock_source_create(
                return &clk_src->base;
        }
 
+       kfree(clk_src);
        BREAK_TO_DEBUGGER();
        return NULL;
 }
index e586122..d7d2c42 100644 (file)
@@ -829,6 +829,7 @@ static struct clock_source *dcn321_clock_source_create(
                return &clk_src->base;
        }
 
+       kfree(clk_src);
        BREAK_TO_DEBUGGER();
        return NULL;
 }