From 88e27271ebb8faf498c0637097735be09bc8b450 Mon Sep 17 00:00:00 2001 From: sagar Date: Tue, 25 Feb 2020 14:42:43 +0530 Subject: [PATCH] gpu: nvgpu: fix static analysis issues coverity tool is not detecting the lenght validation done at caller. moved length checks to appropriate functions. used macro instead of hardcoded values. Jira NVGPU-4780 Change-Id: Ie6b420a6e625eed5374715fd7ca5c87d3ba3d015 Signed-off-by: sagar Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2302335 Tested-by: mobile promotions Reviewed-by: Deepak Nibade Reviewed-by: mobile promotions --- drivers/gpu/nvgpu/common/mm/vm.c | 27 ++++++++++++++++++--------- drivers/gpu/nvgpu/include/nvgpu/vm.h | 2 +- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/nvgpu/common/mm/vm.c b/drivers/gpu/nvgpu/common/mm/vm.c index c166add93..9b38f1b64 100644 --- a/drivers/gpu/nvgpu/common/mm/vm.c +++ b/drivers/gpu/nvgpu/common/mm/vm.c @@ -443,7 +443,15 @@ static int nvgpu_vm_init_user_lp_vma(struct gk20a *g, struct vm_gk20a *vm, const char *name) { int err = 0; - char alloc_name[32]; + char alloc_name[NVGPU_VM_NAME_LEN]; + size_t name_len; + + name_len = strlen("gk20a_") + strlen(name) + strlen("_lp"); + if (name_len >= NVGPU_VM_NAME_LEN) { + nvgpu_err(g, "Invalid MAX_NAME_SIZE %lu %u", name_len, + NVGPU_VM_NAME_LEN); + return -EINVAL; + } /* * User VMA for large pages when a split address range is used. @@ -473,7 +481,15 @@ static int nvgpu_vm_init_kernel_vma(struct gk20a *g, struct vm_gk20a *vm, u64 kernel_vma_flags, const char *name) { int err = 0; - char alloc_name[32]; + char alloc_name[NVGPU_VM_NAME_LEN]; + size_t name_len; + + name_len = strlen("gk20a_") + strlen(name) + strlen("-sys"); + if (name_len >= NVGPU_VM_NAME_LEN) { + nvgpu_err(g, "Invalid MAX_NAME_SIZE %lu %u", name_len, + NVGPU_VM_NAME_LEN); + return -EINVAL; + } /* * Kernel VMA. @@ -505,13 +521,6 @@ static int nvgpu_vm_init_vma_allocators(struct gk20a *g, struct vm_gk20a *vm, u64 kernel_vma_flags, const char *name) { int err = 0; - size_t name_len; - - name_len = strlen("gk20a_") + strlen(name); - if (name_len >= 32U) { - nvgpu_err(g, "Invalid MAX_NAME_SIZE %lu %u", name_len, 32U); - return -EINVAL; - } err = nvgpu_vm_init_user_vma(g, vm, user_vma_start, user_vma_limit, name); diff --git a/drivers/gpu/nvgpu/include/nvgpu/vm.h b/drivers/gpu/nvgpu/include/nvgpu/vm.h index f3452d24c..7fd9d3cbe 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/vm.h +++ b/drivers/gpu/nvgpu/include/nvgpu/vm.h @@ -97,7 +97,7 @@ struct nvgpu_os_buffer; #include #endif -#define NVGPU_VM_NAME_LEN 20U +#define NVGPU_VM_NAME_LEN 32U /** * This structure describes the properties of batch mapping/unmapping.