Repository: trafficserver Updated Branches: refs/heads/master 81e843f78 -> 4089b3952
TS-3307: TSVConnFdCreate does not allow non-socket file descriptor Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/4089b395 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/4089b395 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/4089b395 Branch: refs/heads/master Commit: 4089b3952d9f811c1bd605b50f388ade8c991682 Parents: 81e843f Author: shinrich <[email protected]> Authored: Tue Jan 20 17:04:15 2015 -0600 Committer: shinrich <[email protected]> Committed: Tue Jan 20 17:04:15 2015 -0600 ---------------------------------------------------------------------- CHANGES | 2 ++ iocore/net/UnixNetVConnection.cc | 7 +++---- 2 files changed, 5 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/4089b395/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index a1fb46a..a074681 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ -*- coding: utf-8 -*- Changes with Apache Traffic Server 5.3.0 + *) [TS-3307] TSVConnFdCreate does not allow non-socket file descriptors. + *) [TS-2421] MultiCache could theoretically create world-writeable files. This is masked (pun intended) by system default umask's. http://git-wip-us.apache.org/repos/asf/trafficserver/blob/4089b395/iocore/net/UnixNetVConnection.cc ---------------------------------------------------------------------- diff --git a/iocore/net/UnixNetVConnection.cc b/iocore/net/UnixNetVConnection.cc index 3e4c847..8262509 100644 --- a/iocore/net/UnixNetVConnection.cc +++ b/iocore/net/UnixNetVConnection.cc @@ -1134,11 +1134,10 @@ UnixNetVConnection::connectUp(EThread *t, int fd) } else { int len = sizeof(con.sock_type); + // This call will fail if fd is not a socket (e.g. it is a + // eventfd or a regular file fd. That is ok, because sock_type + // is only used when setting up the socket. res = safe_getsockopt(fd, SOL_SOCKET, SO_TYPE, (char *)&con.sock_type, &len); - if (res != 0) { - goto fail; - } - safe_nonblocking(fd); con.fd = fd; con.is_connected = true;
