diff options
Diffstat (limited to 'debian/patches/ubuntu-backport-39-lpm-fix-freeing-in-compatibility-mode.patch')
-rw-r--r-- | debian/patches/ubuntu-backport-39-lpm-fix-freeing-in-compatibility-mode.patch | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/debian/patches/ubuntu-backport-39-lpm-fix-freeing-in-compatibility-mode.patch b/debian/patches/ubuntu-backport-39-lpm-fix-freeing-in-compatibility-mode.patch new file mode 100644 index 00000000..4224cad8 --- /dev/null +++ b/debian/patches/ubuntu-backport-39-lpm-fix-freeing-in-compatibility-mode.patch @@ -0,0 +1,52 @@ +Description: backport of dpdk 16.07 fix 7cc3f2c2 + +Author: Christian Ehrhardt <christian.ehrhardt@canonical.com> +Date: Tue Apr 12 15:49:27 2016 +0200 + + lpm: fix freeing in compatibility mode + + Back then when we fixed the missing free lpm I was to quickly to say yes + if it applies not only to the lpm6 but also to all of the lpm code. + + It turned out to not apply to all of them. In rte_lpm_create_v20 there + is an unexpected fused allocation: + mem_size = sizeof(*lpm) + (sizeof(lpm->rules_tbl[0]) * max_rules); + [...] + lpm = (struct rte_lpm_v20 *)rte_zmalloc_socket(mem_name,mem_size, + RTE_CACHE_LINE_SIZE, socket_id); + + That causes lpm->rules_tbl not to have an own struct malloc_elem that + can be derived via RTE_PTR_SUB(data, MALLOC_ELEM_HEADER_LEN) in + malloc_elem_from_data. + Due to that the rte_lpm_free_v20 accidentially misderives the elem and + assumes it is ELEM_FREE triggering in malloc_elem_free + if (!malloc_elem_cookies_ok(elem) || elem->state != + return -1; + + While it seems counter-intuitive the way to properly remove rules_tbl in + the old fused allocation style of rte_lpm_free_v20 is to not remove it. + + The newer rte_lpm_free_v1604 is safe because in rte_lpm_create_v1604 + rules_tbl is a separate allocation. + + Fixes: d4c18f0a1d5d ("lpm: fix missing free") + + Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com> + Acked-by: Olivier Matz <olivier.matz@6wind.com> + +Forwarded: yes (in DPDK 16.07) +Author: Christian Ehrhardt <christian.ehrhardt@canonical.com> +Last-Update: 2016-05-17 + +Index: dpdk/lib/librte_lpm/rte_lpm.c +=================================================================== +--- dpdk.orig/lib/librte_lpm/rte_lpm.c ++++ dpdk/lib/librte_lpm/rte_lpm.c +@@ -373,7 +373,6 @@ rte_lpm_free_v20(struct rte_lpm_v20 *lpm + + rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK); + +- rte_free(lpm->rules_tbl); + rte_free(lpm); + rte_free(te); + } |