I think we should make the sanity control here, even if it may be redundant. To first see connect() return ok, and then have a message rejected because is illogical and confusing to the user. Besides, this is not time critical.
///jon From: Erik Hugne <[email protected]> Sent: 9-Mar-19 03:42 To: [email protected]; Jon Maloy <[email protected]>; Xue, Ying <[email protected]> Subject: Re: [PATCH net] tipc: allow multicast address to be associated for RDM/DGRAM sockets 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 <[email protected]<mailto:[email protected]>>: 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 <[email protected]<mailto:[email protected]>>: From: Erik Hugne <[email protected]<mailto:[email protected]>> 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 <[email protected]<mailto:[email protected]>> --- 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 _______________________________________________ tipc-discussion mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/tipc-discussion
