From: "Serge E. Hallyn" <serge@hallyn.com>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: "Serge E. Hallyn" <serge@hallyn.com>,
Aditya Kali <adityakali@google.com>,
viro@zeniv.linux.org.uk, linux-fsdevel@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] proc: Fix namespace mountpoint path in /proc/mounts
Date: Thu, 21 Nov 2013 21:50:35 +0000 [thread overview]
Message-ID: <20131121215035.GA9773@mail.hallyn.com> (raw)
In-Reply-To: <87a9heqwkg.fsf@xmission.com>
Quoting Eric W. Biederman (ebiederm@xmission.com):
> "Serge E. Hallyn" <serge@hallyn.com> writes:
>
> > Quoting Aditya Kali (adityakali@google.com):
> >> Commit bf056bfa80596a5d14b26b17276a56a0dcb080e5:
> >> "proc: Fix the namespace inode permission checks." converted
> >> the namespace files into symlinks. The same commit changed
> >> the way namespace bind mounts appear in /proc/mounts:
> >> $ mount --bind /proc/self/ns/ipc /mnt/ipc
> >> Originally:
> >> $ cat /proc/mounts | grep ipc
> >> proc /mnt/ipc proc rw,nosuid,nodev,noexec 0 0
> >>
> >> After commit bf056bfa80596a5d14b26b17276a56a0dcb080e5:
> >> $ cat /proc/mounts | grep ipc
> >> proc ipc:[4026531839] proc rw,nosuid,nodev,noexec 0 0
> >>
> >> This breaks userspace which expects the 2nd field in
> >> /proc/mounts to be a valid path. This patch restores the
> >> original format of namespace bind-mount entries in
> >> /proc/mounts.
> >
> > Oh, at first I was thinking the mount source was showing up like that,
> > not the target. That is particularly ugly, I agree.
> >
> > I'm not sure what the purpose was of the ns_dname(). dcache.c says it's
> > for filesystems wanting to do 'special "root names"'. But this file
> > gets mounted to real paths, it's not actually rootless (like a pipefs
> > inode or anon_inode). So I think your patch is correct, but I'm waiting
> > to hear from Eric, as I'm not sure if you're masking some other effect
> > which Eric actually wanted, and maybe this should be fixed another
> > way...
>
> My apologies for taking a long time to get back to this one. I have
> been scratching my head on this one.
>
> There is most definitely a bug here, and worth fixing.
>
> But I believe the bug is actually in buried in /proc/mounts. ns_dname
> should be irrelevant as we are mounted.
>
> The problem comes down to d_path.
>
> I am not certain which is the best fix at the moment. It should either
> be a case of fixing d_path to see if the dentry is mounted, or making
> certain that the dentries have the name ns_dname is giving them when
> we allocate the dentries.
>
> I was focusing on the what a ns file descriptor should look like when it
> is opened but not mounted, when I wrote ns_dname, and that appearance
> really should continue if possible.
>
> I expect the easist way to fix this is to simply modify proc_ns_get_dentry to
> compute the dentry name that ns_dname uses today, and pass that name to
> d_alloc_psuedo.
>
> At which point we can delete ns_dname without problems.
Aditya, is this something you'd have time to write a patch for?
> Eric
>
>
> >> Signed-off-by: Aditya Kali <adityakali@google.com>
> >> ---
> >> fs/proc/namespaces.c | 10 ----------
> >> 1 file changed, 10 deletions(-)
> >>
> >> diff --git a/fs/proc/namespaces.c b/fs/proc/namespaces.c
> >> index 49a7fff..d19989d 100644
> >> --- a/fs/proc/namespaces.c
> >> +++ b/fs/proc/namespaces.c
> >> @@ -48,19 +48,9 @@ static int ns_delete_dentry(const struct dentry *dentry)
> >> return 1;
> >> }
> >>
> >> -static char *ns_dname(struct dentry *dentry, char *buffer, int buflen)
> >> -{
> >> - struct inode *inode = dentry->d_inode;
> >> - const struct proc_ns_operations *ns_ops = PROC_I(inode)->ns.ns_ops;
> >> -
> >> - return dynamic_dname(dentry, buffer, buflen, "%s:[%lu]",
> >> - ns_ops->name, inode->i_ino);
> >> -}
> >> -
> >> const struct dentry_operations ns_dentry_operations =
> >> {
> >> .d_delete = ns_delete_dentry,
> >> - .d_dname = ns_dname,
> >> };
> >>
> >> static struct dentry *proc_ns_get_dentry(struct super_block *sb,
> >> --
> >> 1.8.4.1
> >>
> >> --
> >> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> >> the body of a message to majordomo@vger.kernel.org
> >> More majordomo info at http://vger.kernel.org/majordomo-info.html
> >> Please read the FAQ at http://www.tux.org/lkml/
next prev parent reply other threads:[~2013-11-21 21:50 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-25 21:51 [PATCH] proc: Fix namespace mountpoint path in /proc/mounts Aditya Kali
2013-10-29 15:36 ` Serge E. Hallyn
2013-11-08 23:54 ` Eric W. Biederman
2013-11-21 21:50 ` Serge E. Hallyn [this message]
2013-11-21 22:46 ` Eric W. Biederman
2013-11-21 22:52 ` Serge E. Hallyn
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=20131121215035.GA9773@mail.hallyn.com \
--to=serge@hallyn.com \
--cc=adityakali@google.com \
--cc=ebiederm@xmission.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--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.