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;

Reply via email to