OSDN Git Service

nfsd: allow disabling NFSv2 at compile time
authorJeff Layton <jlayton@kernel.org>
Tue, 18 Oct 2022 11:47:56 +0000 (07:47 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 28 Nov 2022 17:54:45 +0000 (12:54 -0500)
rpc.nfsd stopped supporting NFSv2 a year ago. Take the next logical
step toward deprecating it and allow NFSv2 support to be compiled out.

Add a new CONFIG_NFSD_V2 option that can be turned off and rework the
CONFIG_NFSD_V?_ACL option dependencies. Add a description that
discourages enabling it.

Also, change the description of CONFIG_NFSD to state that the always-on
version is now 3 instead of 2.

Finally, add an #ifdef around "case 2:" in __write_versions. When NFSv2
is disabled at compile time, this should make the kernel ignore attempts
to disable it at runtime, but still error out when trying to enable it.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Tom Talpey <tom@talpey.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/Kconfig
fs/nfsd/Makefile
fs/nfsd/nfsctl.c
fs/nfsd/nfsd.h
fs/nfsd/nfssvc.c

index f6a2fd3..7c441f2 100644 (file)
@@ -8,6 +8,7 @@ config NFSD
        select SUNRPC
        select EXPORTFS
        select NFS_ACL_SUPPORT if NFSD_V2_ACL
+       select NFS_ACL_SUPPORT if NFSD_V3_ACL
        depends on MULTIUSER
        help
          Choose Y here if you want to allow other computers to access
@@ -26,19 +27,29 @@ config NFSD
 
          Below you can choose which versions of the NFS protocol are
          available to clients mounting the NFS server on this system.
-         Support for NFS version 2 (RFC 1094) is always available when
+         Support for NFS version 3 (RFC 1813) is always available when
          CONFIG_NFSD is selected.
 
          If unsure, say N.
 
-config NFSD_V2_ACL
-       bool
+config NFSD_V2
+       bool "NFS server support for NFS version 2 (DEPRECATED)"
        depends on NFSD
+       default n
+       help
+         NFSv2 (RFC 1094) was the first publicly-released version of NFS.
+         Unless you are hosting ancient (1990's era) NFS clients, you don't
+         need this.
+
+         If unsure, say N.
+
+config NFSD_V2_ACL
+       bool "NFS server support for the NFSv2 ACL protocol extension"
+       depends on NFSD_V2
 
 config NFSD_V3_ACL
        bool "NFS server support for the NFSv3 ACL protocol extension"
        depends on NFSD
-       select NFSD_V2_ACL
        help
          Solaris NFS servers support an auxiliary NFSv3 ACL protocol that
          never became an official part of the NFS version 3 protocol.
index 805c06d..6fffc8f 100644 (file)
@@ -10,9 +10,10 @@ obj-$(CONFIG_NFSD)   += nfsd.o
 # this one should be compiled first, as the tracing macros can easily blow up
 nfsd-y                 += trace.o
 
-nfsd-y                         += nfssvc.o nfsctl.o nfsproc.o nfsfh.o vfs.o \
-                          export.o auth.o lockd.o nfscache.o nfsxdr.o \
+nfsd-y                         += nfssvc.o nfsctl.o nfsfh.o vfs.o \
+                          export.o auth.o lockd.o nfscache.o \
                           stats.o filecache.o nfs3proc.o nfs3xdr.o
+nfsd-$(CONFIG_NFSD_V2) += nfsproc.o nfsxdr.o
 nfsd-$(CONFIG_NFSD_V2_ACL) += nfs2acl.o
 nfsd-$(CONFIG_NFSD_V3_ACL) += nfs3acl.o
 nfsd-$(CONFIG_NFSD_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4idmap.o \
index 68ed42f..d1e581a 100644 (file)
@@ -581,7 +581,9 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
 
                        cmd = sign == '-' ? NFSD_CLEAR : NFSD_SET;
                        switch(num) {
+#ifdef CONFIG_NFSD_V2
                        case 2:
+#endif
                        case 3:
                                nfsd_vers(nn, num, cmd);
                                break;
index 09726c5..93b42ef 100644 (file)
@@ -64,8 +64,7 @@ struct readdir_cd {
 
 
 extern struct svc_program      nfsd_program;
-extern const struct svc_version        nfsd_version2, nfsd_version3,
-                               nfsd_version4;
+extern const struct svc_version        nfsd_version2, nfsd_version3, nfsd_version4;
 extern struct mutex            nfsd_mutex;
 extern spinlock_t              nfsd_drc_lock;
 extern unsigned long           nfsd_drc_max_mem;
index bfbd9f6..62e473b 100644 (file)
@@ -91,8 +91,12 @@ unsigned long        nfsd_drc_mem_used;
 #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
 static struct svc_stat nfsd_acl_svcstats;
 static const struct svc_version *nfsd_acl_version[] = {
+# if defined(CONFIG_NFSD_V2_ACL)
        [2] = &nfsd_acl_version2,
+# endif
+# if defined(CONFIG_NFSD_V3_ACL)
        [3] = &nfsd_acl_version3,
+# endif
 };
 
 #define NFSD_ACL_MINVERS            2
@@ -116,7 +120,9 @@ static struct svc_stat      nfsd_acl_svcstats = {
 #endif /* defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) */
 
 static const struct svc_version *nfsd_version[] = {
+#if defined(CONFIG_NFSD_V2)
        [2] = &nfsd_version2,
+#endif
        [3] = &nfsd_version3,
 #if defined(CONFIG_NFSD_V4)
        [4] = &nfsd_version4,