Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Mar 2015 20:58:53 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-bugs@FreeBSD.org
Subject:   [Bug 198570] Add fnctl(F_GETPATH) support to FreeBSD
Message-ID:  <bug-198570-8@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=198570

            Bug ID: 198570
           Summary: Add fnctl(F_GETPATH) support to FreeBSD
           Product: Base System
           Version: 11.0-CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: kern
          Assignee: freebsd-bugs@FreeBSD.org
          Reporter: s_bugzilla@nedprod.com

Related: #197695 (Fix broken KERN_PROC_FILEDESC sysctl), #197778 (Implement the
AT_EMPTY_PATH race free Linux extension).

The lack of a facility to fetch the current path of an open file descriptor
prevents race free filesystem code. For example, right now there is no reliable
way of opening a fd to the containing directory of an open file handle, and
therefore there is no way of unlinking, renaming or hard linking a file which
has been relocated by a third party since it was opened.

Ideally FreeBSD ought to provide direct fd file operations (#197778), but even
with a full suite of those there remains one occasion when you really must have
the full path for an open fd: when you are symlinking from somewhere to
wherever that fd references on the filing system.

What is annoying is that this is straightforward on Windows especially, and
with a bit of work on Linux. On OS X F_GETPATH is unstable with respect to hard
links, so it returns any of the hard links to a fd, and it's somewhat random
which you get.

Would there be any appetite for FreeBSD to gain a F_GETPATH fnctl?

char buffer[4096];
int len;
if(-1==(len=fnctl(fd, F_GETPATH, buffer, sizeof(buffer))))
  errno might be EBADF, EOVERFLOW;
buffer[0...len] contains the zero terminated path of the hard link originally
opened as the fd which is a null string if that hard link has been deleted.

This would bring to FreeBSD semantic equivalence to Linux and Windows. And not
replicate the broken F_GETPATH in OS X.

Niall

-- 
You are receiving this mail because:
You are the assignee for the bug.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-198570-8>