]>
Commit | Line | Data |
---|---|---|
00e5a55c BS |
1 | From: Peter Zijlstra <a.p.zijlstra@chello.nl> |
2 | Subject: net: ipv6: clean up ip6_route_net_init() error handling | |
3 | Patch-mainline: No | |
4 | References: FATE#303834 | |
5 | ||
6 | ip6_route_net_init() error handling looked less than solid, fix 'er up. | |
7 | ||
8 | Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> | |
9 | Acked-by: Neil Brown <neilb@suse.de> | |
10 | Acked-by: Suresh Jayaraman <sjayaraman@suse.de> | |
11 | ||
12 | --- | |
13 | net/ipv6/route.c | 19 ++++++++++--------- | |
14 | 1 file changed, 10 insertions(+), 9 deletions(-) | |
15 | ||
16 | Index: linux-2.6.26/net/ipv6/route.c | |
17 | =================================================================== | |
18 | --- linux-2.6.26.orig/net/ipv6/route.c | |
19 | +++ linux-2.6.26/net/ipv6/route.c | |
20 | @@ -2611,10 +2611,8 @@ static int ip6_route_net_init(struct net | |
21 | net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template, | |
22 | sizeof(*net->ipv6.ip6_prohibit_entry), | |
23 | GFP_KERNEL); | |
24 | - if (!net->ipv6.ip6_prohibit_entry) { | |
25 | - kfree(net->ipv6.ip6_null_entry); | |
26 | - goto out; | |
27 | - } | |
28 | + if (!net->ipv6.ip6_prohibit_entry) | |
29 | + goto out_ip6_null_entry; | |
30 | net->ipv6.ip6_prohibit_entry->u.dst.path = | |
31 | (struct dst_entry *)net->ipv6.ip6_prohibit_entry; | |
32 | net->ipv6.ip6_prohibit_entry->u.dst.ops = net->ipv6.ip6_dst_ops; | |
33 | @@ -2622,11 +2620,8 @@ static int ip6_route_net_init(struct net | |
34 | net->ipv6.ip6_blk_hole_entry = kmemdup(&ip6_blk_hole_entry_template, | |
35 | sizeof(*net->ipv6.ip6_blk_hole_entry), | |
36 | GFP_KERNEL); | |
37 | - if (!net->ipv6.ip6_blk_hole_entry) { | |
38 | - kfree(net->ipv6.ip6_null_entry); | |
39 | - kfree(net->ipv6.ip6_prohibit_entry); | |
40 | - goto out; | |
41 | - } | |
42 | + if (!net->ipv6.ip6_blk_hole_entry) | |
43 | + goto out_ip6_prohibit_entry; | |
44 | net->ipv6.ip6_blk_hole_entry->u.dst.path = | |
45 | (struct dst_entry *)net->ipv6.ip6_blk_hole_entry; | |
46 | net->ipv6.ip6_blk_hole_entry->u.dst.ops = net->ipv6.ip6_dst_ops; | |
47 | @@ -2642,6 +2637,12 @@ static int ip6_route_net_init(struct net | |
48 | out: | |
49 | return ret; | |
50 | ||
51 | +#ifdef CONFIG_IPV6_MULTIPLE_TABLES | |
52 | +out_ip6_prohibit_entry: | |
53 | + kfree(net->ipv6.ip6_prohibit_entry); | |
54 | +out_ip6_null_entry: | |
55 | + kfree(net->ipv6.ip6_null_entry); | |
56 | +#endif | |
57 | out_ip6_dst_ops: | |
58 | release_net(net->ipv6.ip6_dst_ops->dst_net); | |
59 | kfree(net->ipv6.ip6_dst_ops); |