From d6eed3979b1f181458248eaee9753367ad69fb5f Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 26 Sep 2022 16:47:46 +0200 Subject: [PATCH] kernel-interface: Optionally pass CPU ID for which an acquire was triggered --- src/charon-tkm/src/ees/ees_callbacks.c | 4 +++- src/libcharon/kernel/kernel_listener.h | 2 ++ src/libcharon/plugins/kernel_libipsec/kernel_libipsec_ipsec.c | 4 +++- src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c | 4 +++- src/libcharon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c | 4 +++- src/libcharon/plugins/kernel_wfp/kernel_wfp_ipsec.c | 4 +++- 6 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/charon-tkm/src/ees/ees_callbacks.c b/src/charon-tkm/src/ees/ees_callbacks.c index c276a8ee7..74da4b61f 100644 --- a/src/charon-tkm/src/ees/ees_callbacks.c +++ b/src/charon-tkm/src/ees/ees_callbacks.c @@ -25,7 +25,9 @@ void charon_esa_acquire(result_type *res, const sp_id_type sp_id) { - kernel_acquire_data_t data = {}; + kernel_acquire_data_t data = { + .cpu = CPU_ID_MAX, + }; DBG1(DBG_KNL, "ees: acquire received for reqid %u", sp_id); charon->kernel->acquire(charon->kernel, sp_id, &data); diff --git a/src/libcharon/kernel/kernel_listener.h b/src/libcharon/kernel/kernel_listener.h index 55f952a17..eee9235db 100644 --- a/src/libcharon/kernel/kernel_listener.h +++ b/src/libcharon/kernel/kernel_listener.h @@ -40,6 +40,8 @@ struct kernel_acquire_data_t { traffic_selector_t *dst; /** Optional security label of the triggering packet */ sec_label_t *label; + /** Optional CPU ID of the triggering packet, CPU_ID_MAX if none */ + uint32_t cpu; /** Optional sequence number associated with the acquire */ uint32_t seq; }; diff --git a/src/libcharon/plugins/kernel_libipsec/kernel_libipsec_ipsec.c b/src/libcharon/plugins/kernel_libipsec/kernel_libipsec_ipsec.c index b0fb2f970..215eaa153 100644 --- a/src/libcharon/plugins/kernel_libipsec/kernel_libipsec_ipsec.c +++ b/src/libcharon/plugins/kernel_libipsec/kernel_libipsec_ipsec.c @@ -238,7 +238,9 @@ static void expire(uint8_t protocol, uint32_t spi, host_t *dst, bool hard) */ static void acquire(uint32_t reqid) { - kernel_acquire_data_t data = {}; + kernel_acquire_data_t data = { + .cpu = CPU_ID_MAX, + }; charon->kernel->acquire(charon->kernel, reqid, &data); } diff --git a/src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c b/src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c index fd47e4068..2e47ecc5c 100644 --- a/src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c +++ b/src/libcharon/plugins/kernel_netlink/kernel_netlink_ipsec.c @@ -974,7 +974,9 @@ static void process_acquire(private_kernel_netlink_ipsec_t *this, struct xfrm_user_acquire *acquire; struct rtattr *rta; size_t rtasize; - kernel_acquire_data_t data = {}; + kernel_acquire_data_t data = { + .cpu = CPU_ID_MAX, + }; chunk_t label = chunk_empty; uint32_t reqid = 0; uint8_t proto; diff --git a/src/libcharon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c b/src/libcharon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c index f9ac579ad..469b4b9cc 100644 --- a/src/libcharon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c +++ b/src/libcharon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c @@ -1324,7 +1324,9 @@ static void process_acquire(private_kernel_pfkey_ipsec_t *this, struct sadb_msg* msg) { pfkey_msg_t response; - kernel_acquire_data_t data = {}; + kernel_acquire_data_t data = { + .cpu = CPU_ID_MAX, + }; uint32_t index, reqid = 0; uint8_t mode = 0; policy_entry_t *policy; diff --git a/src/libcharon/plugins/kernel_wfp/kernel_wfp_ipsec.c b/src/libcharon/plugins/kernel_wfp/kernel_wfp_ipsec.c index a60dbe663..23ae82bbc 100644 --- a/src/libcharon/plugins/kernel_wfp/kernel_wfp_ipsec.c +++ b/src/libcharon/plugins/kernel_wfp/kernel_wfp_ipsec.c @@ -1637,7 +1637,9 @@ static u_int hash_trap(trap_t *trap) static void acquire(private_kernel_wfp_ipsec_t *this, UINT64 filter_id, traffic_selector_t *src, traffic_selector_t *dst) { - kernel_acquire_data_t data = {}; + kernel_acquire_data_t data = { + .cpu = CPU_ID_MAX, + }; uint32_t reqid = 0; trap_t *trap, key = { .filter_id = filter_id,