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