From 4e8fc0099df5dc8280cb9e9a33359749866bb32a Mon Sep 17 00:00:00 2001 From: Jacob Chen Date: Tue, 15 Nov 2022 09:28:22 +0800 Subject: [PATCH] MALI: utgard: fix mali_mmap failed Validate vmf_insert_pfn return value with VM_FAULT_NOPAGE Signed-off-by: Jacob Chen Change-Id: I53b1eabd20ab76f08f5edf571ead1ffaccd19ec1 --- drivers/gpu/arm/mali400/mali/linux/mali_memory_cow.c | 6 +++--- drivers/gpu/arm/mali400/mali/linux/mali_memory_manager.c | 1 - drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.c | 6 +++--- drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.c | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_cow.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_cow.c index 0bdf90b167d6..b9de93ede394 100644 --- a/drivers/gpu/arm/mali400/mali/linux/mali_memory_cow.c +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_cow.c @@ -534,8 +534,8 @@ int mali_mem_cow_cpu_map(mali_mem_backend *mem_bkend, struct vm_area_struct *vma */ ret = vmf_insert_pfn(vma, addr, _mali_page_node_get_pfn(m_page)); - if (unlikely(0 != ret)) { - return ret; + if (unlikely(VM_FAULT_NOPAGE != ret)) { + return -EFAULT; } addr += _MALI_OSK_MALI_PAGE_SIZE; } @@ -571,7 +571,7 @@ _mali_osk_errcode_t mali_mem_cow_cpu_map_pages_locked(mali_mem_backend *mem_bken if ((count >= offset) && (count < offset + num)) { ret = vmf_insert_pfn(vma, vaddr, _mali_page_node_get_pfn(m_page)); - if (unlikely(0 != ret)) { + if (unlikely(VM_FAULT_NOPAGE != ret)) { if (count == offset) { return _MALI_OSK_ERR_FAULT; } else { diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_manager.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_manager.c index 27dee0f19c81..6c0a2e9a8a14 100644 --- a/drivers/gpu/arm/mali400/mali/linux/mali_memory_manager.c +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_manager.c @@ -592,7 +592,6 @@ failed_alloc_pages: failed_prepare_map: mali_mem_backend_struct_destory(&mem_backend, mali_allocation->backend_handle); failed_alloc_backend: - mali_vma_offset_remove(&session->allocation_mgr, &mali_allocation->mali_vma_node); mali_mem_allocation_struct_destory(mali_allocation); diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.c index 1e1f5eb4a0f7..9c8214ba3b8e 100755 --- a/drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.c +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.c @@ -367,7 +367,7 @@ int mali_mem_os_cpu_map(mali_mem_backend *mem_bkend, struct vm_area_struct *vma) page = m_page->page; ret = vmf_insert_pfn(vma, addr, page_to_pfn(page)); - if (unlikely(0 != ret)) { + if (unlikely(VM_FAULT_NOPAGE != ret)) { return -EFAULT; } addr += _MALI_OSK_MALI_PAGE_SIZE; @@ -405,7 +405,7 @@ _mali_osk_errcode_t mali_mem_os_resize_cpu_map_locked(mali_mem_backend *mem_bken if (mapping_page_num > 0) { ret = vmf_insert_pfn(vma, vm_end, page_to_pfn(m_page->page)); - if (unlikely(0 != ret)) { + if (unlikely(VM_FAULT_NOPAGE != ret)) { /*will return -EBUSY If the page has already been mapped into table, but it's OK*/ if (-EBUSY == ret) { break; @@ -428,7 +428,7 @@ _mali_osk_errcode_t mali_mem_os_resize_cpu_map_locked(mali_mem_backend *mem_bken ret = vmf_insert_pfn(vma, vstart, page_to_pfn(m_page->page)); - if (unlikely(0 != ret)) { + if (unlikely(VM_FAULT_NOPAGE != ret)) { /*will return -EBUSY If the page has already been mapped into table, but it's OK*/ if (-EBUSY == ret) { break; diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.c index 0b4f828680d0..63506bfbe9fe 100644 --- a/drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.c +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.c @@ -131,7 +131,7 @@ int mali_mem_secure_cpu_map(mali_mem_backend *mem_bkend, struct vm_area_struct * for (j = 0; j < size / _MALI_OSK_MALI_PAGE_SIZE; j++) { ret = vmf_insert_pfn(vma, addr, PFN_DOWN(phys)); - if (unlikely(0 != ret)) { + if (unlikely(VM_FAULT_NOPAGE != ret)) { return -EFAULT; } addr += _MALI_OSK_MALI_PAGE_SIZE;