Re: [PATCH] autofs: Test autofs versions first on sb initialization

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2016-07-07 at 13:42 +0800, Ian Kent wrote:
> On Mon, 2016-07-04 at 10:18 +0800, Ian Kent wrote:
> > On Sat, 2016-07-02 at 22:29 +0900, Tomohiro Kusumi wrote:
> > > This patch does what the below comment says.
> > > It could be and it's considered better to do this first
> > > before various functions get called during initialization.
> > 
> > I don't really see the importance of this but ok.
> > 
> > Though looking at it I think a problem with the error handling gotos has
> > crept
> > in (I think prior to your patch).
> > 
> > I'll need to look more closely at that when I get time.
> 
> I've added this to the list as well, along with a patch I think resolves the
> error handling exit gotos, could you have a look in case I've made any stupid
> mistakes.
> 
> autofs - fix autofs4_fill_super() error exit handling
> 
> From: Ian Kent <raven@xxxxxxxxxx>
> 
> Somewhere along the line the error handling gotos have become incorrect
> and a little more complicated than need be.
> 
> Signed-off-by: Ian Kent <raven@xxxxxxxxxx>
> ---
>  fs/autofs4/inode.c |    7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/autofs4/inode.c b/fs/autofs4/inode.c
> index 8357544..2b3b54b 100644
> --- a/fs/autofs4/inode.c
> +++ b/fs/autofs4/inode.c
> @@ -313,7 +313,7 @@ int autofs4_fill_super(struct super_block *s, void *data,
> int silent)
>  
>  	if (!pipe) {
>  		pr_err("could not open pipe file descriptor\n");
> -		goto fail_dput;
> +		goto fail_put_pid;
>  	}
>  	ret = autofs_prepare_pipe(pipe);
>  	if (ret < 0)
> @@ -334,14 +334,13 @@ int autofs4_fill_super(struct super_block *s, void
> *data,
> int silent)
>  fail_fput:
>  	pr_err("pipe file descriptor does not contain proper ops\n");
>  	fput(pipe);
> -	/* fall through */
> +fail_put_pid:
> +	put_pid(sbi->oz_pgrp);
>  fail_dput:
>  	dput(root);
> -	goto fail_free;

Ummm ... that goto is still needed, I've added it back.

>  fail_ino:
>  	kfree(ino);
>  fail_free:
> -	put_pid(sbi->oz_pgrp);
>  	kfree(sbi);
>  	s->s_fs_info = NULL;
>  	return ret;
> 
> 
> 
> > > 
> > > /* Couldn't this be tested earlier? */
> > > ---
> > >  fs/autofs4/inode.c | 34 +++++++++++++++++-----------------
> > >  1 file changed, 17 insertions(+), 17 deletions(-)
> > > 
> > > diff --git a/fs/autofs4/inode.c b/fs/autofs4/inode.c
> > > index 61b2105..8357544 100644
> > > --- a/fs/autofs4/inode.c
> > > +++ b/fs/autofs4/inode.c
> > > @@ -274,6 +274,23 @@ int autofs4_fill_super(struct super_block *s, void
> > > *data,
> > > int silent)
> > >  		goto fail_dput;
> > >  	}
> > >  
> > > +	/* Test versions first */
> > > +	if (sbi->max_proto < AUTOFS_MIN_PROTO_VERSION ||
> > > +	    sbi->min_proto > AUTOFS_MAX_PROTO_VERSION) {
> > > +		pr_err("kernel does not match daemon version "
> > > +		       "daemon (%d, %d) kernel (%d, %d)\n",
> > > +		       sbi->min_proto, sbi->max_proto,
> > > +		       AUTOFS_MIN_PROTO_VERSION,
> > > AUTOFS_MAX_PROTO_VERSION);
> > > +		goto fail_dput;
> > > +	}
> > > +
> > > +	/* Establish highest kernel protocol version */
> > > +	if (sbi->max_proto > AUTOFS_MAX_PROTO_VERSION)
> > > +		sbi->version = AUTOFS_MAX_PROTO_VERSION;
> > > +	else
> > > +		sbi->version = sbi->max_proto;
> > > +	sbi->sub_version = AUTOFS_PROTO_SUBVERSION;
> > > +
> > >  	if (pgrp_set) {
> > >  		sbi->oz_pgrp = find_get_pid(pgrp);
> > >  		if (!sbi->oz_pgrp) {
> > > @@ -291,23 +308,6 @@ int autofs4_fill_super(struct super_block *s, void
> > > *data,
> > > int silent)
> > >  	root_inode->i_fop = &autofs4_root_operations;
> > >  	root_inode->i_op = &autofs4_dir_inode_operations;
> > >  
> > > -	/* Couldn't this be tested earlier? */
> > > -	if (sbi->max_proto < AUTOFS_MIN_PROTO_VERSION ||
> > > -	    sbi->min_proto > AUTOFS_MAX_PROTO_VERSION) {
> > > -		pr_err("kernel does not match daemon version "
> > > -		       "daemon (%d, %d) kernel (%d, %d)\n",
> > > -		       sbi->min_proto, sbi->max_proto,
> > > -		       AUTOFS_MIN_PROTO_VERSION,
> > > AUTOFS_MAX_PROTO_VERSION);
> > > -		goto fail_dput;
> > > -	}
> > > -
> > > -	/* Establish highest kernel protocol version */
> > > -	if (sbi->max_proto > AUTOFS_MAX_PROTO_VERSION)
> > > -		sbi->version = AUTOFS_MAX_PROTO_VERSION;
> > > -	else
> > > -		sbi->version = sbi->max_proto;
> > > -	sbi->sub_version = AUTOFS_PROTO_SUBVERSION;
> > > -
> > >  	pr_debug("pipe fd = %d, pgrp = %u\n", pipefd, pid_nr(sbi
> > > ->oz_pgrp));
> > >  	pipe = fget(pipefd);
> > >  
> > --
> > To unsubscribe from this list: send the line "unsubscribe autofs" in
> --
> To unsubscribe from this list: send the line "unsubscribe autofs" in
--
To unsubscribe from this list: send the line "unsubscribe autofs" in



[Index of Archives]     [Linux Filesystem Development]     [Linux Ext4]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux