diff options
Diffstat (limited to 'net/netfilter/ipvs/ip_vs_ftp.c')
-rw-r--r-- | net/netfilter/ipvs/ip_vs_ftp.c | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/net/netfilter/ipvs/ip_vs_ftp.c b/net/netfilter/ipvs/ip_vs_ftp.c index b20b29c903e..4f53a5f0443 100644 --- a/net/netfilter/ipvs/ip_vs_ftp.c +++ b/net/netfilter/ipvs/ip_vs_ftp.c | |||
@@ -268,6 +268,7 @@ static int ip_vs_ftp_out(struct ip_vs_app *app, struct ip_vs_conn *cp, | |||
268 | * packet. | 268 | * packet. |
269 | */ | 269 | */ |
270 | ret = nf_nat_mangle_tcp_packet(skb, ct, ctinfo, | 270 | ret = nf_nat_mangle_tcp_packet(skb, ct, ctinfo, |
271 | iph->ihl * 4, | ||
271 | start-data, end-start, | 272 | start-data, end-start, |
272 | buf, buf_len); | 273 | buf, buf_len); |
273 | if (ret) { | 274 | if (ret) { |
@@ -441,16 +442,10 @@ static int __net_init __ip_vs_ftp_init(struct net *net) | |||
441 | 442 | ||
442 | if (!ipvs) | 443 | if (!ipvs) |
443 | return -ENOENT; | 444 | return -ENOENT; |
444 | app = kmemdup(&ip_vs_ftp, sizeof(struct ip_vs_app), GFP_KERNEL); | ||
445 | if (!app) | ||
446 | return -ENOMEM; | ||
447 | INIT_LIST_HEAD(&app->a_list); | ||
448 | INIT_LIST_HEAD(&app->incs_list); | ||
449 | ipvs->ftp_app = app; | ||
450 | 445 | ||
451 | ret = register_ip_vs_app(net, app); | 446 | app = register_ip_vs_app(net, &ip_vs_ftp); |
452 | if (ret) | 447 | if (IS_ERR(app)) |
453 | goto err_exit; | 448 | return PTR_ERR(app); |
454 | 449 | ||
455 | for (i = 0; i < ports_count; i++) { | 450 | for (i = 0; i < ports_count; i++) { |
456 | if (!ports[i]) | 451 | if (!ports[i]) |
@@ -464,9 +459,7 @@ static int __net_init __ip_vs_ftp_init(struct net *net) | |||
464 | return 0; | 459 | return 0; |
465 | 460 | ||
466 | err_unreg: | 461 | err_unreg: |
467 | unregister_ip_vs_app(net, app); | 462 | unregister_ip_vs_app(net, &ip_vs_ftp); |
468 | err_exit: | ||
469 | kfree(ipvs->ftp_app); | ||
470 | return ret; | 463 | return ret; |
471 | } | 464 | } |
472 | /* | 465 | /* |
@@ -474,10 +467,7 @@ err_exit: | |||
474 | */ | 467 | */ |
475 | static void __ip_vs_ftp_exit(struct net *net) | 468 | static void __ip_vs_ftp_exit(struct net *net) |
476 | { | 469 | { |
477 | struct netns_ipvs *ipvs = net_ipvs(net); | 470 | unregister_ip_vs_app(net, &ip_vs_ftp); |
478 | |||
479 | unregister_ip_vs_app(net, ipvs->ftp_app); | ||
480 | kfree(ipvs->ftp_app); | ||
481 | } | 471 | } |
482 | 472 | ||
483 | static struct pernet_operations ip_vs_ftp_ops = { | 473 | static struct pernet_operations ip_vs_ftp_ops = { |