In TCP, connect() can return incorrect error code EINVAL
instead of EADDRINUSE or ECONNREFUSED PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=196035 Differential Revision: https://reviews.freebsd.org/D1982 Reported by: Mark Nunberg <mnunberg@haskalah.org> Submitted by: Harrison Grundy <harrison.grundy@astrodoggroup.com> Reviewed by: adrian, jch, glebius, gnn Approved by: jhb MFC after: 2 weeks
This commit is contained in:
parent
17c127beed
commit
a315333276
@ -476,8 +476,12 @@ tcp_usr_connect(struct socket *so, struct sockaddr *nam, struct thread *td)
|
||||
inp = sotoinpcb(so);
|
||||
KASSERT(inp != NULL, ("tcp_usr_connect: inp == NULL"));
|
||||
INP_WLOCK(inp);
|
||||
if (inp->inp_flags & (INP_TIMEWAIT | INP_DROPPED)) {
|
||||
error = EINVAL;
|
||||
if (inp->inp_flags & INP_TIMEWAIT) {
|
||||
error = EADDRINUSE;
|
||||
goto out;
|
||||
}
|
||||
if (inp->inp_flags & INP_DROPPED) {
|
||||
error = ECONNREFUSED;
|
||||
goto out;
|
||||
}
|
||||
tp = intotcpcb(inp);
|
||||
@ -523,8 +527,12 @@ tcp6_usr_connect(struct socket *so, struct sockaddr *nam, struct thread *td)
|
||||
inp = sotoinpcb(so);
|
||||
KASSERT(inp != NULL, ("tcp6_usr_connect: inp == NULL"));
|
||||
INP_WLOCK(inp);
|
||||
if (inp->inp_flags & (INP_TIMEWAIT | INP_DROPPED)) {
|
||||
error = EINVAL;
|
||||
if (inp->inp_flags & INP_TIMEWAIT) {
|
||||
error = EADDRINUSE;
|
||||
goto out;
|
||||
}
|
||||
if (inp->inp_flags & INP_DROPPED) {
|
||||
error = ECONNREFUSED;
|
||||
goto out;
|
||||
}
|
||||
tp = intotcpcb(inp);
|
||||
|
Loading…
x
Reference in New Issue
Block a user