[v2] eventdev/eth_tx: fix adapter create

Message ID 20220616051458.2197410-1-s.v.naga.harish.k@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Jerin Jacob
Headers
Series [v2] eventdev/eth_tx: fix adapter create |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/iol-mellanox-Performance success Performance Testing PASS
ci/intel-Testing success Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/github-robot: build fail github build: failed
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-abi-testing success Testing PASS

Commit Message

Naga Harish K, S V June 16, 2022, 5:14 a.m. UTC
  During adapter create, memory is allocated for storing event port
configuration which is freed during adapter free. The following
error is seen during free "EAL: Error: Invalid memory"

The service data pointer storage for txa_service_data_array is
allocated during adapter create with incorrect size which is less
than the required size.
Initialization of this memory causes buffer overflow and result in
metadata overwrite of event port config memory allocated above
and results in the above error message during free.

Allocating the correct size of memory for txa_service_data_array
prevents overwriting other memory areas like event port config
memory.

Fixes: a3bbf2e09756 ("eventdev: add eth Tx adapter implementation")
Cc: stable@dpdk.org

Signed-off-by: Naga Harish K S V <s.v.naga.harish.k@intel.com>
---
v2:
* fix commit message
---
 lib/eventdev/rte_event_eth_tx_adapter.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Jayatheerthan, Jay June 16, 2022, 5:57 a.m. UTC | #1
Looks good.

Acked-by: Jay Jayatheerthan <jay.jayatheerthan@intel.com>

-Jay



> -----Original Message-----
> From: Naga Harish K, S V <s.v.naga.harish.k@intel.com>
> Sent: Thursday, June 16, 2022 10:45 AM
> To: Naga Harish K, S V <s.v.naga.harish.k@intel.com>; Jayatheerthan, Jay <jay.jayatheerthan@intel.com>; jerinj@marvell.com
> Cc: dev@dpdk.org; stable@dpdk.org
> Subject: [PATCH v2] eventdev/eth_tx: fix adapter create
> 
> During adapter create, memory is allocated for storing event port
> configuration which is freed during adapter free. The following
> error is seen during free "EAL: Error: Invalid memory"
> 
> The service data pointer storage for txa_service_data_array is
> allocated during adapter create with incorrect size which is less
> than the required size.
> Initialization of this memory causes buffer overflow and result in
> metadata overwrite of event port config memory allocated above
> and results in the above error message during free.
> 
> Allocating the correct size of memory for txa_service_data_array
> prevents overwriting other memory areas like event port config
> memory.
> 
> Fixes: a3bbf2e09756 ("eventdev: add eth Tx adapter implementation")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Naga Harish K S V <s.v.naga.harish.k@intel.com>
> ---
> v2:
> * fix commit message
> ---
>  lib/eventdev/rte_event_eth_tx_adapter.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/lib/eventdev/rte_event_eth_tx_adapter.c b/lib/eventdev/rte_event_eth_tx_adapter.c
> index 1b304f0a73..c700fb7b1f 100644
> --- a/lib/eventdev/rte_event_eth_tx_adapter.c
> +++ b/lib/eventdev/rte_event_eth_tx_adapter.c
> @@ -224,7 +224,7 @@ txa_service_data_init(void)
>  	if (txa_service_data_array == NULL) {
>  		txa_service_data_array =
>  				txa_memzone_array_get("txa_service_data_array",
> -					sizeof(int),
> +					sizeof(*txa_service_data_array),
>  					RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE);
>  		if (txa_service_data_array == NULL)
>  			return -ENOMEM;
> --
> 2.25.1
  
Jerin Jacob June 20, 2022, 6:40 p.m. UTC | #2
On Thu, Jun 16, 2022 at 11:28 AM Jayatheerthan, Jay
<jay.jayatheerthan@intel.com> wrote:
>
> Looks good.
>
> Acked-by: Jay Jayatheerthan <jay.jayatheerthan@intel.com>


Applied to dpdk-next-net-eventdev/for-main. Thanks

>
> -Jay
>
>
>
> > -----Original Message-----
> > From: Naga Harish K, S V <s.v.naga.harish.k@intel.com>
> > Sent: Thursday, June 16, 2022 10:45 AM
> > To: Naga Harish K, S V <s.v.naga.harish.k@intel.com>; Jayatheerthan, Jay <jay.jayatheerthan@intel.com>; jerinj@marvell.com
> > Cc: dev@dpdk.org; stable@dpdk.org
> > Subject: [PATCH v2] eventdev/eth_tx: fix adapter create
> >
> > During adapter create, memory is allocated for storing event port
> > configuration which is freed during adapter free. The following
> > error is seen during free "EAL: Error: Invalid memory"
> >
> > The service data pointer storage for txa_service_data_array is
> > allocated during adapter create with incorrect size which is less
> > than the required size.
> > Initialization of this memory causes buffer overflow and result in
> > metadata overwrite of event port config memory allocated above
> > and results in the above error message during free.
> >
> > Allocating the correct size of memory for txa_service_data_array
> > prevents overwriting other memory areas like event port config
> > memory.
> >
> > Fixes: a3bbf2e09756 ("eventdev: add eth Tx adapter implementation")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Naga Harish K S V <s.v.naga.harish.k@intel.com>
> > ---
> > v2:
> > * fix commit message
> > ---
> >  lib/eventdev/rte_event_eth_tx_adapter.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/lib/eventdev/rte_event_eth_tx_adapter.c b/lib/eventdev/rte_event_eth_tx_adapter.c
> > index 1b304f0a73..c700fb7b1f 100644
> > --- a/lib/eventdev/rte_event_eth_tx_adapter.c
> > +++ b/lib/eventdev/rte_event_eth_tx_adapter.c
> > @@ -224,7 +224,7 @@ txa_service_data_init(void)
> >       if (txa_service_data_array == NULL) {
> >               txa_service_data_array =
> >                               txa_memzone_array_get("txa_service_data_array",
> > -                                     sizeof(int),
> > +                                     sizeof(*txa_service_data_array),
> >                                       RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE);
> >               if (txa_service_data_array == NULL)
> >                       return -ENOMEM;
> > --
> > 2.25.1
>
  

Patch

diff --git a/lib/eventdev/rte_event_eth_tx_adapter.c b/lib/eventdev/rte_event_eth_tx_adapter.c
index 1b304f0a73..c700fb7b1f 100644
--- a/lib/eventdev/rte_event_eth_tx_adapter.c
+++ b/lib/eventdev/rte_event_eth_tx_adapter.c
@@ -224,7 +224,7 @@  txa_service_data_init(void)
 	if (txa_service_data_array == NULL) {
 		txa_service_data_array =
 				txa_memzone_array_get("txa_service_data_array",
-					sizeof(int),
+					sizeof(*txa_service_data_array),
 					RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE);
 		if (txa_service_data_array == NULL)
 			return -ENOMEM;