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>
This commit is contained in:
Родитель
80f1d68ccb
Коммит
3c9e9f7320
|
@ -156,9 +156,12 @@ int fib_unmerge(struct net *net)
|
||||||
{
|
{
|
||||||
struct fib_table *old, *new;
|
struct fib_table *old, *new;
|
||||||
|
|
||||||
|
/* attempt to fetch local table if it has been allocated */
|
||||||
old = fib_get_table(net, RT_TABLE_LOCAL);
|
old = fib_get_table(net, RT_TABLE_LOCAL);
|
||||||
new = fib_trie_unmerge(old);
|
if (!old)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
new = fib_trie_unmerge(old);
|
||||||
if (!new)
|
if (!new)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче