diff options
author | Nikolay Aleksandrov <nikolay@cumulusnetworks.com> | 2015-08-31 13:44:19 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-08-31 15:45:09 -0400 |
commit | 6ea3c9d5b042edf14eac1e21af21c41f81f3491e (patch) | |
tree | 313f0bacf4abc9db2c8063463335747f9cd76bec /net/mpls/af_mpls.c | |
parent | f0fa6e529efbca3b97ab6286dbeb5910e33f6c53 (diff) |
mpls: fix mpls_net_init memory leak
Fix a memory leak in the mpls netns init function in case of failure. If
register_net_sysctl fails then we need to free the ctl_table.
Fixes: 7720c01f3f59 ("mpls: Add a sysctl to control the size of the mpls label table")
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/mpls/af_mpls.c')
-rw-r--r-- | net/mpls/af_mpls.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c index 8c5707db53c5..bb185a28de98 100644 --- a/net/mpls/af_mpls.c +++ b/net/mpls/af_mpls.c | |||
@@ -1177,8 +1177,10 @@ static int mpls_net_init(struct net *net) | |||
1177 | 1177 | ||
1178 | table[0].data = net; | 1178 | table[0].data = net; |
1179 | net->mpls.ctl = register_net_sysctl(net, "net/mpls", table); | 1179 | net->mpls.ctl = register_net_sysctl(net, "net/mpls", table); |
1180 | if (net->mpls.ctl == NULL) | 1180 | if (net->mpls.ctl == NULL) { |
1181 | kfree(table); | ||
1181 | return -ENOMEM; | 1182 | return -ENOMEM; |
1183 | } | ||
1182 | 1184 | ||
1183 | return 0; | 1185 | return 0; |
1184 | } | 1186 | } |