From c5e6bc12a319d4500d931ca84d4227e4d7495956 Mon Sep 17 00:00:00 2001 From: Gagandeep Singh Date: Wed, 6 Oct 2021 22:31:31 +0530 Subject: [PATCH] common/dpaax: fix physical address conversion If some of the VA entries of table are somehow not populated and are NULL, it can add offset to NULL and return the invalid VA in PA to VA conversion. In this patch, adding a check if the VA entry has valid address only then add offset and return VA. Fixes: 2f3d633aa593 ("common/dpaax: add library for PA/VA translation table") Cc: stable@dpdk.org Signed-off-by: Gagandeep Singh Signed-off-by: Nipun Gupta Acked-by: Hemant Agrawal --- drivers/common/dpaax/dpaax_iova_table.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/common/dpaax/dpaax_iova_table.h b/drivers/common/dpaax/dpaax_iova_table.h index 230fba8ba0..b1f2300c52 100644 --- a/drivers/common/dpaax/dpaax_iova_table.h +++ b/drivers/common/dpaax/dpaax_iova_table.h @@ -1,5 +1,5 @@ /* SPDX-License-Identifier: BSD-3-Clause - * Copyright 2018 NXP + * Copyright 2018-2021 NXP */ #ifndef _DPAAX_IOVA_TABLE_H_ @@ -101,6 +101,12 @@ dpaax_iova_table_get_va(phys_addr_t paddr) { /* paddr > entry->start && paddr <= entry->(start+len) */ index = (paddr_align - entry[i].start)/DPAAX_MEM_SPLIT; + /* paddr is within range, but no vaddr entry ever written + * at index + */ + if ((void *)(uintptr_t)entry[i].pages[index] == NULL) + return NULL; + vaddr = (void *)((uintptr_t)entry[i].pages[index] + offset); break; } while (1); -- 2.20.1