lkml.org 
[lkml]   [2012]   [Mar]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH] proc: fix mount -t proc -o AAA
    Date
    On Saturday 24 of March 2012, Andrew Morton wrote:
    > On Fri, 23 Mar 2012 21:10:58 +0400
    >
    > Vasiliy Kulikov <segoon@openwall.com> wrote:
    > > proc_parse_options() inside of proc_mount() runs only once at the boot
    > > time without any given options. So, following umount(2)+mount(2) ignore
    > > mount options: proc_parse_options() is not called as ->s_root is already
    > > initialized. To fix that parse mount options unconditionally.
    > >
    > > Signed-off-by: Vasiliy Kulikov <segoon@openwall.com>
    > > Reported-by: Arkadiusz Mi__kiewicz <a.miskiewicz@gmail.com>
    > > ---
    > >
    > > fs/proc/root.c | 9 +++++----
    > > 1 files changed, 5 insertions(+), 4 deletions(-)
    > >
    > > diff --git a/fs/proc/root.c b/fs/proc/root.c
    > > index 46a15d8..eed44bf 100644
    > > --- a/fs/proc/root.c
    > > +++ b/fs/proc/root.c
    > > @@ -115,12 +115,13 @@ static struct dentry *proc_mount(struct
    > > file_system_type *fs_type,
    > >
    > > if (IS_ERR(sb))
    > >
    > > return ERR_CAST(sb);
    > >
    > > + if (!proc_parse_options(options, ns)) {
    > > + deactivate_locked_super(sb);
    > > + return ERR_PTR(-EINVAL);
    > > + }
    > > +
    > >
    > > if (!sb->s_root) {
    > >
    > > sb->s_flags = flags;
    > >
    > > - if (!proc_parse_options(options, ns)) {
    > > - deactivate_locked_super(sb);
    > > - return ERR_PTR(-EINVAL);
    > > - }
    > >
    > > err = proc_fill_super(sb);
    > > if (err) {
    > >
    > > deactivate_locked_super(sb);
    >
    > I'm surprised. "mount -o remount,<options>" doesn't work on a mounted
    > procfs, and nobody noticed until now?

    For me initial mount -o options didn't apply these options. Then mount -o
    remount,options applied these.

    > The patch looks OK - has it been tested with both valid and invalid
    > mount options?

    Well, it fixes my initial case where initial mount failed to apply options.

    Just tested with invalid options.

    [ 18.518529] proc: unrecognized mount option "crap" or missing value

    but there is another problem - unmounting it and mounting without options
    causes old option to persist:

    # mount none /proc -t proc -o hidepid=2
    # umount /proc
    # mount none /proc -t proc
    # grep "/proc" /proc/mounts
    none /proc proc rw,relatime,hidepid=2 0 0

    There should be no hidepid=2 now.

    > I redid the changelog:
    >
    >
    > From: Vasiliy Kulikov <segoon@openwall.com>
    > Subject: proc: fix mount -t proc -o AAA
    >
    > The proc_parse_options() call from proc_mount() runs only once at boot
    > time. So on any later mount attempt, any mount options are ignored
    > because ->s_root is already initialized.
    >
    > As a consequence, "mount -o remount,<options>" will ignore the options.

    So this changelog doesn't match what I saw.

    >
    > To fix this, parse the mount options unconditionally.
    >
    > Signed-off-by: Vasiliy Kulikov <segoon@openwall.com>
    > Reported-by: Arkadiusz Miskiewicz <a.miskiewicz@gmail.com>
    > Cc: Alexey Dobriyan <adobriyan@gmail.com>
    > Cc: Al Viro <viro@zeniv.linux.org.uk>
    > Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    > ---
    >
    > fs/proc/root.c | 9 +++++----
    > 1 file changed, 5 insertions(+), 4 deletions(-)
    >
    > diff -puN fs/proc/root.c~proc-fix-mount-t-proc-o-aaa fs/proc/root.c
    > --- a/fs/proc/root.c~proc-fix-mount-t-proc-o-aaa
    > +++ a/fs/proc/root.c
    > @@ -115,12 +115,13 @@ static struct dentry *proc_mount(struct
    > if (IS_ERR(sb))
    > return ERR_CAST(sb);
    >
    > + if (!proc_parse_options(options, ns)) {
    > + deactivate_locked_super(sb);
    > + return ERR_PTR(-EINVAL);
    > + }
    > +
    > if (!sb->s_root) {
    > sb->s_flags = flags;
    > - if (!proc_parse_options(options, ns)) {
    > - deactivate_locked_super(sb);
    > - return ERR_PTR(-EINVAL);
    > - }
    > err = proc_fill_super(sb);
    > if (err) {
    > deactivate_locked_super(sb);
    > _


    --
    Arkadiusz Miśkiewicz PLD/Linux Team
    arekm / maven.pl http://ftp.pld-linux.org/
    --
    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/

    \
     
     \ /
      Last update: 2012-03-25 09:27    [W:0.026 / U:33.600 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site