ipsec-types: Add a proper hash function for ipsec_sa_cfg_t

While 3c12905103 ("ipsec: Add function to compare two ipsec_sa_cfg_t
instances") added a comparison function to avoid issues with non-zeroed
padding, hashes were still calculated using chunk_hash().
This commit is contained in:
Tobias Brunner
2026-02-12 14:23:44 +01:00
parent 3df3af8eb7
commit f10b9adec9
4 changed files with 26 additions and 2 deletions
@@ -470,7 +470,7 @@ static u_int ipsec_sa_hash(ipsec_sa_t *sa)
chunk_hash_inc(chunk_from_thing(sa->mark),
chunk_hash_inc(chunk_from_thing(sa->if_id),
chunk_hash_inc(chunk_from_thing(sa->hw_offload),
chunk_hash(chunk_from_thing(sa->cfg)))))));
ipsec_sa_cfg_hash(&sa->cfg))))));
}
/**
@@ -348,7 +348,7 @@ static u_int ipsec_sa_hash(ipsec_sa_t *sa)
{
return chunk_hash_inc(sa->src->get_address(sa->src),
chunk_hash_inc(sa->dst->get_address(sa->dst),
chunk_hash(chunk_from_thing(sa->cfg))));
ipsec_sa_cfg_hash(&sa->cfg)));
}
/**
+16
View File
@@ -53,6 +53,22 @@ ENUM(dscp_copy_names, DSCP_COPY_OUT_ONLY, DSCP_COPY_NO,
"no",
);
/*
* See header
*/
u_int ipsec_sa_cfg_hash(ipsec_sa_cfg_t *this)
{
return chunk_hash_inc(chunk_from_thing(this->mode),
chunk_hash_inc(chunk_from_thing(this->reqid),
chunk_hash_inc(chunk_from_thing(this->policy_count),
chunk_hash_inc(chunk_from_thing(this->esp.use),
chunk_hash_inc(chunk_from_thing(this->esp.spi),
chunk_hash_inc(chunk_from_thing(this->ah.use),
chunk_hash_inc(chunk_from_thing(this->ah.spi),
chunk_hash_inc(chunk_from_thing(this->ipcomp.transform),
chunk_hash(chunk_from_thing(this->ipcomp.cpi))))))))));
}
/*
* See header
*/
+8
View File
@@ -179,6 +179,14 @@ struct ipsec_sa_cfg_t {
} ipcomp;
};
/**
* Hash an ipsec_sa_cfg_t object.
*
* @param this object to hash
* @return hash value
*/
u_int ipsec_sa_cfg_hash(ipsec_sa_cfg_t *this);
/**
* Compare two ipsec_sa_cfg_t objects for equality.
*