summaryrefslogtreecommitdiff
path: root/lib/librte_lpm
diff options
context:
space:
mode:
authorChristian Ehrhardt <christian.ehrhardt@canonical.com>2016-03-21 15:06:11 +0100
committerThomas Monjalon <thomas.monjalon@6wind.com>2016-03-22 17:55:16 +0100
commit768f0e4587d17ba7c34aa47c9799c643c80d2585 (patch)
tree081e642557c1e2ecb2ef86a2fe87cc0c629a35b5 /lib/librte_lpm
parent732a5b5c53c9ac46e90d782175dd7fcd033288cc (diff)
downloaddpdk-next-eventdev-768f0e4587d17ba7c34aa47c9799c643c80d2585.zip
dpdk-next-eventdev-768f0e4587d17ba7c34aa47c9799c643c80d2585.tar.gz
dpdk-next-eventdev-768f0e4587d17ba7c34aa47c9799c643c80d2585.tar.xz
lpm6: fix use after free
In certain autotests lpm->max_rules turned out to be non initialized. That was caused by a failing allocation for lpm->rules_tbl in rte_lpm6_create. It then left the function via goto exit with lpm freed, but still a pointer value being set. In case of an allocation failure it resets lpm to NULL now, to avoid the upper layers operate on that already freed memory. Along that is also makes the RTE_LOG message of the failed allocation unique. Fixes: 5c510e13a9cb ("lpm: add IPv6 support") Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com> Acked-by: Stephen Hemminger <stephen@networkplumber.org> Acked-by: Olivier Matz <olivier.matz@6wind.com>
Diffstat (limited to 'lib/librte_lpm')
-rw-r--r--lib/librte_lpm/rte_lpm6.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/librte_lpm/rte_lpm6.c b/lib/librte_lpm/rte_lpm6.c
index eded772..4c44cd7 100644
--- a/lib/librte_lpm/rte_lpm6.c
+++ b/lib/librte_lpm/rte_lpm6.c
@@ -206,8 +206,9 @@ rte_lpm6_create(const char *name, int socket_id,
(size_t)rules_size, RTE_CACHE_LINE_SIZE, socket_id);
if (lpm->rules_tbl == NULL) {
- RTE_LOG(ERR, LPM, "LPM memory allocation failed\n");
+ RTE_LOG(ERR, LPM, "LPM rules_tbl allocation failed\n");
rte_free(lpm);
+ lpm = NULL;
rte_free(te);
goto exit;
}