aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/odp_packet_io.c
diff options
context:
space:
mode:
authorStuart Haslam <stuart.haslam@linaro.org>2015-04-02 17:49:20 +0100
committerMaxim Uvarov <maxim.uvarov@linaro.org>2015-04-03 14:07:55 +0300
commitf639f626a7cf6c198f0ea4b649d7b86d2026f14b (patch)
treeb8a506b276bc92296ad9e80776340703c3a01cb5 /platform/linux-generic/odp_packet_io.c
parent1189f9917c9d0f1b6bf99a75a2c08903e4fcccba (diff)
linux-generic: pktio: fix SEGV after odp_pktio_inq_remdef()
Calling odp_pktio_inq_remdef() causes the pktio's inq_default to be set to ODP_QUEUE_INVALID, but when the scheduler later polls the pktio it fails to check the validity of inq_default and ends up passing a bogus pointer to queue_enq_multi(). Signed-off-by: Stuart Haslam <stuart.haslam@linaro.org> Reviewed-by: Ciprian Barbu <ciprian.barbu@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform/linux-generic/odp_packet_io.c')
-rw-r--r--platform/linux-generic/odp_packet_io.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c
index e7d3c1b..cfe5b71 100644
--- a/platform/linux-generic/odp_packet_io.c
+++ b/platform/linux-generic/odp_packet_io.c
@@ -685,6 +685,9 @@ int pktin_poll(pktio_entry_t *entry)
if (odp_unlikely(is_free(entry)))
return -1;
+ if (odp_unlikely(entry->s.inq_default == ODP_QUEUE_INVALID))
+ return -1;
+
num = odp_pktio_recv(entry->s.handle, pkt_tbl, QUEUE_MULTI_MAX);
if (num < 0) {