From bc2ee543013ced030bdf2fabebd6cdbaa09202d0 Mon Sep 17 00:00:00 2001 From: Vedashree Vidwans Date: Wed, 6 Mar 2019 15:19:38 -0800 Subject: [PATCH] gpu: nvgpu: Add check for invalid nvgpu_aperture Currently, in nvgpu_aperture_mask_raw function, if NVGPU_MM_HONORS_APERTURE flag is disabled, invalid or junk aperture input is changed to APERTURE_VIDMEM instead of raising a warning.To resolve this bug, need to check if input aperture is APERTURE_INVALID or undefined. This patch adds APERTURE_MAX_ENUM to nvgpu_aperture structure which gives upperbound of nvgpu_aperture types. This patch also adds condition in nvgpu_aperture_mask_raw function to check for invalid or undefined aperture input. For invalid inputs, function will BUG(). Jira NVGPU-2933 Change-Id: Ic9d260250e3083d693f025c6e32657f6a863aafb Signed-off-by: Vedashree Vidwans Reviewed-on: https://git-master.nvidia.com/r/2034281 Reviewed-by: Philip Elcan GVS: Gerrit_Virtual_Submit Reviewed-by: Alex Waterman Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/mm/nvgpu_mem.c | 8 +++++++- drivers/gpu/nvgpu/include/nvgpu/nvgpu_mem.h | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/nvgpu/common/mm/nvgpu_mem.c b/drivers/gpu/nvgpu/common/mm/nvgpu_mem.c index 2813f754b..d7f16e98d 100644 --- a/drivers/gpu/nvgpu/common/mm/nvgpu_mem.c +++ b/drivers/gpu/nvgpu/common/mm/nvgpu_mem.c @@ -38,6 +38,10 @@ u32 nvgpu_aperture_mask_raw(struct gk20a *g, enum nvgpu_aperture aperture, u32 sysmem_mask, u32 sysmem_coh_mask, u32 vidmem_mask) { + if ((aperture == APERTURE_INVALID) || (aperture >= APERTURE_MAX_ENUM)) { + nvgpu_do_assert_print(g, "Bad aperture"); + return 0; + } /* * Some iGPUs treat sysmem (i.e SoC DRAM) as vidmem. In these cases the * "sysmem" aperture should really be translated to VIDMEM. @@ -54,9 +58,11 @@ u32 nvgpu_aperture_mask_raw(struct gk20a *g, enum nvgpu_aperture aperture, case APERTURE_VIDMEM: return vidmem_mask; case APERTURE_INVALID: + case APERTURE_MAX_ENUM: + default: nvgpu_do_assert_print(g, "Bad aperture"); + return 0; } - return 0; } u32 nvgpu_aperture_mask(struct gk20a *g, struct nvgpu_mem *mem, diff --git a/drivers/gpu/nvgpu/include/nvgpu/nvgpu_mem.h b/drivers/gpu/nvgpu/include/nvgpu/nvgpu_mem.h index 639d01967..2b7c2ad99 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/nvgpu_mem.h +++ b/drivers/gpu/nvgpu/include/nvgpu/nvgpu_mem.h @@ -58,7 +58,9 @@ enum nvgpu_aperture { /* Don't use directly. Use APERTURE_SYSMEM, this is used internally. */ APERTURE_SYSMEM_COH, - APERTURE_VIDMEM + APERTURE_VIDMEM, + /* This should always be last in the list */ + APERTURE_MAX_ENUM }; struct nvgpu_mem { @@ -157,6 +159,8 @@ static inline const char *nvgpu_aperture_str(struct gk20a *g, return "SYSCOH"; case APERTURE_VIDMEM: return "VIDMEM"; + case APERTURE_MAX_ENUM: + return "UNKNOWN"; }; return "UNKNOWN"; }