tech-net archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: can the IPv[4,6]-in-IPCOMP-in-{ESP,AH}-in-IPv[4,6] interop fix be applied to NetBSD 10?
Christos,
Thanks for reviewing this.
On Tue, 18 Oct 2022 at 15:42, Andrew Cagney <andrew.cagney%gmail.com@localhost> wrote:
>
> Hi,
>
> Could the patch in
> https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=56836
> please be considered for NetBSD 10?
> (I've also appended it, but I'm sure gmail will mangle it).
>
> Only with the patch applied will Linux<>NetBSD interop using:
>
> pfkeyv2-transport-ipv4-ah-ipcomp-ikev2
> pfkeyv2-transport-ipv4-esp-ipcomp-ikev2
> pfkeyv2-transport-ipv6-ah-ipcomp-ikev2
> pfkeyv2-transport-ipv6-esp-ipcomp-ikev2
> pfkeyv2-tunnel-4in4-ah-ipcomp-ikev2
> pfkeyv2-tunnel-4in4-esp-ipcomp-ikev2
> pfkeyv2-tunnel-6in6-ah-ipcomp-ikev2
> pfkeyv2-tunnel-6in6-esp-ipcomp-ikev2
>
> Andrew
>
> --
>
> always always send / expect CPI in IPcomp header
>
> Fixes kern/56836 where an IPsec interop combining compression and
> ESP|AH would fail.
>
> Since fast ipsec, the outgoing IPcomp header has contained the
> compression algorithm instead of the CPI. Adding the
> SADB_X_EXT_RAWCPI flag worked around this but ...
>
> The IPcomp's SADB was unconditionally hashed using the compression
> algorithm instead of the CPI. This meant that an incoming packet with
> a valid CPI could never match its SADB.
> ---
> sys/netipsec/key.c | 5 +----
> sys/netipsec/xform_ipcomp.c | 7 +------
> 2 files changed, 2 insertions(+), 10 deletions(-)
>
> diff --git a/sys/netipsec/key.c b/sys/netipsec/key.c
> index 4ad4a8d466d9..11577960f93f 100644
> --- a/sys/netipsec/key.c
> +++ b/sys/netipsec/key.c
> @@ -8755,10 +8755,7 @@ key_savlut_writer_insert_head(struct secasvar *sav)
> KASSERT(mutex_owned(&key_sad.lock));
> KASSERT(!sav->savlut_added);
>
> - if (sav->sah->saidx.proto == IPPROTO_IPCOMP)
> - hash_key = sav->alg_comp;
> - else
> - hash_key = sav->spi;
> + hash_key = sav->spi;
>
> hash = key_savluthash(&sav->sah->saidx.dst.sa,
> sav->sah->saidx.proto, hash_key, key_sad.savlutmask);
> diff --git a/sys/netipsec/xform_ipcomp.c b/sys/netipsec/xform_ipcomp.c
> index e94a0b471042..69d196bc7e39 100644
> --- a/sys/netipsec/xform_ipcomp.c
> +++ b/sys/netipsec/xform_ipcomp.c
> @@ -527,7 +527,6 @@ ipcomp_output_cb(struct cryptop *crp)
> struct mbuf *m, *mo;
> int error, skip, rlen, roff, flags;
> uint8_t prot;
> - uint16_t cpi;
> struct ipcomp * ipcomp;
> IPSEC_DECLARE_LOCK_VARIABLE;
>
> @@ -589,11 +588,7 @@ ipcomp_output_cb(struct cryptop *crp)
> #endif
> }
> ipcomp->comp_flags = 0;
> -
> - if ((sav->flags & SADB_X_EXT_RAWCPI) == 0)
> - cpi = sav->alg_enc;
> - else
> - cpi = ntohl(sav->spi) & 0xffff;
> + uint16_t cpi = ntohl(sav->spi) & 0xffff;
> ipcomp->comp_cpi = htons(cpi);
>
> /* Fix Next Protocol in IPv4/IPv6 header */
> --
> 2.35.3
Home |
Main Index |
Thread Index |
Old Index