[PATCH] Cygwin: allow opening an AF_LOCAL/AF_UNIX socket with O_PATH

Ken Brown kbrown@cornell.edu
Sun Jan 19 20:25:00 GMT 2020


On 1/17/2020 4:51 AM, Corinna Vinschen wrote:
> On Jan 17 10:48, Corinna Vinschen wrote:
>> On Jan 16 18:34, Ken Brown wrote:
>>> If that flag is not set, or if an attempt is made to open a different
>>> type of socket, the errno is now EOPNOTSUPP instead of ENXIO.  This is
>>> consistent with POSIX, starting with the 2016 edition.  Earlier
>>> editions were silent on this issue.
>>> ---
>>>   winsup/cygwin/fhandler.h               |  2 ++
>>>   winsup/cygwin/fhandler_socket.cc       |  2 +-
>>>   winsup/cygwin/fhandler_socket_local.cc | 16 ++++++++++++++++
>>>   winsup/cygwin/fhandler_socket_unix.cc  | 16 ++++++++++++++++
>>>   winsup/cygwin/release/3.1.3            |  7 +++++++
>>>   winsup/doc/new-features.xml            |  6 ++++++
>>>   6 files changed, 48 insertions(+), 1 deletion(-)
>>
>> I'm a bit concerned here that some function calls might succeed
>> accidentally or even crash, given that the original socket code doesn't
>> cope with the nohandle flag.  Did you perform some basic testing?
> 
> Iow, do the usual socket calls on a fhandler_socket_local return EBADF
> now?  Ignoring fhandler_socket_unix for now.

I really hadn't thought this through very well.  I think the following 
additional patch should do the job:

--- a/winsup/cygwin/net.cc
+++ b/winsup/cygwin/net.cc
@@ -67,6 +67,11 @@ get (const int fd)

    if (!fh)
      set_errno (ENOTSOCK);
+  else if (fh->get_flags () & O_PATH)
+    {
+      set_errno (EBADF);
+      fh = NULL;
+    }

    return fh;
  }

I'll do some testing and then report back with a revised patch.  Thanks for 
catching my mistakes.

Ken



More information about the Cygwin-patches mailing list