From: Erik H. <eri...@gm...> - 2019-03-09 08:42:12
|
OTOH, an invalid address will be caught on the first send(), where -EHOSTUNREACH will be returned. Jon, what do you think? Den fre 8 mars 2019 kl 21:16 skrev Erik Hugne <eri...@gm...>: > I just realized that we may need to do some basic validation of > TIPC_MULTICAST addresses. > With this patch, it will allow to connect() an address with lower > upper, > which is bad. > > > Den fre 8 mars 2019 kl 20:09 skrev <eri...@gm...>: > >> From: Erik Hugne <eri...@gm...> >> >> Perform the address type validation after we check if it's a >> connectionless socket, allowing TIPC_MULTICAST addresses to be >> associated with RDM/DGRAM sockets. This was broken in the commit >> listed below. >> >> Fixes: 23998835be98 ("tipc: improve address sanity check in >> tipc_connect()") >> Signed-off-by: Erik Hugne <eri...@gm...> >> --- >> net/tipc/socket.c | 9 ++++----- >> 1 file changed, 4 insertions(+), 5 deletions(-) >> >> diff --git a/net/tipc/socket.c b/net/tipc/socket.c >> index e482b342bfa8..0ad8e6585adf 100644 >> --- a/net/tipc/socket.c >> +++ b/net/tipc/socket.c >> @@ -2387,16 +2387,15 @@ static int tipc_connect(struct socket *sock, >> struct sockaddr *dest, >> } else if (dst->family != AF_TIPC) { >> res = -EINVAL; >> } >> - if (dst->addrtype != TIPC_ADDR_ID && dst->addrtype != >> TIPC_ADDR_NAME) >> - res = -EINVAL; >> - if (res) >> - goto exit; >> - >> /* DGRAM/RDM connect(), just save the destaddr */ >> if (tipc_sk_type_connectionless(sk)) { >> memcpy(&tsk->peer, dest, destlen); >> goto exit; >> } >> + if (dst->addrtype != TIPC_ADDR_ID && dst->addrtype != >> TIPC_ADDR_NAME) >> + res = -EINVAL; >> + if (res) >> + goto exit; >> >> previous = sk->sk_state; >> >> -- >> 2.14.1 >> >> |