All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steffen Klassert <steffen.klassert@secunet.com>
To: Antony Antony <antony.antony@secunet.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Simon Horman <horms@kernel.org>, David Ahern <dsahern@kernel.org>,
	Jamal Hadi Salim <hadi@cyberus.ca>, Shuah Khan <shuah@kernel.org>,
	Sabrina Dubroca <sd@queasysnail.net>, <netdev@vger.kernel.org>,
	Yan Yan <evitayan@google.com>,
	Tobias Brunner <tobias@strongswan.org>,
	Florian Westphal <fw@strlen.de>, <linux-doc@vger.kernel.org>,
	<stable+noautosel@kernel.org>, Sashiko <sashiko-bot@kernel.org>
Subject: Re: [PATCH ipsec v5 0/9] xfrm: state: exact mark/mask match for control-plane SA lookups
Date: Tue, 20 Oct 2026 07:44:14 +0200	[thread overview]
Message-ID: <atb_rttOpKrO3MRP@secunet.com> (raw)
In-Reply-To: <migrate-state-fixes-v5-0-d9d3d794553d@secunet.com>

On Wed, Oct 07, 2026 at 11:34:13AM +0200, Antony Antony wrote:
> While looking into a XFRM_MSG_MIGRATE_STATE issue reported by Sashiko,
> we found the underlying problem generalizes: xfrm allows multiple SAs
> to coexist for the same (SPI, daddr, proto) differing only in mark,
> and every netlink method that resolves "which SA" - xfrm get_sa(),
> del_sa(), update, get_ae, new_ae, expire, migrate - uses the same
> wildcard mark match the data path needs. A broader-mask SA can
> silently shadow a more specific one:
> 
>   # ip xfrm state add ... spi 0x1000 mark 1 mask 1 (SA_target)
>   # ip xfrm state add ... spi 0x1000 mark 0 mask 0
>     (SA_decoy, catch-all, added after -> bucket head)
>   # ip xfrm state delete dst ... proto esp spi 0x1000 mark 1 mask 1
>     -> deletes SA_decoy; SA_target survives, untouched
> 
> xfrm policy had the same bug, fixed in commit 4f47e8ab6ab7
> ("xfrm: policy: match with both mark and mask on user interfaces").
> 
> Netlink state lookups using spi use an exact mark/mask match except
> for UPDSA; the wildcard match stays for the data path and state_add only.
> This series applies that fix across every affected method,
> not just XFRM_MSG_MIGRATE_STATE.
> 
> Also reject marks with value bits outside the mask (state ADD,
> ALLOCSPI, policy ADD, MIGRATE_STATE new mark). These are
> misconfigurations anyway, since the extra bits can never match, and
> break exact match added here.
> 
> This series does not touch PF_KEY, which no longer receives
> non-critical fixes.
> 
> state_lookup_byaddr is out of scope. This is only fixing spi based
> lookups.
> 
> ---
> v4->v5: policy: drop the redundant mark sanitize in xfrm_policy_insert()
>       - tweak commit messages
> 
> - Link to v4: https://patch.msgid.link/migrate-state-fixes-v4-0-d5054459fc78@secunet.com
> v3->v4: add 3 patches to reject mark value bits outside the mask for state and policy
> 
> - Link to v3: https://patch.msgid.link/migrate-state-fixes-v3-6-836125bb53dd@secunet.com
> 
> v2->v3: mark match use only values and no mask in exact lookup
> 
> - Link to v2: https://lore.kernel.org/all/migrate-state-fixes-v2-0-c3e2767f0d96@secunet.com/
> v1->v2: few more wildcard mark check reported by sashiko and Yan
>       - keep wildcard match in xfrm_state_update() (UPDSA)
> 
> - Link to v1: https://patch.msgid.link/migrate-state-fixes-v0-8-a69e8637ba3b@secunet.com
> ---
> 
> ---
> Antony Antony (9):
>       xfrm: state: reject mark with bits outside its mask on add
>       xfrm: state: reject mark with bits outside its mask on ALLOCSPI
>       xfrm: policy: reject mark with bits outside its mask on add
>       xfrm: state: exact mark/mask match for SPI-keyed control-plane SA lookups
>       xfrm: fix use-after-free of migrated state in xfrm_do_migrate_state()
>       xfrm: fix hw offload state leak on xfrm_do_migrate_state() error path
>       xfrm: include mark in MIGRATE_STATE SA collision check
>       xfrm: pass extack through to xfrm_init_replay() from xfrm_init_state()
>       docs: xfrm: include mark in XFRM_MSG_MIGRATE_STATE EEXIST tuple
> 
>  .../networking/xfrm/xfrm_migrate_state.rst         |  25 +++--
>  include/net/xfrm.h                                 |   7 ++
>  net/xfrm/xfrm_policy.c                             |   3 -
>  net/xfrm/xfrm_state.c                              | 101 +++++++++++++++++----
>  net/xfrm/xfrm_user.c                               |  81 ++++++++++++-----
>  5 files changed, 166 insertions(+), 51 deletions(-)

Series applied, thanks a lot Antony!

      parent reply	other threads:[~2026-10-20  5:44 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-07  9:34 [PATCH ipsec v5 0/9] xfrm: state: exact mark/mask match for control-plane SA lookups Antony Antony
2026-10-07  9:34 ` [PATCH ipsec v5 1/9] xfrm: state: reject mark with bits outside its mask on add Antony Antony
2026-10-07  9:34 ` [PATCH ipsec v5 2/9] xfrm: state: reject mark with bits outside its mask on ALLOCSPI Antony Antony
2026-10-07  9:35 ` [PATCH ipsec v5 3/9] xfrm: policy: reject mark with bits outside its mask on add Antony Antony
2026-10-07  9:35 ` [PATCH ipsec v5 4/9] xfrm: state: exact mark/mask match for SPI-keyed control-plane SA lookups Antony Antony
2026-10-07  9:35 ` [PATCH ipsec v5 5/9] xfrm: fix use-after-free of migrated state in xfrm_do_migrate_state() Antony Antony
2026-10-07  9:35 ` [PATCH ipsec v5 6/9] xfrm: fix hw offload state leak on xfrm_do_migrate_state() error path Antony Antony
2026-10-07  9:35 ` [PATCH ipsec v5 7/9] xfrm: include mark in MIGRATE_STATE SA collision check Antony Antony
2026-10-07  9:35 ` [PATCH ipsec v5 8/9] xfrm: pass extack through to xfrm_init_replay() from xfrm_init_state() Antony Antony
2026-10-07  9:36 ` [PATCH ipsec v5 9/9] docs: xfrm: include mark in XFRM_MSG_MIGRATE_STATE EEXIST tuple Antony Antony
2026-10-20  5:44 ` Steffen Klassert [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=atb_rttOpKrO3MRP@secunet.com \
    --to=steffen.klassert@secunet.com \
    --cc=antony.antony@secunet.com \
    --cc=davem@davemloft.net \
    --cc=dsahern@kernel.org \
    --cc=edumazet@google.com \
    --cc=evitayan@google.com \
    --cc=fw@strlen.de \
    --cc=hadi@cyberus.ca \
    --cc=herbert@gondor.apana.org.au \
    --cc=horms@kernel.org \
    --cc=kuba@kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=sashiko-bot@kernel.org \
    --cc=sd@queasysnail.net \
    --cc=shuah@kernel.org \
    --cc=stable+noautosel@kernel.org \
    --cc=tobias@strongswan.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.