summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntony Antony <antony.antony@secunet.com>2026-05-26 22:07:43 +0300
committerSteffen Klassert <steffen.klassert@secunet.com>2026-06-04 13:22:40 +0300
commitb2cb192b95e591b7c14af94aa0763b99149a3742 (patch)
tree0754b6ac4ef616afcedcf5335d2c7248c36fb17f
parent8de53883a4bf807a628f0d150a7ca7ddf56a5cc3 (diff)
downloadlinux-b2cb192b95e591b7c14af94aa0763b99149a3742.tar.xz
xfrm: check family before comparing addresses in migrate
When migrating between different address families, xfrm_addr_equal() cannot meaningfully compare addresses, different lengths. Only call xfrm_addr_equal() when families match, and take the xfrm_state_insert() path when addresses are equal. Fixes: 80c9abaabf42 ("[XFRM]: Extension for dynamic update of endpoint address(es)") Signed-off-by: Antony Antony <antony.antony@secunet.com> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
-rw-r--r--net/xfrm/xfrm_state.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
index 85fd80520184..327a855253e6 100644
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -2159,10 +2159,11 @@ int xfrm_state_migrate_install(const struct xfrm_state *x,
struct xfrm_user_offload *xuo,
struct netlink_ext_ack *extack)
{
- if (xfrm_addr_equal(&x->id.daddr, &m->new_daddr, m->new_family)) {
+ if (m->new_family == m->old_family &&
+ xfrm_addr_equal(&x->id.daddr, &m->new_daddr, m->new_family)) {
/*
- * Care is needed when the destination address
- * of the state is to be updated as it is a part of triplet.
+ * Care is needed when the destination address of the state is
+ * to be updated as it is a part of triplet.
*/
xfrm_state_insert(xc);
} else {