mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-21 22:47:51 -04:00
xfrm: add extack to xfrm_init_state
Add a struct extack parameter to xfrm_init_state() and pass it through to __xfrm_init_state(). This allows validation errors detected during state initialization to propagate meaningful error messages back to userspace. xfrm_state_migrate() now passes extack so that errors from the XFRM_MSG_MIGRATE_STATE path are properly reported. Callers without an extack context (af_key, ipcomp4, ipcomp6) pass NULL, preserving their existing behaviour. Reviewed-by: Sabrina Dubroca <sd@queasysnail.net> Signed-off-by: Antony Antony <antony.antony@secunet.com> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:
committed by
Steffen Klassert
parent
440bf355d3
commit
231a1744dc
@@ -1774,7 +1774,7 @@ u32 xfrm_replay_seqhi(struct xfrm_state *x, __be32 net_seq);
|
||||
int xfrm_init_replay(struct xfrm_state *x, struct netlink_ext_ack *extack);
|
||||
u32 xfrm_state_mtu(struct xfrm_state *x, int mtu);
|
||||
int __xfrm_init_state(struct xfrm_state *x, struct netlink_ext_ack *extack);
|
||||
int xfrm_init_state(struct xfrm_state *x);
|
||||
int xfrm_init_state(struct xfrm_state *x, struct netlink_ext_ack *extack);
|
||||
int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type);
|
||||
int xfrm_input_resume(struct sk_buff *skb, int nexthdr);
|
||||
int xfrm_trans_queue_net(struct net *net, struct sk_buff *skb,
|
||||
|
||||
@@ -77,7 +77,7 @@ static struct xfrm_state *ipcomp_tunnel_create(struct xfrm_state *x)
|
||||
memcpy(&t->mark, &x->mark, sizeof(t->mark));
|
||||
t->if_id = x->if_id;
|
||||
|
||||
if (xfrm_init_state(t))
|
||||
if (xfrm_init_state(t, NULL))
|
||||
goto error;
|
||||
|
||||
atomic_set(&t->tunnel_users, 1);
|
||||
|
||||
@@ -95,7 +95,7 @@ static struct xfrm_state *ipcomp6_tunnel_create(struct xfrm_state *x)
|
||||
memcpy(&t->mark, &x->mark, sizeof(t->mark));
|
||||
t->if_id = x->if_id;
|
||||
|
||||
if (xfrm_init_state(t))
|
||||
if (xfrm_init_state(t, NULL))
|
||||
goto error;
|
||||
|
||||
atomic_set(&t->tunnel_users, 1);
|
||||
|
||||
@@ -1299,7 +1299,7 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
|
||||
}
|
||||
}
|
||||
|
||||
err = xfrm_init_state(x);
|
||||
err = xfrm_init_state(x, NULL);
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
|
||||
@@ -2143,7 +2143,7 @@ struct xfrm_state *xfrm_state_migrate(struct xfrm_state *x,
|
||||
if (!xc)
|
||||
return NULL;
|
||||
|
||||
if (xfrm_init_state(xc) < 0)
|
||||
if (xfrm_init_state(xc, extack) < 0)
|
||||
goto error;
|
||||
|
||||
/* configure the hardware if offload is requested */
|
||||
@@ -3238,11 +3238,11 @@ int __xfrm_init_state(struct xfrm_state *x, struct netlink_ext_ack *extack)
|
||||
|
||||
EXPORT_SYMBOL(__xfrm_init_state);
|
||||
|
||||
int xfrm_init_state(struct xfrm_state *x)
|
||||
int xfrm_init_state(struct xfrm_state *x, struct netlink_ext_ack *extack)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = __xfrm_init_state(x, NULL);
|
||||
err = __xfrm_init_state(x, extack);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user