Re: [PATCH] nfsd: fix error handling of register_pernet_subsys() in init_nfsd()

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

 



On Thu, Sep 30, 2021 at 03:48:42AM +0000, Ho, Patrick wrote:
> >From 7417896fcc7aea645fa0b89f39fa55979251dca3 Mon Sep 17 00:00:00 2001
> From: Patrick Ho <Patrick.Ho@xxxxxxxxxx>
> Date: Sat, 21 Aug 2021 02:56:26 -0400
> Subject: [PATCH] nfsd: fix error handling of register_pernet_subsys() in
>  init_nfsd()
> 
> init_nfsd() should not unregister pernet subsys if the register fails
> but should instead unwind from the last successful operation which is
> register_filesystem().
> 
> Unregistering a failed register_pernet_subsys() call can result in
> a kernel GPF as revealed by programmatically injecting an error in
> register_pernet_subsys().
> 
> Verified the fix handled failure gracefully with no lingering nfsd
> entry in /proc/filesystems.  This change was introduced by the commit
> bd5ae9288d64 ("nfsd: register pernet ops last, unregister first"),
> the original error handling logic was correct.

Whoops, thanks for catching this.  I assume Chuck will pick it up.

Acked-by: J. Bruce Fields <bfields@xxxxxxxxxx>

--b.

> 
> Fixes: bd5ae9288d64 ("nfsd: register pernet ops last, unregister first")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Patrick Ho <Patrick.Ho@xxxxxxxxxx>
> ---
>  fs/nfsd/nfsctl.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
> index c2c3d9077dc5..09ae1a0873d0 100644
> --- a/fs/nfsd/nfsctl.c
> +++ b/fs/nfsd/nfsctl.c
> @@ -1545,7 +1545,7 @@ static int __init init_nfsd(void)
>  		goto out_free_all;
>  	return 0;
>  out_free_all:
> -	unregister_pernet_subsys(&nfsd_net_ops);
> +	unregister_filesystem(&nfsd_fs_type);
>  out_free_exports:
>  	remove_proc_entry("fs/nfs/exports", NULL);
>  	remove_proc_entry("fs/nfs", NULL);
> -- 
> 2.17.1



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux