diff options
author | David S. Miller <davem@davemloft.net> | 2014-05-09 16:41:16 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-05-09 16:41:16 -0400 |
commit | 05ab2dae650e09add1c5295392b5516704c03a4b (patch) | |
tree | 53c95dea1f7859caf3a475e0dc04ad33565ca2ce | |
parent | 93dccc59165ad1b4db94528dfdf88bff92c09cef (diff) | |
parent | f66138c8471442c24c58cdce6ba5f36c5ce93d7a (diff) |
Merge branch 'sctp_sysctl'
Wang Weidong says:
====================
sctp: fix kfree static array pointer in sctp_sysctl_net_unregister
patch #1 revert the efb842c45("sctp: optimize the sctp_sysctl_net_register")
patch #2 add a checking for sctp_sysctl_net_register
====================
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/sctp/sysctl.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/net/sctp/sysctl.c b/net/sctp/sysctl.c index c82fdc1eab7c..7e5eb7554990 100644 --- a/net/sctp/sysctl.c +++ b/net/sctp/sysctl.c | |||
@@ -436,20 +436,21 @@ static int proc_sctp_do_auth(struct ctl_table *ctl, int write, | |||
436 | 436 | ||
437 | int sctp_sysctl_net_register(struct net *net) | 437 | int sctp_sysctl_net_register(struct net *net) |
438 | { | 438 | { |
439 | struct ctl_table *table = sctp_net_table; | 439 | struct ctl_table *table; |
440 | 440 | int i; | |
441 | if (!net_eq(net, &init_net)) { | ||
442 | int i; | ||
443 | 441 | ||
444 | table = kmemdup(sctp_net_table, sizeof(sctp_net_table), GFP_KERNEL); | 442 | table = kmemdup(sctp_net_table, sizeof(sctp_net_table), GFP_KERNEL); |
445 | if (!table) | 443 | if (!table) |
446 | return -ENOMEM; | 444 | return -ENOMEM; |
447 | 445 | ||
448 | for (i = 0; table[i].data; i++) | 446 | for (i = 0; table[i].data; i++) |
449 | table[i].data += (char *)(&net->sctp) - (char *)&init_net.sctp; | 447 | table[i].data += (char *)(&net->sctp) - (char *)&init_net.sctp; |
450 | } | ||
451 | 448 | ||
452 | net->sctp.sysctl_header = register_net_sysctl(net, "net/sctp", table); | 449 | net->sctp.sysctl_header = register_net_sysctl(net, "net/sctp", table); |
450 | if (net->sctp.sysctl_header == NULL) { | ||
451 | kfree(table); | ||
452 | return -ENOMEM; | ||
453 | } | ||
453 | return 0; | 454 | return 0; |
454 | } | 455 | } |
455 | 456 | ||