From 382bf2e894e95c79014a0577a6d23196ecc64ed7 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Fri, 25 Aug 2017 13:33:07 -0700 Subject: [PATCH] env: Replace asserts with error code returns in vtophys Change-Id: Iffce947b4ccd13fd0747cdb9372fdb7587b1f5a2 Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/375828 Reviewed-by: Daniel Verkamp Reviewed-by: Jim Harris Tested-by: SPDK Automated Test System --- lib/env_dpdk/vtophys.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/lib/env_dpdk/vtophys.c b/lib/env_dpdk/vtophys.c index 99ca69d16..f2e18df94 100644 --- a/lib/env_dpdk/vtophys.c +++ b/lib/env_dpdk/vtophys.c @@ -314,8 +314,16 @@ spdk_mem_map_set_translation(struct spdk_mem_map *map, uint64_t vaddr, uint64_t uint16_t *ref_count; /* For now, only 2 MB-aligned registrations are supported */ - assert(size % (2 * 1024 * 1024) == 0); - assert((vaddr & MASK_2MB) == 0); + if ((uintptr_t)vaddr & ~MASK_128TB) { + DEBUG_PRINT("invalid usermode virtual address %lu\n", vaddr); + return -EINVAL; + } + + if (((uintptr_t)vaddr & MASK_2MB) || (size & MASK_2MB)) { + DEBUG_PRINT("invalid %s parameters, vaddr=%lu len=%ju\n", + __func__, vaddr, size); + return -EINVAL; + } vfn_2mb = vaddr >> SHIFT_2MB; @@ -357,8 +365,16 @@ spdk_mem_map_clear_translation(struct spdk_mem_map *map, uint64_t vaddr, uint64_ uint16_t *ref_count; /* For now, only 2 MB-aligned registrations are supported */ - assert(size % (2 * 1024 * 1024) == 0); - assert((vaddr & MASK_2MB) == 0); + if ((uintptr_t)vaddr & ~MASK_128TB) { + DEBUG_PRINT("invalid usermode virtual address %lu\n", vaddr); + return -EINVAL; + } + + if (((uintptr_t)vaddr & MASK_2MB) || (size & MASK_2MB)) { + DEBUG_PRINT("invalid %s parameters, vaddr=%lu len=%ju\n", + __func__, vaddr, size); + return -EINVAL; + } vfn_2mb = vaddr >> SHIFT_2MB;