All of lore.kernel.org
 help / color / mirror / Atom feed
From: bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r@public.gmane.org
To: linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: [Bug 73301] Documentation misses case of link, linkat, symlink, symlinkat giving ENOENT for a directory with a reference only held by a process
Date: Fri, 02 May 2014 13:11:30 +0000	[thread overview]
Message-ID: <bug-73301-11311-jhQb1VYGd3@https.bugzilla.kernel.org/> (raw)
In-Reply-To: <bug-73301-11311-3bo0kxnWaOQUvHkbgXJLS5sdmw4N0Rt+2LY78lusg7I@public.gmane.org/>

https://bugzilla.kernel.org/show_bug.cgi?id=73301

Michael Kerrisk <mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org

--- Comment #2 from Michael Kerrisk <mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> ---
Steven,

(In reply to Steven Stewart-Gallus from comment #0)
> The errors printed out by the following code on symlink and symlinkat are
> missed by the documentation.
> 
> #include <fcntl.h>
> #include <stdio.h>
> #include <sys/stat.h>
> #include <sys/types.h>
> #include <unistd.h>
> 
> int main() {
>     if (-1 == mkdir("/tmp/temporary", S_IRWXU)) {
>         perror("mkdir");
>     }
> 
>     int dir = open("/tmp/temporary", O_RDONLY | O_CLOEXEC);
>     if (-1 == dir) {
>         perror("open");
>     }
> 
>     if (-1 == rmdir("/tmp/temporary")) {
>         perror("rmdir");
>     }
> 
>     if (-1 == symlinkat("/", dir, "root")) {
>         perror("symlinkat");
>     }

So far, so good.

>     char template_text[] = "/proc/self/fd/XXXXXXXXXXX/root";
>     sprintf(template_text, "/proc/self/fd/%i/root", dir);
>     if (-1 == symlink("/", template_text)) {
>         perror("symlink");
>     }

I'm a little puzzled, why would one want to make a symlink somewhere under
/proc?

> 
>     return 0;
> }
> 
> The calls to symlink and symlinkat in this case give ENOENT errors. 

For symlinkat(), I can see the logic. You're trying to create a link relative
to a directory that does not exist. Could the call reasonably do anything other
than fail?

> This
> might also be a small oversight which is probably impossible to change now.
> I wonder if the code thinks this is a dangling symbolic link (a case which
> is mentioned by the documentation)?
> 
> The POSIX standard issue 7 also seems to miss this corner case (although it
> might simply be an omission of mentioning a system dependant case rather
> than a bug for the POSIX standard).

The specs in POSIX were driven from the Linux implementation effort, so I don;t
think that your hypothesis there would fit.

> I'm not sure how exactly one would explain this corner case in the
> documentation.

I'd be willing to give it a shot, but, first,I'm not sure what if anything to
say about the symlink() case. Do you have a more realistic example of that
case?

-- 
You are receiving this mail because:
You are watching the assignee of the bug.
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2014-05-02 13:11 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-31 19:09 [Bug 73301] New: Documentation misses case of symlink, symlinkat giving ENOENT for a directory with a reference only held by a process bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r
     [not found] ` <bug-73301-11311-3bo0kxnWaOQUvHkbgXJLS5sdmw4N0Rt+2LY78lusg7I@public.gmane.org/>
2014-03-31 19:22   ` [Bug 73301] " bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r
2014-03-31 19:22   ` [Bug 73301] Documentation misses case of link, linkat, " bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r
2014-05-02 13:11   ` bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r [this message]
2014-05-02 18:51   ` bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r
2014-05-05 11:06   ` bugzilla-daemon-590EEB7GvNiWaY/ihj7yzEB+6BGkLq7r

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-73301-11311-jhQb1VYGd3@https.bugzilla.kernel.org/ \
    --to=bugzilla-daemon-590eeb7gvniway/ihj7yzeb+6bgklq7r@public.gmane.org \
    --cc=linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.