xfrm: ipcomp: add extack to ipcomp{4,6}_init_state
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2130609 Tested: basic IPsec tests + invalid configuration tests commit 6ee55320520e31f5dae637e928d5792352b22776 Author: Sabrina Dubroca <sd@queasysnail.net> Date: Tue Sep 27 17:45:33 2022 +0200 xfrm: ipcomp: add extack to ipcomp{4,6}_init_state And the shared helper ipcomp_init_state. Signed-off-by: Sabrina Dubroca <sd@queasysnail.net> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com> Signed-off-by: Sabrina Dubroca <sdubroca@redhat.com>
This commit is contained in:
parent
5bfb9013f8
commit
0ada60f1f9
|
@ -20,7 +20,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)
|
||||
{
|
||||
|
|
|
@ -130,17 +130,20 @@ 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;
|
||||
|
|
|
@ -149,17 +149,20 @@ 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;
|
||||
|
|
|
@ -326,18 +326,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);
|
||||
|
|
Loading…
Reference in New Issue