From 1aca6b921ae0fb7e06a6ecbe059a040627364cc4 Mon Sep 17 00:00:00 2001 From: Andriy Berestovskyy Date: Tue, 9 Feb 2016 12:35:50 +0100 Subject: [PATCH] DPDK: fix KNI kernel crash for indirect mbufs Change-Id: Ifc88d03049928aa3d5717d054abe3856d54327a8 Closes-bug: #1538201 --- dpdk/vr_dpdk_knidev.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dpdk/vr_dpdk_knidev.c b/dpdk/vr_dpdk_knidev.c index 17f58c29f..1a72262dd 100644 --- a/dpdk/vr_dpdk_knidev.c +++ b/dpdk/vr_dpdk_knidev.c @@ -227,7 +227,11 @@ dpdk_knidev_writer_tx(void *port, struct rte_mbuf *pkt) * So we make sure the packet is from the RSS mempool. If not, we make * a copy to the RSS mempool. */ - if (unlikely(pkt->pool != vr_dpdk.rss_mempool)) { + if (unlikely(pkt->pool != vr_dpdk.rss_mempool || + /* Check indirect mbuf's data is within the RSS mempool. */ + rte_pktmbuf_mtod(pkt, uintptr_t) < vr_dpdk.rss_mempool->elt_va_start || + rte_pktmbuf_mtod(pkt, uintptr_t) > vr_dpdk.rss_mempool->elt_va_end + )) { pkt_copy = vr_dpdk_pktmbuf_copy(pkt, vr_dpdk.rss_mempool); /* The original mbuf is no longer needed. */ vr_dpdk_pfree(pkt, VP_DROP_CLONED_ORIGINAL);