[dpdk-dev] lib/lib_eal:fix the pointer 'elem' may be NULL bug

Message ID 201706280921.v5S9L22K090306@mse01.zte.com.cn (mailing list archive)
State Rejected, archived
Delegated to: Thomas Monjalon
Headers

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/Intel-compilation fail apply issues

Commit Message

Xie RongQiang June 28, 2017, 8:12 a.m. UTC
  Signed-off-by: RongQiang Xie <xie.rongqiang@zte.com.cn>
---
 lib/librte_eal/common/eal_common_memzone.c | 6 ++++++
 1 file changed, 6 insertions(+)
 mode change 100644 => 100755 lib/librte_eal/common/eal_common_memzone.c
  

Comments

Sergio Gonzalez Monroy June 28, 2017, 10:06 a.m. UTC | #1
On 28/06/2017 09:12, RongQiang Xie wrote:
> Signed-off-by: RongQiang Xie <xie.rongqiang@zte.com.cn>
> ---
>   lib/librte_eal/common/eal_common_memzone.c | 6 ++++++
>   1 file changed, 6 insertions(+)
>   mode change 100644 => 100755 lib/librte_eal/common/eal_common_memzone.c
>
> diff --git a/lib/librte_eal/common/eal_common_memzone.c b/lib/librte_eal/common/eal_common_memzone.c
> old mode 100644
> new mode 100755
> index 3026e36..8ea781b
> --- a/lib/librte_eal/common/eal_common_memzone.c
> +++ b/lib/librte_eal/common/eal_common_memzone.c
> @@ -238,6 +238,12 @@
>   	}
>   
>   	const struct malloc_elem *elem = malloc_elem_from_data(mz_addr);
> +	
> +	if (elem == NULL) {
> +	    RTE_LOG(ERR, EAL, "%s(): Cannot malloc elem from data \n", __func__);
> +		rte_errno = ENOSPC;
> +		return NULL;
> +	}
>   
>   	/* fill the zone in config */
>   	mz = get_next_free_memzone();

Hi,

Could you elaborate how do you trigger this error?

The only way you are getting NULL from malloc_elem_from_data is:
A) data is NULL, which cannot be the case as we previously check for it
B) cookies failure id you have DEBUG enabled, otherwise elem would have 
to be NULL

Thanks,
Sergio
  

Patch

diff --git a/lib/librte_eal/common/eal_common_memzone.c b/lib/librte_eal/common/eal_common_memzone.c
old mode 100644
new mode 100755
index 3026e36..8ea781b
--- a/lib/librte_eal/common/eal_common_memzone.c
+++ b/lib/librte_eal/common/eal_common_memzone.c
@@ -238,6 +238,12 @@ 
 	}
 
 	const struct malloc_elem *elem = malloc_elem_from_data(mz_addr);
+	
+	if (elem == NULL) {
+	    RTE_LOG(ERR, EAL, "%s(): Cannot malloc elem from data \n", __func__);
+		rte_errno = ENOSPC;
+		return NULL;
+	}
 
 	/* fill the zone in config */
 	mz = get_next_free_memzone();