aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@redhat.com>2015-03-12 14:46:23 -0700
committerDavid S. Miller <davem@davemloft.net>2015-03-12 18:26:51 -0400
commit3c9e9f7320f0138497ef7879c0903246746e0ed3 (patch)
treeeea60b4c1788a31f550af86c8afccd9e616f9ebf
parentebpf: verifier: check that call reg with ARG_ANYTHING is initialized (diff)
downloadlinux-dev-3c9e9f7320f0138497ef7879c0903246746e0ed3.tar.xz
linux-dev-3c9e9f7320f0138497ef7879c0903246746e0ed3.zip
fib_trie: Avoid NULL pointer if local table is not allocated
The function fib_unmerge assumed the local table had already been allocated. If that is not the case however when custom rules are applied then this can result in a NULL pointer dereference. In order to prevent this we must check the value of the local table pointer and if it is NULL simply return 0 as there is no local table to separate from the main. Fixes: 0ddcf43d5 ("ipv4: FIB Local/MAIN table collapse") Reported-by: Madhu Challa <challa@noironetworks.com> Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/ipv4/fib_frontend.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index c1caf9ded280..e5b6b0534c5f 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -156,9 +156,12 @@ int fib_unmerge(struct net *net)
{
struct fib_table *old, *new;
+ /* attempt to fetch local table if it has been allocated */
old = fib_get_table(net, RT_TABLE_LOCAL);
- new = fib_trie_unmerge(old);
+ if (!old)
+ return 0;
+ new = fib_trie_unmerge(old);
if (!new)
return -ENOMEM;