AMD-GFX Archive mirror
 help / color / mirror / Atom feed
* [PATCH v3] drm/amdgpu: Fix potential out-of-bounds access in 'amdgpu_discovery_reg_base_init()'
@ 2024-02-02 15:46 Srinivasan Shanmugam
  2024-02-02 17:00 ` Alex Deucher
  0 siblings, 1 reply; 2+ messages in thread
From: Srinivasan Shanmugam @ 2024-02-02 15:46 UTC (permalink / raw
  To: Alex Deucher, Christian König; +Cc: amd-gfx, Srinivasan Shanmugam

The issue arises when the array 'adev->vcn.vcn_config' is accessed
before checking if the index 'adev->vcn.num_vcn_inst' is within the
bounds of the array.

The fix involves moving the bounds check before the array access. This
ensures that 'adev->vcn.num_vcn_inst' is within the bounds of the array
before it is used as an index.

Fixes the below:
drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c:1289 amdgpu_discovery_reg_base_init() error: testing array offset 'adev->vcn.num_vcn_inst' after use.

Fixes: aaf1090a6cb6 ("drm/amdgpu: Add instance mask for VCN and JPEG")
Cc: Christian König <christian.koenig@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
---
v3:
 - Added fixes tag. 

 drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
index ef800590c1ab..93c84a1c1d3e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
@@ -1282,11 +1282,10 @@ static int amdgpu_discovery_reg_base_init(struct amdgpu_device *adev)
 				 *     0b10 : encode is disabled
 				 *     0b01 : decode is disabled
 				 */
-				adev->vcn.vcn_config[adev->vcn.num_vcn_inst] =
-					ip->revision & 0xc0;
-				ip->revision &= ~0xc0;
 				if (adev->vcn.num_vcn_inst <
 				    AMDGPU_MAX_VCN_INSTANCES) {
+					adev->vcn.vcn_config[adev->vcn.num_vcn_inst] =
+						ip->revision & 0xc0;
 					adev->vcn.num_vcn_inst++;
 					adev->vcn.inst_mask |=
 						(1U << ip->instance_number);
@@ -1297,6 +1296,7 @@ static int amdgpu_discovery_reg_base_init(struct amdgpu_device *adev)
 						adev->vcn.num_vcn_inst + 1,
 						AMDGPU_MAX_VCN_INSTANCES);
 				}
+				ip->revision &= ~0xc0;
 			}
 			if (le16_to_cpu(ip->hw_id) == SDMA0_HWID ||
 			    le16_to_cpu(ip->hw_id) == SDMA1_HWID ||
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v3] drm/amdgpu: Fix potential out-of-bounds access in 'amdgpu_discovery_reg_base_init()'
  2024-02-02 15:46 [PATCH v3] drm/amdgpu: Fix potential out-of-bounds access in 'amdgpu_discovery_reg_base_init()' Srinivasan Shanmugam
@ 2024-02-02 17:00 ` Alex Deucher
  0 siblings, 0 replies; 2+ messages in thread
From: Alex Deucher @ 2024-02-02 17:00 UTC (permalink / raw
  To: Srinivasan Shanmugam; +Cc: Alex Deucher, Christian König, amd-gfx

On Fri, Feb 2, 2024 at 10:53 AM Srinivasan Shanmugam
<srinivasan.shanmugam@amd.com> wrote:
>
> The issue arises when the array 'adev->vcn.vcn_config' is accessed
> before checking if the index 'adev->vcn.num_vcn_inst' is within the
> bounds of the array.
>
> The fix involves moving the bounds check before the array access. This
> ensures that 'adev->vcn.num_vcn_inst' is within the bounds of the array
> before it is used as an index.
>
> Fixes the below:
> drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c:1289 amdgpu_discovery_reg_base_init() error: testing array offset 'adev->vcn.num_vcn_inst' after use.
>
> Fixes: aaf1090a6cb6 ("drm/amdgpu: Add instance mask for VCN and JPEG")

This tag is not correct.  I think it's actually:
Fixes: a0ccc717c4ab ("drm/amdgpu/discovery: validate VCN and SDMA instances")

With that fixed, the patch is:
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

> Cc: Christian König <christian.koenig@amd.com>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
> ---
> v3:
>  - Added fixes tag.
>
>  drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
> index ef800590c1ab..93c84a1c1d3e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
> @@ -1282,11 +1282,10 @@ static int amdgpu_discovery_reg_base_init(struct amdgpu_device *adev)
>                                  *     0b10 : encode is disabled
>                                  *     0b01 : decode is disabled
>                                  */
> -                               adev->vcn.vcn_config[adev->vcn.num_vcn_inst] =
> -                                       ip->revision & 0xc0;
> -                               ip->revision &= ~0xc0;
>                                 if (adev->vcn.num_vcn_inst <
>                                     AMDGPU_MAX_VCN_INSTANCES) {
> +                                       adev->vcn.vcn_config[adev->vcn.num_vcn_inst] =
> +                                               ip->revision & 0xc0;
>                                         adev->vcn.num_vcn_inst++;
>                                         adev->vcn.inst_mask |=
>                                                 (1U << ip->instance_number);
> @@ -1297,6 +1296,7 @@ static int amdgpu_discovery_reg_base_init(struct amdgpu_device *adev)
>                                                 adev->vcn.num_vcn_inst + 1,
>                                                 AMDGPU_MAX_VCN_INSTANCES);
>                                 }
> +                               ip->revision &= ~0xc0;
>                         }
>                         if (le16_to_cpu(ip->hw_id) == SDMA0_HWID ||
>                             le16_to_cpu(ip->hw_id) == SDMA1_HWID ||
> --
> 2.34.1
>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-02-02 17:00 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-02 15:46 [PATCH v3] drm/amdgpu: Fix potential out-of-bounds access in 'amdgpu_discovery_reg_base_init()' Srinivasan Shanmugam
2024-02-02 17:00 ` Alex Deucher

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).