Commit 6ee55320 authored by Sabrina Dubroca's avatar Sabrina Dubroca Committed by Steffen Klassert
Browse files

xfrm: ipcomp: add extack to ipcomp{4,6}_init_state



And the shared helper ipcomp_init_state.

Signed-off-by: default avatarSabrina Dubroca <sd@queasysnail.net>
Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
parent 25ec92cd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ struct xfrm_state;
int ipcomp_input(struct xfrm_state *x, struct sk_buff *skb);
int ipcomp_output(struct xfrm_state *x, struct sk_buff *skb);
void ipcomp_destroy(struct xfrm_state *x);
int ipcomp_init_state(struct xfrm_state *x);
int ipcomp_init_state(struct xfrm_state *x, struct netlink_ext_ack *extack);

static inline struct ip_comp_hdr *ip_comp_hdr(const struct sk_buff *skb)
{
+5 −2
Original line number Diff line number Diff line
@@ -130,18 +130,21 @@ static int ipcomp4_init_state(struct xfrm_state *x,
		x->props.header_len += sizeof(struct iphdr);
		break;
	default:
		NL_SET_ERR_MSG(extack, "Unsupported XFRM mode for IPcomp");
		goto out;
	}

	err = ipcomp_init_state(x);
	err = ipcomp_init_state(x, extack);
	if (err)
		goto out;

	if (x->props.mode == XFRM_MODE_TUNNEL) {
		err = ipcomp_tunnel_attach(x);
		if (err)
		if (err) {
			NL_SET_ERR_MSG(extack, "Kernel error: failed to initialize the associated state");
			goto out;
		}
	}

	err = 0;
out:
+5 −2
Original line number Diff line number Diff line
@@ -149,18 +149,21 @@ static int ipcomp6_init_state(struct xfrm_state *x,
		x->props.header_len += sizeof(struct ipv6hdr);
		break;
	default:
		NL_SET_ERR_MSG(extack, "Unsupported XFRM mode for IPcomp");
		goto out;
	}

	err = ipcomp_init_state(x);
	err = ipcomp_init_state(x, extack);
	if (err)
		goto out;

	if (x->props.mode == XFRM_MODE_TUNNEL) {
		err = ipcomp6_tunnel_attach(x);
		if (err)
		if (err) {
			NL_SET_ERR_MSG(extack, "Kernel error: failed to initialize the associated state");
			goto out;
		}
	}

	err = 0;
out:
+7 −3
Original line number Diff line number Diff line
@@ -325,18 +325,22 @@ void ipcomp_destroy(struct xfrm_state *x)
}
EXPORT_SYMBOL_GPL(ipcomp_destroy);

int ipcomp_init_state(struct xfrm_state *x)
int ipcomp_init_state(struct xfrm_state *x, struct netlink_ext_ack *extack)
{
	int err;
	struct ipcomp_data *ipcd;
	struct xfrm_algo_desc *calg_desc;

	err = -EINVAL;
	if (!x->calg)
	if (!x->calg) {
		NL_SET_ERR_MSG(extack, "Missing required compression algorithm");
		goto out;
	}

	if (x->encap)
	if (x->encap) {
		NL_SET_ERR_MSG(extack, "IPComp is not compatible with encapsulation");
		goto out;
	}

	err = -ENOMEM;
	ipcd = kzalloc(sizeof(*ipcd), GFP_KERNEL);