On Wed, Jan 25, 2017 at 11:27 PM, Vladislav Yasevich <vyasevich@xxxxxxxxx> wrote: > On Tue, Jan 24, 2017 at 1:01 AM, Xin Long <lucien.xin@xxxxxxxxx> wrote: >> >> sctp_addr_id2transport is a function for sockopt to look up assoc by >> address. As the address is from userspace, it can be a v4-mapped v6 >> address. But in sctp protocol stack, it always handles a v4-mapped >> v6 address as a v4 address. So it's necessary to convert it to a v4 >> address before looking up assoc by address. >> >> This patch is to fix it by calling sctp_verify_addr in which it can do >> this conversion before calling sctp_endpoint_lookup_assoc, just like >> what sctp_sendmsg and __sctp_connect do for the address from users. >> >> Signed-off-by: Xin Long <lucien.xin@xxxxxxxxx> >> --- >> net/sctp/socket.c | 6 +++++- >> 1 file changed, 5 insertions(+), 1 deletion(-) >> >> diff --git a/net/sctp/socket.c b/net/sctp/socket.c >> index 318c678..37eeab7 100644 >> --- a/net/sctp/socket.c >> +++ b/net/sctp/socket.c >> @@ -235,8 +235,12 @@ static struct sctp_transport >> *sctp_addr_id2transport(struct sock *sk, >> sctp_assoc_t id) >> { >> struct sctp_association *addr_asoc = NULL, *id_asoc = NULL; >> - struct sctp_transport *transport; >> + struct sctp_af *af = sctp_get_af_specific(addr->ss_family); >> union sctp_addr *laddr = (union sctp_addr *)addr; >> + struct sctp_transport *transport; >> + >> + if (sctp_verify_addr(sk, laddr, af->sockaddr_len)) >> + return NULL; >> > > This causes a side-effect such that GET options will end up with ipv4 > address instead > of a v4mapped address that was passed in. not really (more below) > > -vlad > >> >> addr_asoc = sctp_endpoint_lookup_assoc(sctp_sk(sk)->ep, >> laddr, sctp_get_pf_specific(sk->sk_family)->addr_to_user(sctp_sk(sk), (union sctp_addr *)addr); here it will convert it back to v4mapped v6 address. >> -- >> 2.1.0 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-sctp" in >> the body of a message to majordomo@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- To unsubscribe from this list: send the line "unsubscribe linux-sctp" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html