fib_trie: Fix uninitialized variable warning
authorAlexander Duyck <alexander.h.duyck@redhat.com>
Wed, 11 Mar 2015 21:02:16 +0000 (14:02 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 11 Mar 2015 21:33:44 +0000 (17:33 -0400)
The 0-day kernel test infrastructure reported a use of uninitialized
variable warning for local_table due to the fact that the local and main
allocations had been swapped from the original setup.  This change corrects
that by making it so that we free the main table if the local table
allocation fails.

Fixes: 0ddcf43d5 ("ipv4: FIB Local/MAIN table collapse")
Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/fib_frontend.c

index a0b69ae8be1c30eb5a330a4e5928f1a8fe789fa5..c1caf9ded280c5161cb1f0cbdd5c2433eb2ba12c 100644 (file)
@@ -54,11 +54,11 @@ static int __net_init fib4_rules_init(struct net *net)
 
        main_table  = fib_trie_table(RT_TABLE_MAIN, NULL);
        if (main_table == NULL)
-               goto fail;
+               return -ENOMEM;
 
        local_table = fib_trie_table(RT_TABLE_LOCAL, main_table);
        if (local_table == NULL)
-               return -ENOMEM;
+               goto fail;
 
        hlist_add_head_rcu(&local_table->tb_hlist,
                                &net->ipv4.fib_table_hash[TABLE_LOCAL_INDEX]);
@@ -67,7 +67,7 @@ static int __net_init fib4_rules_init(struct net *net)
        return 0;
 
 fail:
-       fib_free_table(local_table);
+       fib_free_table(main_table);
        return -ENOMEM;
 }
 #else