[PATCH ipsec-next v2 0/5] xfrm: remove xfrm replay indirections
From: Florian Westphal <fw@strlen.de>
Date: 2021-06-18 13:52:22
This is v2 of an older patchset that got stuck in backlog hell. Changes: - drop bogus "get rid of duplicated notification code" patch. As noted by Sabrina it does change behavior. - fix a compiler warning in patch 2. ipsec.c selftest passes. The xfrm replay logic is implemented via indirect calls. xfrm_state struct holds a pointer to a 'struct xfrm_replay', which is one of several replay protection backends. XFRM then invokes the backend via state->repl->callback(). Due to retpoline all indirect calls have become a lot more expensive. Fortunately, there are no 'replay modules', all are available for direct calls. This series removes the 'struct xfrm_replay' and adds replay functions that can be called instead of the redirection. Example: - err = x->repl->overflow(x, skb); + err = xfrm_replay_overflow(x, skb); Instead of a pointer to a struct with function pointers, xfrm_state now holds an enum that tells the replay core what kind of replay test is to be done. Florian Westphal (5): xfrm: replay: avoid xfrm replay notify indirection xfrm: replay: remove advance indirection xfrm: replay: remove recheck indirection xfrm: replay: avoid replay indirection xfrm: replay: remove last replay indirection include/net/xfrm.h | 29 ++++--- net/xfrm/xfrm_input.c | 6 +- net/xfrm/xfrm_output.c | 2 +- net/xfrm/xfrm_replay.c | 171 +++++++++++++++++++++++++---------------- net/xfrm/xfrm_state.c | 2 +- 5 files changed, 123 insertions(+), 87 deletions(-) -- 2.31.1