* [PATCH] drm/amd/display: Fix null pointer deref in dcn20_resource.c
@ 2024-06-26 17:16 Aurabindo Pillai
2024-06-26 18:56 ` Rodrigo Siqueira Jordao
0 siblings, 1 reply; 2+ messages in thread
From: Aurabindo Pillai @ 2024-06-26 17:16 UTC (permalink / raw)
To: amd-gfx; +Cc: rodrigo.siqueira, harry.wentland, aurabindo.pillai
Fixes a hang that has the following calltrace:
[ 181.843989] BUG: kernel NULL pointer dereference, address: 0000000000000000
[ 181.843997] #PF: supervisor instruction fetch in kernel mode
[ 181.844003] #PF: error_code(0x0010) - not-present page
[ 181.844009] PGD 0 P4D 0
[ 181.844020] Oops: 0010 [#1] PREEMPT SMP NOPTI
[ 181.844028] CPU: 6 PID: 1892 Comm: gnome-shell Tainted: G W OE 6.5.0-41-generic #41~22.04.2-Ubuntu
[ 181.844038] Hardware name: System manufacturer System Product Name/CROSSHAIR VI HERO, BIOS 6302 10/23/2018
[ 181.844044] RIP: 0010:0x0
[ 181.844079] Code: Unable to access opcode bytes at 0xffffffffffffffd6.
[ 181.844084] RSP: 0018:ffffb593c2b8f7b0 EFLAGS: 00010246
[ 181.844093] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000004
[ 181.844099] RDX: ffffb593c2b8f804 RSI: ffffb593c2b8f7e0 RDI: ffff9e3c8e758400
[ 181.844105] RBP: ffffb593c2b8f7b8 R08: ffffb593c2b8f9c8 R09: ffffb593c2b8f96c
[ 181.844110] R10: 0000000000000000 R11: 0000000000000000 R12: ffffb593c2b8f9c8
[ 181.844115] R13: 0000000000000001 R14: ffff9e3c88000000 R15: 0000000000000005
[ 181.844121] FS: 00007c6e323bb5c0(0000) GS:ffff9e3f85f80000(0000) knlGS:0000000000000000
[ 181.844128] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 181.844134] CR2: ffffffffffffffd6 CR3: 0000000140fbe000 CR4: 00000000003506e0
[ 181.844141] Call Trace:
[ 181.844146] <TASK>
[ 181.844153] ? show_regs+0x6d/0x80
[ 181.844167] ? __die+0x24/0x80
[ 181.844179] ? page_fault_oops+0x99/0x1b0
[ 181.844192] ? do_user_addr_fault+0x31d/0x6b0
[ 181.844204] ? exc_page_fault+0x83/0x1b0
[ 181.844216] ? asm_exc_page_fault+0x27/0x30
[ 181.844237] dcn20_get_dcc_compression_cap+0x23/0x30 [amdgpu]
[ 181.845115] amdgpu_dm_plane_validate_dcc.constprop.0+0xe5/0x180 [amdgpu]
[ 181.845985] amdgpu_dm_plane_fill_plane_buffer_attributes+0x300/0x580 [amdgpu]
[ 181.846848] fill_dc_plane_info_and_addr+0x258/0x350 [amdgpu]
[ 181.847734] fill_dc_plane_attributes+0x162/0x350 [amdgpu]
[ 181.848748] dm_update_plane_state.constprop.0+0x4e3/0x6b0 [amdgpu]
[ 181.849791] ? dm_update_plane_state.constprop.0+0x4e3/0x6b0 [amdgpu]
[ 181.850840] amdgpu_dm_atomic_check+0xdfe/0x1760 [amdgpu]
Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
---
.../drm/amd/display/dc/resource/dcn20/dcn20_resource.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn20/dcn20_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn20/dcn20_resource.c
index e783afbbb397..645927496807 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn20/dcn20_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn20/dcn20_resource.c
@@ -2200,10 +2200,11 @@ bool dcn20_get_dcc_compression_cap(const struct dc *dc,
const struct dc_dcc_surface_param *input,
struct dc_surface_dcc_cap *output)
{
- return dc->res_pool->hubbub->funcs->get_dcc_compression_cap(
- dc->res_pool->hubbub,
- input,
- output);
+ if (dc->res_pool->hubbub->funcs->get_dcc_compression_cap)
+ return dc->res_pool->hubbub->funcs->get_dcc_compression_cap(
+ dc->res_pool->hubbub, input, output);
+ else
+ return false;
}
static void dcn20_destroy_resource_pool(struct resource_pool **pool)
--
2.45.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] drm/amd/display: Fix null pointer deref in dcn20_resource.c
2024-06-26 17:16 [PATCH] drm/amd/display: Fix null pointer deref in dcn20_resource.c Aurabindo Pillai
@ 2024-06-26 18:56 ` Rodrigo Siqueira Jordao
0 siblings, 0 replies; 2+ messages in thread
From: Rodrigo Siqueira Jordao @ 2024-06-26 18:56 UTC (permalink / raw)
To: Aurabindo Pillai, amd-gfx; +Cc: harry.wentland
On 6/26/24 11:16 AM, Aurabindo Pillai wrote:
> Fixes a hang that has the following calltrace:
>
> [ 181.843989] BUG: kernel NULL pointer dereference, address: 0000000000000000
> [ 181.843997] #PF: supervisor instruction fetch in kernel mode
> [ 181.844003] #PF: error_code(0x0010) - not-present page
> [ 181.844009] PGD 0 P4D 0
> [ 181.844020] Oops: 0010 [#1] PREEMPT SMP NOPTI
> [ 181.844028] CPU: 6 PID: 1892 Comm: gnome-shell Tainted: G W OE 6.5.0-41-generic #41~22.04.2-Ubuntu
> [ 181.844038] Hardware name: System manufacturer System Product Name/CROSSHAIR VI HERO, BIOS 6302 10/23/2018
> [ 181.844044] RIP: 0010:0x0
> [ 181.844079] Code: Unable to access opcode bytes at 0xffffffffffffffd6.
> [ 181.844084] RSP: 0018:ffffb593c2b8f7b0 EFLAGS: 00010246
> [ 181.844093] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000004
> [ 181.844099] RDX: ffffb593c2b8f804 RSI: ffffb593c2b8f7e0 RDI: ffff9e3c8e758400
> [ 181.844105] RBP: ffffb593c2b8f7b8 R08: ffffb593c2b8f9c8 R09: ffffb593c2b8f96c
> [ 181.844110] R10: 0000000000000000 R11: 0000000000000000 R12: ffffb593c2b8f9c8
> [ 181.844115] R13: 0000000000000001 R14: ffff9e3c88000000 R15: 0000000000000005
> [ 181.844121] FS: 00007c6e323bb5c0(0000) GS:ffff9e3f85f80000(0000) knlGS:0000000000000000
> [ 181.844128] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [ 181.844134] CR2: ffffffffffffffd6 CR3: 0000000140fbe000 CR4: 00000000003506e0
> [ 181.844141] Call Trace:
> [ 181.844146] <TASK>
> [ 181.844153] ? show_regs+0x6d/0x80
> [ 181.844167] ? __die+0x24/0x80
> [ 181.844179] ? page_fault_oops+0x99/0x1b0
> [ 181.844192] ? do_user_addr_fault+0x31d/0x6b0
> [ 181.844204] ? exc_page_fault+0x83/0x1b0
> [ 181.844216] ? asm_exc_page_fault+0x27/0x30
> [ 181.844237] dcn20_get_dcc_compression_cap+0x23/0x30 [amdgpu]
> [ 181.845115] amdgpu_dm_plane_validate_dcc.constprop.0+0xe5/0x180 [amdgpu]
> [ 181.845985] amdgpu_dm_plane_fill_plane_buffer_attributes+0x300/0x580 [amdgpu]
> [ 181.846848] fill_dc_plane_info_and_addr+0x258/0x350 [amdgpu]
> [ 181.847734] fill_dc_plane_attributes+0x162/0x350 [amdgpu]
> [ 181.848748] dm_update_plane_state.constprop.0+0x4e3/0x6b0 [amdgpu]
> [ 181.849791] ? dm_update_plane_state.constprop.0+0x4e3/0x6b0 [amdgpu]
> [ 181.850840] amdgpu_dm_atomic_check+0xdfe/0x1760 [amdgpu]
Hi Jay,
Could you elaborate a little bit more on how to trigger this issue in
the commit message?
>
> Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
> ---
> .../drm/amd/display/dc/resource/dcn20/dcn20_resource.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn20/dcn20_resource.c b/drivers/gpu/drm/amd/display/dc/resource/dcn20/dcn20_resource.c
> index e783afbbb397..645927496807 100644
> --- a/drivers/gpu/drm/amd/display/dc/resource/dcn20/dcn20_resource.c
> +++ b/drivers/gpu/drm/amd/display/dc/resource/dcn20/dcn20_resource.c
> @@ -2200,10 +2200,11 @@ bool dcn20_get_dcc_compression_cap(const struct dc *dc,
> const struct dc_dcc_surface_param *input,
> struct dc_surface_dcc_cap *output)
> {
> - return dc->res_pool->hubbub->funcs->get_dcc_compression_cap(
> - dc->res_pool->hubbub,
> - input,
> - output);
> + if (dc->res_pool->hubbub->funcs->get_dcc_compression_cap)
> + return dc->res_pool->hubbub->funcs->get_dcc_compression_cap(
> + dc->res_pool->hubbub, input, output);
How about drop the 'else' and just return false?
Thanks
Siqueira
> + else
> + return false;
> }
>
> static void dcn20_destroy_resource_pool(struct resource_pool **pool)
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-06-26 18:56 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-26 17:16 [PATCH] drm/amd/display: Fix null pointer deref in dcn20_resource.c Aurabindo Pillai
2024-06-26 18:56 ` Rodrigo Siqueira Jordao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox