diff options
author | Moonchild <moonchild@palemoon.org> | 2020-07-29 14:30:24 +0000 |
---|---|---|
committer | Moonchild <moonchild@palemoon.org> | 2020-07-29 14:30:24 +0000 |
commit | a1ca8ca9bd1f4442dcbe613efa04f37a2c7b9f57 (patch) | |
tree | 9df45decf2d7d940ff19641adea50fe7122805f7 /netwerk/sctp/src/netinet/sctp_input.c | |
parent | 86b184b957ea2ce31e5ffc376e90cbc537963367 (diff) | |
parent | 2ee2ca7dfb0913eef79708dc4100f87b9557e128 (diff) | |
download | UXP-a1ca8ca9bd1f4442dcbe613efa04f37a2c7b9f57.tar UXP-a1ca8ca9bd1f4442dcbe613efa04f37a2c7b9f57.tar.gz UXP-a1ca8ca9bd1f4442dcbe613efa04f37a2c7b9f57.tar.lz UXP-a1ca8ca9bd1f4442dcbe613efa04f37a2c7b9f57.tar.xz UXP-a1ca8ca9bd1f4442dcbe613efa04f37a2c7b9f57.zip |
Merge branch 'redwood' into release
Diffstat (limited to 'netwerk/sctp/src/netinet/sctp_input.c')
-rwxr-xr-x | netwerk/sctp/src/netinet/sctp_input.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/netwerk/sctp/src/netinet/sctp_input.c b/netwerk/sctp/src/netinet/sctp_input.c index 1301b430c..f469e0f5c 100755 --- a/netwerk/sctp/src/netinet/sctp_input.c +++ b/netwerk/sctp/src/netinet/sctp_input.c @@ -2517,6 +2517,27 @@ sctp_handle_cookie_echo(struct mbuf *m, int iphlen, int offset, /* cookie too small */ return (NULL); } +#if defined(__Userspace__) + /* + * Recover the AF_CONN addresses within the cookie. + * This needs to be done in the buffer provided for later processing + * of the cookie and in the mbuf chain for HMAC validation. + */ + if ((cookie->addr_type == SCTP_CONN_ADDRESS) && (src->sa_family == AF_CONN)) { + struct sockaddr_conn *sconnp = (struct sockaddr_conn *)src; + + memcpy(cookie->address, &sconnp->sconn_addr , sizeof(void *)); + m_copyback(m, cookie_offset + offsetof(struct sctp_state_cookie, address), + (int)sizeof(void *), (caddr_t)&sconnp->sconn_addr); + } + if ((cookie->laddr_type == SCTP_CONN_ADDRESS) && (dst->sa_family == AF_CONN)) { + struct sockaddr_conn *sconnp = (struct sockaddr_conn *)dst; + + memcpy(cookie->laddress, &sconnp->sconn_addr , sizeof(void *)); + m_copyback(m, cookie_offset + offsetof(struct sctp_state_cookie, laddress), + (int)sizeof(void *), (caddr_t)&sconnp->sconn_addr); + } +#endif /* * split off the signature into its own mbuf (since it should not be * calculated in the sctp_hmac_m() call). |