diff mbox

validation: pktio: don't call APIs with an invalid pktio handle

Message ID 1444755947-13418-1-git-send-email-stuart.haslam@linaro.org
State Accepted
Commit 596e0856169692956bd86554ceac78b7ec372ac3
Headers show

Commit Message

Stuart Haslam Oct. 13, 2015, 5:05 p.m. UTC
If one of the pktio interfaces used by the test unexpectedly fails to
open an invalid pktio handle is passed on to further API calls
resulting in undefined behaviour.

Reported-by: Anders Roxell <anders.roxell@linaro.org>
Signed-off-by: Stuart Haslam <stuart.haslam@linaro.org>
---
This causes a seg fault when testing the linux-generic implementation,
it can be easily reproduced with;

ODP_PKTIO_IF0=blah ODP_PKTIO_IF1=foo ./test/validation/pktio/pktio_main

 test/validation/pktio/pktio.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

Comments

Bill Fischofer Oct. 15, 2015, 8:54 p.m. UTC | #1
On Tue, Oct 13, 2015 at 12:05 PM, Stuart Haslam <stuart.haslam@linaro.org>
wrote:

> If one of the pktio interfaces used by the test unexpectedly fails to
> open an invalid pktio handle is passed on to further API calls
> resulting in undefined behaviour.
>
> Reported-by: Anders Roxell <anders.roxell@linaro.org>
> Signed-off-by: Stuart Haslam <stuart.haslam@linaro.org>
>

Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org>


> ---
> This causes a seg fault when testing the linux-generic implementation,
> it can be easily reproduced with;
>
> ODP_PKTIO_IF0=blah ODP_PKTIO_IF1=foo ./test/validation/pktio/pktio_main
>
>  test/validation/pktio/pktio.c | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/test/validation/pktio/pktio.c b/test/validation/pktio/pktio.c
> index 118fe89..d4b447a 100644
> --- a/test/validation/pktio/pktio.c
> +++ b/test/validation/pktio/pktio.c
> @@ -520,7 +520,9 @@ void pktio_test_mtu(void)
>  {
>         int ret;
>         int mtu;
> +
>         odp_pktio_t pktio = create_pktio(iface_name[0],
> ODP_QUEUE_TYPE_SCHED, 0);
> +       CU_ASSERT_FATAL(pktio != ODP_PKTIO_INVALID);
>
>         mtu = odp_pktio_mtu(pktio);
>         CU_ASSERT(mtu > 0);
> @@ -534,7 +536,9 @@ void pktio_test_mtu(void)
>  void pktio_test_promisc(void)
>  {
>         int ret;
> +
>         odp_pktio_t pktio = create_pktio(iface_name[0],
> ODP_QUEUE_TYPE_SCHED, 0);
> +       CU_ASSERT_FATAL(pktio != ODP_PKTIO_INVALID);
>
>         ret = odp_pktio_promisc_mode_set(pktio, 1);
>         CU_ASSERT(0 == ret);
> @@ -562,6 +566,7 @@ void pktio_test_mac(void)
>         odp_pktio_t pktio;
>
>         pktio = create_pktio(iface_name[0], ODP_QUEUE_TYPE_SCHED, 0);
> +       CU_ASSERT_FATAL(pktio != ODP_PKTIO_INVALID);
>
>         printf("testing mac for %s\n", iface_name[0]);
>
> @@ -589,7 +594,7 @@ void pktio_test_inq_remdef(void)
>         int i;
>
>         pktio = create_pktio(iface_name[0], ODP_QUEUE_TYPE_SCHED, 0);
> -       CU_ASSERT(pktio != ODP_PKTIO_INVALID);
> +       CU_ASSERT_FATAL(pktio != ODP_PKTIO_INVALID);
>         CU_ASSERT(create_inq(pktio, ODP_QUEUE_TYPE_POLL) == 0);
>         inq = odp_pktio_inq_getdef(pktio);
>         CU_ASSERT(inq != ODP_QUEUE_INVALID);
> @@ -617,7 +622,7 @@ void pktio_test_open(void)
>         /* test the sequence open->close->open->close() */
>         for (i = 0; i < 2; ++i) {
>                 pktio = create_pktio(iface_name[0], ODP_QUEUE_TYPE_SCHED,
> 0);
> -               CU_ASSERT(pktio != ODP_PKTIO_INVALID);
> +               CU_ASSERT_FATAL(pktio != ODP_PKTIO_INVALID);
>                 CU_ASSERT(odp_pktio_close(pktio) == 0);
>         }
>
> @@ -656,7 +661,7 @@ void pktio_test_inq(void)
>         odp_pktio_t pktio;
>
>         pktio = create_pktio(iface_name[0], ODP_QUEUE_TYPE_SCHED, 0);
> -       CU_ASSERT(pktio != ODP_PKTIO_INVALID);
> +       CU_ASSERT_FATAL(pktio != ODP_PKTIO_INVALID);
>
>         CU_ASSERT(create_inq(pktio, ODP_QUEUE_TYPE_POLL) == 0);
>         CU_ASSERT(destroy_inq(pktio) == 0);
> @@ -675,7 +680,7 @@ static void pktio_test_start_stop(void)
>
>         for (i = 0; i < num_ifaces; i++) {
>                 pktio[i] = create_pktio(iface_name[i],
> ODP_QUEUE_TYPE_SCHED, 0);
> -               CU_ASSERT(pktio[i] != ODP_PKTIO_INVALID);
> +               CU_ASSERT_FATAL(pktio[i] != ODP_PKTIO_INVALID);
>                 create_inq(pktio[i],  ODP_QUEUE_TYPE_SCHED);
>         }
>
> --
> 2.1.1
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
>
diff mbox

Patch

diff --git a/test/validation/pktio/pktio.c b/test/validation/pktio/pktio.c
index 118fe89..d4b447a 100644
--- a/test/validation/pktio/pktio.c
+++ b/test/validation/pktio/pktio.c
@@ -520,7 +520,9 @@  void pktio_test_mtu(void)
 {
 	int ret;
 	int mtu;
+
 	odp_pktio_t pktio = create_pktio(iface_name[0], ODP_QUEUE_TYPE_SCHED, 0);
+	CU_ASSERT_FATAL(pktio != ODP_PKTIO_INVALID);
 
 	mtu = odp_pktio_mtu(pktio);
 	CU_ASSERT(mtu > 0);
@@ -534,7 +536,9 @@  void pktio_test_mtu(void)
 void pktio_test_promisc(void)
 {
 	int ret;
+
 	odp_pktio_t pktio = create_pktio(iface_name[0], ODP_QUEUE_TYPE_SCHED, 0);
+	CU_ASSERT_FATAL(pktio != ODP_PKTIO_INVALID);
 
 	ret = odp_pktio_promisc_mode_set(pktio, 1);
 	CU_ASSERT(0 == ret);
@@ -562,6 +566,7 @@  void pktio_test_mac(void)
 	odp_pktio_t pktio;
 
 	pktio = create_pktio(iface_name[0], ODP_QUEUE_TYPE_SCHED, 0);
+	CU_ASSERT_FATAL(pktio != ODP_PKTIO_INVALID);
 
 	printf("testing mac for %s\n", iface_name[0]);
 
@@ -589,7 +594,7 @@  void pktio_test_inq_remdef(void)
 	int i;
 
 	pktio = create_pktio(iface_name[0], ODP_QUEUE_TYPE_SCHED, 0);
-	CU_ASSERT(pktio != ODP_PKTIO_INVALID);
+	CU_ASSERT_FATAL(pktio != ODP_PKTIO_INVALID);
 	CU_ASSERT(create_inq(pktio, ODP_QUEUE_TYPE_POLL) == 0);
 	inq = odp_pktio_inq_getdef(pktio);
 	CU_ASSERT(inq != ODP_QUEUE_INVALID);
@@ -617,7 +622,7 @@  void pktio_test_open(void)
 	/* test the sequence open->close->open->close() */
 	for (i = 0; i < 2; ++i) {
 		pktio = create_pktio(iface_name[0], ODP_QUEUE_TYPE_SCHED, 0);
-		CU_ASSERT(pktio != ODP_PKTIO_INVALID);
+		CU_ASSERT_FATAL(pktio != ODP_PKTIO_INVALID);
 		CU_ASSERT(odp_pktio_close(pktio) == 0);
 	}
 
@@ -656,7 +661,7 @@  void pktio_test_inq(void)
 	odp_pktio_t pktio;
 
 	pktio = create_pktio(iface_name[0], ODP_QUEUE_TYPE_SCHED, 0);
-	CU_ASSERT(pktio != ODP_PKTIO_INVALID);
+	CU_ASSERT_FATAL(pktio != ODP_PKTIO_INVALID);
 
 	CU_ASSERT(create_inq(pktio, ODP_QUEUE_TYPE_POLL) == 0);
 	CU_ASSERT(destroy_inq(pktio) == 0);
@@ -675,7 +680,7 @@  static void pktio_test_start_stop(void)
 
 	for (i = 0; i < num_ifaces; i++) {
 		pktio[i] = create_pktio(iface_name[i], ODP_QUEUE_TYPE_SCHED, 0);
-		CU_ASSERT(pktio[i] != ODP_PKTIO_INVALID);
+		CU_ASSERT_FATAL(pktio[i] != ODP_PKTIO_INVALID);
 		create_inq(pktio[i],  ODP_QUEUE_TYPE_SCHED);
 	}