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

Reply via email to