[dpdk-dev] testpmd: fix crash when mempool allocation fails

Message ID 1473408985-13131-1-git-send-email-olivier.matz@6wind.com
State Superseded, archived
Headers show

Commit Message

Olivier Matz Sept. 9, 2016, 8:16 a.m.
Avoid access to mempool pointer if it is NULL.

Fixes: b19a0c75a0d4 ("app/testpmd: remove anonymous mempool code")
Coverity issue: 127553

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
---
 app/test-pmd/testpmd.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Yuanhan Liu Sept. 9, 2016, 8:25 a.m. | #1
On Fri, Sep 09, 2016 at 10:16:25AM +0200, Olivier Matz wrote:
> Avoid access to mempool pointer if it is NULL.
> 
> Fixes: b19a0c75a0d4 ("app/testpmd: remove anonymous mempool code")
> Coverity issue: 127553
> 
> Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
> ---
>  app/test-pmd/testpmd.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
> index 1428974..e0f8285 100644
> --- a/app/test-pmd/testpmd.c
> +++ b/app/test-pmd/testpmd.c
> @@ -444,10 +444,13 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
>  				mb_size, (unsigned) mb_mempool_cache,
>  				sizeof(struct rte_pktmbuf_pool_private),
>  				socket_id, 0);
> +			if (rte_mp == NULL)
> +				goto err;
>  
>  			if (rte_mempool_populate_anon(rte_mp) == 0) {
>  				rte_mempool_free(rte_mp);
>  				rte_mp = NULL;
> +				goto err;
>  			}
>  			rte_pktmbuf_pool_init(rte_mp, NULL);
>  			rte_mempool_obj_iter(rte_mp, rte_pktmbuf_init, NULL);
> @@ -458,6 +461,7 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
>  		}
>  	}
>  
> + err:

A minor nit: there is a heading white space char.

	--yliu

>  	if (rte_mp == NULL) {
>  		rte_exit(EXIT_FAILURE,
>  			"Creation of mbuf pool for socket %u failed: %s\n",
> -- 
> 2.8.1
Olivier Matz Sept. 9, 2016, 8:43 a.m. | #2
Hi Yuanhan,

On 09/09/2016 10:25 AM, Yuanhan Liu wrote:
> On Fri, Sep 09, 2016 at 10:16:25AM +0200, Olivier Matz wrote:
>> Avoid access to mempool pointer if it is NULL.
>>
>> Fixes: b19a0c75a0d4 ("app/testpmd: remove anonymous mempool code")
>> Coverity issue: 127553
>>
>> Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
>> ---
>>  app/test-pmd/testpmd.c | 4 ++++
>>  1 file changed, 4 insertions(+)
>>
>> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
>> index 1428974..e0f8285 100644
>> --- a/app/test-pmd/testpmd.c
>> +++ b/app/test-pmd/testpmd.c
>> @@ -444,10 +444,13 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
>>  				mb_size, (unsigned) mb_mempool_cache,
>>  				sizeof(struct rte_pktmbuf_pool_private),
>>  				socket_id, 0);
>> +			if (rte_mp == NULL)
>> +				goto err;
>>  
>>  			if (rte_mempool_populate_anon(rte_mp) == 0) {
>>  				rte_mempool_free(rte_mp);
>>  				rte_mp = NULL;
>> +				goto err;
>>  			}
>>  			rte_pktmbuf_pool_init(rte_mp, NULL);
>>  			rte_mempool_obj_iter(rte_mp, rte_pktmbuf_init, NULL);
>> @@ -458,6 +461,7 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
>>  		}
>>  	}
>>  
>> + err:
> 
> A minor nit: there is a heading white space char.
> 

Well, that's something I've been doing since a long time due to my
editor config, but I cannot find any good reason for doing that.

I'll send a v2 without this space (and fix my config for next times ;))

Olivier

Patch

diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 1428974..e0f8285 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -444,10 +444,13 @@  mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
 				mb_size, (unsigned) mb_mempool_cache,
 				sizeof(struct rte_pktmbuf_pool_private),
 				socket_id, 0);
+			if (rte_mp == NULL)
+				goto err;
 
 			if (rte_mempool_populate_anon(rte_mp) == 0) {
 				rte_mempool_free(rte_mp);
 				rte_mp = NULL;
+				goto err;
 			}
 			rte_pktmbuf_pool_init(rte_mp, NULL);
 			rte_mempool_obj_iter(rte_mp, rte_pktmbuf_init, NULL);
@@ -458,6 +461,7 @@  mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
 		}
 	}
 
+ err:
 	if (rte_mp == NULL) {
 		rte_exit(EXIT_FAILURE,
 			"Creation of mbuf pool for socket %u failed: %s\n",