kernel-listener: Use a struct to pass data from acquires
This commit is contained in:
@@ -897,7 +897,7 @@ static void process_acquire(private_kernel_netlink_ipsec_t *this,
|
||||
struct xfrm_user_acquire *acquire;
|
||||
struct rtattr *rta;
|
||||
size_t rtasize;
|
||||
traffic_selector_t *src_ts, *dst_ts;
|
||||
kernel_acquire_data_t data = {};
|
||||
uint32_t reqid = 0;
|
||||
uint8_t proto;
|
||||
|
||||
@@ -930,10 +930,13 @@ static void process_acquire(private_kernel_netlink_ipsec_t *this,
|
||||
/* acquire for AH/ESP only, not for IPCOMP */
|
||||
return;
|
||||
}
|
||||
src_ts = selector2ts(&acquire->sel, TRUE);
|
||||
dst_ts = selector2ts(&acquire->sel, FALSE);
|
||||
data.src = selector2ts(&acquire->sel, TRUE);
|
||||
data.dst = selector2ts(&acquire->sel, FALSE);
|
||||
|
||||
charon->kernel->acquire(charon->kernel, reqid, src_ts, dst_ts);
|
||||
charon->kernel->acquire(charon->kernel, reqid, &data);
|
||||
|
||||
DESTROY_IF(data.src);
|
||||
DESTROY_IF(data.dst);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1318,8 +1318,8 @@ static void process_acquire(private_kernel_pfkey_ipsec_t *this,
|
||||
struct sadb_msg* msg)
|
||||
{
|
||||
pfkey_msg_t response;
|
||||
kernel_acquire_data_t data = {};
|
||||
uint32_t index, reqid = 0;
|
||||
traffic_selector_t *src_ts, *dst_ts;
|
||||
policy_entry_t *policy;
|
||||
policy_sa_t *sa;
|
||||
|
||||
@@ -1363,10 +1363,16 @@ static void process_acquire(private_kernel_pfkey_ipsec_t *this,
|
||||
this->mutex->unlock(this->mutex);
|
||||
}
|
||||
|
||||
src_ts = sadb_address2ts(response.src);
|
||||
dst_ts = sadb_address2ts(response.dst);
|
||||
if (reqid)
|
||||
{
|
||||
data.src = sadb_address2ts(response.src);
|
||||
data.dst = sadb_address2ts(response.dst);
|
||||
|
||||
charon->kernel->acquire(charon->kernel, reqid, src_ts, dst_ts);
|
||||
charon->kernel->acquire(charon->kernel, reqid, &data);
|
||||
|
||||
data.src->destroy(data.src);
|
||||
data.dst->destroy(data.dst);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1634,6 +1634,7 @@ 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 = {};
|
||||
uint32_t reqid = 0;
|
||||
trap_t *trap, key = {
|
||||
.filter_id = filter_id,
|
||||
@@ -1649,9 +1650,13 @@ static void acquire(private_kernel_wfp_ipsec_t *this, UINT64 filter_id,
|
||||
|
||||
if (reqid)
|
||||
{
|
||||
src = src ? src->clone(src) : NULL;
|
||||
dst = dst ? dst->clone(dst) : NULL;
|
||||
charon->kernel->acquire(charon->kernel, reqid, src, dst);
|
||||
data.src = src ? src->clone(src) : NULL;
|
||||
data.dst = dst ? dst->clone(dst) : NULL;
|
||||
|
||||
charon->kernel->acquire(charon->kernel, reqid, &data);
|
||||
|
||||
DESTROY_IF(data.src);
|
||||
DESTROY_IF(data.dst);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user