On 2/12/2026 1:53 PM, Anatoly Burakov wrote:
The original IPsec "add SA from flow" function expected a void* pointer to
security session as its first argument. However, the actual code was not
passing that, instead it passed `rte_flow_action_security` which was a
*container* for security session pointer.

Fix it by passing correct pointer type, as well as make typing more
explicit to let compiler catch such bugs in the future.

Fixes: 9a0752f498d2 ("net/ixgbe: enable inline IPsec")
Cc: [email protected]
Cc: [email protected]

Signed-off-by: Anatoly Burakov <[email protected]>
---

<snip>

+               const struct ip_spec *spec)
  {
-       /**
-        * FIXME Updating the session priv data when the session is const.
-        * Typecasting done here is wrong and the implementation need to be 
corrected.
-        */
-       struct ixgbe_crypto_session *ic_session = (void *)(uintptr_t)
-                       ((const struct rte_security_session 
*)sess)->driver_priv_data;
+       struct ixgbe_crypto_session *ic_session =
+                       RTE_CAST_PTR(struct ixgbe_crypto_session *, 
sess->driver_priv_data);

Despite being removed, the comment is still true. This is an artifact of how we get the crypto session (it comes from security rte_flow action, which is const).

I suppose this could be fixed by looking up the security session by pointer, but this would quickly get out of hand if we have a lot of security sessions, so there's not much choice other than to cast away the constness here. Ideas are welcome though!

--
Thanks,
Anatoly

Reply via email to