[dpdk-dev] testpmd: fix crash when mempool allocation fails
Commit Message
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
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
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
@@ -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",