From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: Andy Lutomirski <luto@amacapital.net>
Cc: linux-kernel@vger.kernel.org,
Linux FS Devel <linux-fsdevel@vger.kernel.org>,
Al Viro <viro@zeniv.linux.org.uk>
Subject: Re: Should unprivileged linkat(..., AT_EMPTY_PATH) work on O_TMPFILE files?
Date: Mon, 12 Aug 2013 09:50:19 +0530 [thread overview]
Message-ID: <87haevbkvw.fsf@linux.vnet.ibm.com> (raw)
In-Reply-To: <CALCETrXKzMBwkEFCsGeLB1sqFFPjivpFR2P8ZMeuZX5SAuZZjA@mail.gmail.com>
Andy Lutomirski <luto@amacapital.net> writes:
> On Sun, Aug 11, 2013 at 9:45 AM, Aneesh Kumar K.V
> <aneesh.kumar@linux.vnet.ibm.com> wrote:
>> Andy Lutomirski <luto@amacapital.net> writes:
>>
>>> The change:
>>>
>>> commit f4e0c30c191f87851c4a53454abb55ee276f4a7e
>>> Author: Al Viro <viro@zeniv.linux.org.uk>
>>> Date: Tue Jun 11 08:34:36 2013 +0400
>>>
>>> allow the temp files created by open() to be linked to
>>>
>>> O_TMPFILE | O_CREAT => linkat() with AT_SYMLINK_FOLLOW and /proc/self/fd/<n>
>>> as oldpath (i.e. flink()) will create a link
>>> O_TMPFILE | O_CREAT | O_EXCL => ENOENT on attempt to link those guys
>>>
>>> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
>>>
>>> makes it possible to hardlink an O_TMPFILE file using procfs. Should
>>> linkat(fd, "", newdirfd, newpath, AT_EMPTY_PATH) also work?
>>>
>>> AFAICS it currently requires CAP_DAC_READ_SEARCH, but I'm a bit
>>> confused as to why linkat(..., AT_EMPTY_PATH) should have a stricter
>>> check than linkat(AT_FDCWD, "/proc/self/fd/n", ...,
>>> AT_SYMLINK_FOLLOW), (The relevant change is
>>> 11a7b371b64ef39fc5fb1b6f2218eef7c4d035e3.)
>>>
>>> FWIW, this program works on Linux 3.9, which makes me doubt that the
>>> security restriction on linkat is doing any good:
>>>
>>> #include <stdio.h>
>>> #include <err.h>
>>> #include <fcntl.h>
>>> #include <unistd.h>
>>>
>>> int main(int argc, char **argv)
>>> {
>>> char buf[128];
>>>
>>> if (argc != 3)
>>> errx(1, "Usage: flink FD PATH");
>>>
>>> sprintf(buf, "/proc/self/fd/%d", atoi(argv[1]));
>>> if (linkat(AT_FDCWD, buf, AT_FDCWD, argv[2], AT_SYMLINK_FOLLOW) != 0)
>>> err(1, "linkat");
>>> return 0;
>>> }
>>>
>>>
>>> Removing the check from the AT_EMPTY_PATH case would simplify code
>>> that wants to write a file, fsync it, and then flink it in.
>>
>> I understand that this got merged upstream. But in case of the above
>> test we would walk the path pointed by /proc/self/fd/<x> right ?
>>
>> ie,
>>
>> 20 -> /home/no-access/k
>>
>> will the above test work ? Now if i pass the '20' to another application
>> I can affectively create a hardlink to that outside no-access and if k
>> happens to have 'r' for others, then everybody will be able to read
>> right ?. I understand that limitting the read access based on directory
>> permission is not a good idea. But aren't we expected to keep that ?
>
> The symlinks in /proc/self/fd are rather magical and don't actually
> walk the path. Give it a try :)
>
How about fd passed from one application to another(say from a1 to
a2). a2 won't have read permission on /proc/a1/fd/ and also don't know
the value of file descriptor he should use right ? Will the /proc/self/fd
method work in such case ? IIUC with AT_EMPTY_PATH a2 can create the
link in the above case right ? So if /proc/self/fd doesn't work should
we allow that ?
-aneesh
next prev parent reply other threads:[~2013-08-12 4:20 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-26 1:56 Should unprivileged linkat(..., AT_EMPTY_PATH) work on O_TMPFILE files? Andy Lutomirski
2013-08-02 4:44 ` [PATCH] fs: Allow unprivileged linkat(..., AT_EMPTY_PATH) aka flink Andy Lutomirski
2013-08-11 16:45 ` Should unprivileged linkat(..., AT_EMPTY_PATH) work on O_TMPFILE files? Aneesh Kumar K.V
2013-08-11 18:46 ` Andy Lutomirski
2013-08-12 4:20 ` Aneesh Kumar K.V [this message]
2013-08-12 4:25 ` Aneesh Kumar K.V
2013-08-12 18:13 ` Andy Lutomirski
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=87haevbkvw.fsf@linux.vnet.ibm.com \
--to=aneesh.kumar@linux.vnet.ibm.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=viro@zeniv.linux.org.uk \
/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.