]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xfrm: add extack to xfrm_init_state
authorAntony Antony <antony.antony@secunet.com>
Tue, 26 May 2026 19:06:06 +0000 (21:06 +0200)
committerSteffen Klassert <steffen.klassert@secunet.com>
Thu, 4 Jun 2026 10:22:35 +0000 (12:22 +0200)
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>
include/net/xfrm.h
net/ipv4/ipcomp.c
net/ipv6/ipcomp6.c
net/key/af_key.c
net/xfrm/xfrm_state.c

index 10d3edde6b2fa76af15eba562d2f583c4d689069..0c035955d87da289846fd3a9ad59ec4c8599eec9 100644 (file)
@@ -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,
index 9a45aed508d193de4f443a58a4d41cc8f6f93c85..b1ea2d37e8c5df0616765ef50dee7536216809ac 100644 (file)
@@ -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);
index 8607569de34f3af5aa6354bec28746388b5d0c0f..b340d67eb1d907905a29f23ed2ddf63d915a343e 100644 (file)
@@ -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);
index a166a88d8788080478d7d5ad6e46f716f65819f6..842bf5786e3f151bc5c837d115de870589ca2e87 100644 (file)
@@ -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;
 
index 9417a025270c36b440d5b995d7f1199f2091ce7c..53d88b87bdbd0d382835e0e3b182316091ecb63b 100644 (file)
@@ -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 @@ error:
 
 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;