Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ccda4a77 authored by David S. Miller's avatar David S. Miller
Browse files


Steffen Klassert says:

====================
pull request (net-next): ipsec-next 2014-07-30

This is the last pull request for ipsec-next before I'll be
off for two weeks starting on friday. David, can you please
take urgent ipsec patches directly into net/net-next during
this time?

1) Error handling simplifications for vti and vti6.
   From Mathias Krause.

2) Remove a duplicate semicolon after a return statement.
   From Christoph Paasch.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 7fc527f9 1759389e
Loading
Loading
Loading
Loading
+21 −33
Original line number Diff line number Diff line
@@ -534,40 +534,28 @@ static struct rtnl_link_ops vti_link_ops __read_mostly = {

static int __init vti_init(void)
{
	const char *msg;
	int err;

	pr_info("IPv4 over IPSec tunneling driver\n");
	pr_info("IPv4 over IPsec tunneling driver\n");

	msg = "tunnel device";
	err = register_pernet_device(&vti_net_ops);
	if (err < 0)
		return err;
	err = xfrm4_protocol_register(&vti_esp4_protocol, IPPROTO_ESP);
	if (err < 0) {
		unregister_pernet_device(&vti_net_ops);
		pr_info("vti init: can't register tunnel\n");

		return err;
	}
		goto pernet_dev_failed;

	msg = "tunnel protocols";
	err = xfrm4_protocol_register(&vti_esp4_protocol, IPPROTO_ESP);
	if (err < 0)
		goto xfrm_proto_esp_failed;
	err = xfrm4_protocol_register(&vti_ah4_protocol, IPPROTO_AH);
	if (err < 0) {
		xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP);
		unregister_pernet_device(&vti_net_ops);
		pr_info("vti init: can't register tunnel\n");

		return err;
	}

	if (err < 0)
		goto xfrm_proto_ah_failed;
	err = xfrm4_protocol_register(&vti_ipcomp4_protocol, IPPROTO_COMP);
	if (err < 0) {
		xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH);
		xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP);
		unregister_pernet_device(&vti_net_ops);
		pr_info("vti init: can't register tunnel\n");

		return err;
	}
	if (err < 0)
		goto xfrm_proto_comp_failed;

	msg = "netlink interface";
	err = rtnl_link_register(&vti_link_ops);
	if (err < 0)
		goto rtnl_link_failed;
@@ -576,23 +564,23 @@ static int __init vti_init(void)

rtnl_link_failed:
	xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP);
xfrm_proto_comp_failed:
	xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH);
xfrm_proto_ah_failed:
	xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP);
xfrm_proto_esp_failed:
	unregister_pernet_device(&vti_net_ops);
pernet_dev_failed:
	pr_err("vti init: failed to register %s\n", msg);
	return err;
}

static void __exit vti_fini(void)
{
	rtnl_link_unregister(&vti_link_ops);
	if (xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP))
		pr_info("vti close: can't deregister tunnel\n");
	if (xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH))
		pr_info("vti close: can't deregister tunnel\n");
	if (xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP))
		pr_info("vti close: can't deregister tunnel\n");


	xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP);
	xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH);
	xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP);
	unregister_pernet_device(&vti_net_ops);
}

+1 −1
Original line number Diff line number Diff line
@@ -124,7 +124,7 @@ static int xfrm4_ah_rcv(struct sk_buff *skb)

	for_each_protocol_rcu(ah4_handlers, handler)
		if ((ret = handler->handler(skb)) != -EINVAL)
			return ret;;
			return ret;

	icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0);

+20 −31
Original line number Diff line number Diff line
@@ -1089,36 +1089,26 @@ static struct xfrm6_protocol vti_ipcomp6_protocol __read_mostly = {
 **/
static int __init vti6_tunnel_init(void)
{
	const char *msg;
	int err;

	msg = "tunnel device";
	err = register_pernet_device(&vti6_net_ops);
	if (err < 0)
		goto out_pernet;
		goto pernet_dev_failed;

	msg = "tunnel protocols";
	err = xfrm6_protocol_register(&vti_esp6_protocol, IPPROTO_ESP);
	if (err < 0) {
		pr_err("%s: can't register vti6 protocol\n", __func__);

		goto out;
	}

	if (err < 0)
		goto xfrm_proto_esp_failed;
	err = xfrm6_protocol_register(&vti_ah6_protocol, IPPROTO_AH);
	if (err < 0) {
		xfrm6_protocol_deregister(&vti_esp6_protocol, IPPROTO_ESP);
		pr_err("%s: can't register vti6 protocol\n", __func__);

		goto out;
	}

	if (err < 0)
		goto xfrm_proto_ah_failed;
	err = xfrm6_protocol_register(&vti_ipcomp6_protocol, IPPROTO_COMP);
	if (err < 0) {
		xfrm6_protocol_deregister(&vti_ah6_protocol, IPPROTO_AH);
		xfrm6_protocol_deregister(&vti_esp6_protocol, IPPROTO_ESP);
		pr_err("%s: can't register vti6 protocol\n", __func__);

		goto out;
	}
	if (err < 0)
		goto xfrm_proto_comp_failed;

	msg = "netlink interface";
	err = rtnl_link_register(&vti6_link_ops);
	if (err < 0)
		goto rtnl_link_failed;
@@ -1127,11 +1117,14 @@ static int __init vti6_tunnel_init(void)

rtnl_link_failed:
	xfrm6_protocol_deregister(&vti_ipcomp6_protocol, IPPROTO_COMP);
xfrm_proto_comp_failed:
	xfrm6_protocol_deregister(&vti_ah6_protocol, IPPROTO_AH);
xfrm_proto_ah_failed:
	xfrm6_protocol_deregister(&vti_esp6_protocol, IPPROTO_ESP);
out:
xfrm_proto_esp_failed:
	unregister_pernet_device(&vti6_net_ops);
out_pernet:
pernet_dev_failed:
	pr_err("vti6 init: failed to register %s\n", msg);
	return err;
}

@@ -1141,13 +1134,9 @@ static int __init vti6_tunnel_init(void)
static void __exit vti6_tunnel_cleanup(void)
{
	rtnl_link_unregister(&vti6_link_ops);
	if (xfrm6_protocol_deregister(&vti_ipcomp6_protocol, IPPROTO_COMP))
		pr_info("%s: can't deregister protocol\n", __func__);
	if (xfrm6_protocol_deregister(&vti_ah6_protocol, IPPROTO_AH))
		pr_info("%s: can't deregister protocol\n", __func__);
	if (xfrm6_protocol_deregister(&vti_esp6_protocol, IPPROTO_ESP))
		pr_info("%s: can't deregister protocol\n", __func__);

	xfrm6_protocol_deregister(&vti_ipcomp6_protocol, IPPROTO_COMP);
	xfrm6_protocol_deregister(&vti_ah6_protocol, IPPROTO_AH);
	xfrm6_protocol_deregister(&vti_esp6_protocol, IPPROTO_ESP);
	unregister_pernet_device(&vti6_net_ops);
}