Linux NFS development
 help / color / mirror / Atom feed
From: Jeff Layton <jlayton@kernel.org>
To: Chuck Lever <cel@kernel.org>, NeilBrown <neil@brown.name>,
	Olga Kornievskaia <okorniev@redhat.com>,
	Dai Ngo <dai.ngo@oracle.com>, Tom Talpey <tom@talpey.com>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH] lockd: Regenerate NLMv4 XDR code
Date: Tue, 30 Jun 2026 11:59:26 -0400	[thread overview]
Message-ID: <2703b7c43779c8fbe6a8440bc7554aa348648079.camel@kernel.org> (raw)
In-Reply-To: <20260630155638.874492-1-cel@kernel.org>

On Tue, 2026-06-30 at 11:56 -0400, Chuck Lever wrote:
> The checked-in NLMv4 xdrgen output predates the addition of enum
> value validation to generated decoders. As a result the decoders for
> fsh4_mode, fsh4_access, and nlm4_stats still accept any 32-bit value,
> while the current generator rejects values outside the enumeration.
> Resync the generated files with the in-tree xdrgen by regenerating
> from the unchanged nlm4.x specification.
> 
> This is a plain regeneration with no specification change; it also
> refreshes the recorded specification modification time to show that
> all existing enum decoders have picked up the xdrgen tool fix.
> 
> Signed-off-by: Chuck Lever <cel@kernel.org>
> ---
>  fs/lockd/nlm3xdr_gen.c               |  2 +-
>  fs/lockd/nlm3xdr_gen.h               |  2 +-
>  fs/lockd/nlm4xdr_gen.c               | 47 ++++++++++++++++++++++++++--
>  fs/lockd/nlm4xdr_gen.h               |  2 +-
>  fs/nfsd/nfs4xdr_gen.c                |  2 +-
>  fs/nfsd/nfs4xdr_gen.h                |  2 +-
>  include/linux/sunrpc/xdrgen/nfs4_1.h |  2 +-
>  include/linux/sunrpc/xdrgen/nlm3.h   |  2 +-
>  include/linux/sunrpc/xdrgen/nlm4.h   |  2 +-
>  9 files changed, 53 insertions(+), 10 deletions(-)
> 
> diff --git a/fs/lockd/nlm3xdr_gen.c b/fs/lockd/nlm3xdr_gen.c
> index 9ed5a41b5daf..352a694ca0f5 100644
> --- a/fs/lockd/nlm3xdr_gen.c
> +++ b/fs/lockd/nlm3xdr_gen.c
> @@ -1,7 +1,7 @@
>  // SPDX-License-Identifier: GPL-2.0
>  // Generated by xdrgen. Manual edits will be lost.
>  // XDR specification file: ../../Documentation/sunrpc/xdr/nlm3.x
> -// XDR specification modification time: Thu Apr 23 10:56:34 2026
> +// XDR specification modification time: Mon Jun 29 20:39:34 2026
>  
>  #include <linux/sunrpc/svc.h>
>  
> diff --git a/fs/lockd/nlm3xdr_gen.h b/fs/lockd/nlm3xdr_gen.h
> index c99038e99805..d24cbb887b7f 100644
> --- a/fs/lockd/nlm3xdr_gen.h
> +++ b/fs/lockd/nlm3xdr_gen.h
> @@ -1,7 +1,7 @@
>  /* SPDX-License-Identifier: GPL-2.0 */
>  /* Generated by xdrgen. Manual edits will be lost. */
>  /* XDR specification file: ../../Documentation/sunrpc/xdr/nlm3.x */
> -/* XDR specification modification time: Thu Apr 23 10:56:34 2026 */
> +/* XDR specification modification time: Mon Jun 29 20:39:34 2026 */
>  
>  #ifndef _LINUX_XDRGEN_NLM3_DECL_H
>  #define _LINUX_XDRGEN_NLM3_DECL_H
> diff --git a/fs/lockd/nlm4xdr_gen.c b/fs/lockd/nlm4xdr_gen.c
> index 1c8c221db456..004ea01c689e 100644
> --- a/fs/lockd/nlm4xdr_gen.c
> +++ b/fs/lockd/nlm4xdr_gen.c
> @@ -1,7 +1,7 @@
>  // SPDX-License-Identifier: GPL-2.0
>  // Generated by xdrgen. Manual edits will be lost.
>  // XDR specification file: ../../Documentation/sunrpc/xdr/nlm4.x
> -// XDR specification modification time: Thu Dec 25 13:10:19 2025
> +// XDR specification modification time: Mon Jun 29 20:39:36 2026
>  
>  #include <linux/sunrpc/svc.h>
>  
> @@ -20,6 +20,16 @@ xdrgen_decode_fsh4_mode(struct xdr_stream *xdr, fsh4_mode *ptr)
>  
>  	if (xdr_stream_decode_u32(xdr, &val) < 0)
>  		return false;
> +	/* Compiler may optimize to a range check for dense enums */
> +	switch (val) {
> +	case fsm_DN:
> +	case fsm_DR:
> +	case fsm_DW:
> +	case fsm_DRW:
> +		break;
> +	default:
> +		return false;
> +	}
>  	*ptr = val;
>  	return true;
>  }
> @@ -31,6 +41,16 @@ xdrgen_decode_fsh4_access(struct xdr_stream *xdr, fsh4_access *ptr)
>  
>  	if (xdr_stream_decode_u32(xdr, &val) < 0)
>  		return false;
> +	/* Compiler may optimize to a range check for dense enums */
> +	switch (val) {
> +	case fsa_NONE:
> +	case fsa_R:
> +	case fsa_W:
> +	case fsa_RW:
> +		break;
> +	default:
> +		return false;
> +	}
>  	*ptr = val;
>  	return true;
>  }
> @@ -62,7 +82,30 @@ xdrgen_decode_int32(struct xdr_stream *xdr, int32 *ptr)
>  static bool __maybe_unused
>  xdrgen_decode_nlm4_stats(struct xdr_stream *xdr, nlm4_stats *ptr)
>  {
> -	return xdr_stream_decode_be32(xdr, ptr) == 0;
> +	__be32 raw;
> +	u32 val;
> +
> +	if (xdr_stream_decode_be32(xdr, &raw) < 0)
> +		return false;
> +	val = be32_to_cpu(raw);
> +	/* Compiler may optimize to a range check for dense enums */
> +	switch (val) {
> +	case NLM4_GRANTED:
> +	case NLM4_DENIED:
> +	case NLM4_DENIED_NOLOCKS:
> +	case NLM4_BLOCKED:
> +	case NLM4_DENIED_GRACE_PERIOD:
> +	case NLM4_DEADLCK:
> +	case NLM4_ROFS:
> +	case NLM4_STALE_FH:
> +	case NLM4_FBIG:
> +	case NLM4_FAILED:
> +		break;
> +	default:
> +		return false;
> +	}
> +	*ptr = raw;
> +	return true;
>  }
>  
>  static bool __maybe_unused
> diff --git a/fs/lockd/nlm4xdr_gen.h b/fs/lockd/nlm4xdr_gen.h
> index b6008b296a3e..b5898f0e0689 100644
> --- a/fs/lockd/nlm4xdr_gen.h
> +++ b/fs/lockd/nlm4xdr_gen.h
> @@ -1,7 +1,7 @@
>  /* SPDX-License-Identifier: GPL-2.0 */
>  /* Generated by xdrgen. Manual edits will be lost. */
>  /* XDR specification file: ../../Documentation/sunrpc/xdr/nlm4.x */
> -/* XDR specification modification time: Thu Dec 25 13:10:19 2025 */
> +/* XDR specification modification time: Mon Jun 29 20:39:36 2026 */
>  
>  #ifndef _LINUX_XDRGEN_NLM4_DECL_H
>  #define _LINUX_XDRGEN_NLM4_DECL_H
> diff --git a/fs/nfsd/nfs4xdr_gen.c b/fs/nfsd/nfs4xdr_gen.c
> index a6725c773768..e5a6ea4a9349 100644
> --- a/fs/nfsd/nfs4xdr_gen.c
> +++ b/fs/nfsd/nfs4xdr_gen.c
> @@ -1,7 +1,7 @@
>  // SPDX-License-Identifier: GPL-2.0
>  // Generated by xdrgen. Manual edits will be lost.
>  // XDR specification file: ../../Documentation/sunrpc/xdr/nfs4_1.x
> -// XDR specification modification time: Wed Mar 25 11:40:02 2026
> +// XDR specification modification time: Tue Jun 30 11:56:05 2026
>  
>  #include <linux/sunrpc/svc.h>
>  
> diff --git a/fs/nfsd/nfs4xdr_gen.h b/fs/nfsd/nfs4xdr_gen.h
> index f6a458a07406..4092379a9efa 100644
> --- a/fs/nfsd/nfs4xdr_gen.h
> +++ b/fs/nfsd/nfs4xdr_gen.h
> @@ -1,7 +1,7 @@
>  /* SPDX-License-Identifier: GPL-2.0 */
>  /* Generated by xdrgen. Manual edits will be lost. */
>  /* XDR specification file: ../../Documentation/sunrpc/xdr/nfs4_1.x */
> -/* XDR specification modification time: Wed Mar 25 11:40:02 2026 */
> +/* XDR specification modification time: Tue Jun 30 11:56:05 2026 */
>  
>  #ifndef _LINUX_XDRGEN_NFS4_1_DECL_H
>  #define _LINUX_XDRGEN_NFS4_1_DECL_H
> diff --git a/include/linux/sunrpc/xdrgen/nfs4_1.h b/include/linux/sunrpc/xdrgen/nfs4_1.h
> index 356c3da9f4e0..6ff4d727b0d2 100644
> --- a/include/linux/sunrpc/xdrgen/nfs4_1.h
> +++ b/include/linux/sunrpc/xdrgen/nfs4_1.h
> @@ -1,7 +1,7 @@
>  /* SPDX-License-Identifier: GPL-2.0 */
>  /* Generated by xdrgen. Manual edits will be lost. */
>  /* XDR specification file: ../../Documentation/sunrpc/xdr/nfs4_1.x */
> -/* XDR specification modification time: Wed Mar 25 11:40:02 2026 */
> +/* XDR specification modification time: Tue Jun 30 11:56:05 2026 */
>  
>  #ifndef _LINUX_XDRGEN_NFS4_1_DEF_H
>  #define _LINUX_XDRGEN_NFS4_1_DEF_H
> diff --git a/include/linux/sunrpc/xdrgen/nlm3.h b/include/linux/sunrpc/xdrgen/nlm3.h
> index 897e7d91807c..3cc69a09c1c7 100644
> --- a/include/linux/sunrpc/xdrgen/nlm3.h
> +++ b/include/linux/sunrpc/xdrgen/nlm3.h
> @@ -1,7 +1,7 @@
>  /* SPDX-License-Identifier: GPL-2.0 */
>  /* Generated by xdrgen. Manual edits will be lost. */
>  /* XDR specification file: ../../Documentation/sunrpc/xdr/nlm3.x */
> -/* XDR specification modification time: Thu Apr 23 10:56:34 2026 */
> +/* XDR specification modification time: Mon Jun 29 20:39:34 2026 */
>  
>  #ifndef _LINUX_XDRGEN_NLM3_DEF_H
>  #define _LINUX_XDRGEN_NLM3_DEF_H
> diff --git a/include/linux/sunrpc/xdrgen/nlm4.h b/include/linux/sunrpc/xdrgen/nlm4.h
> index e95e8f105624..7b6f10ea2838 100644
> --- a/include/linux/sunrpc/xdrgen/nlm4.h
> +++ b/include/linux/sunrpc/xdrgen/nlm4.h
> @@ -1,7 +1,7 @@
>  /* SPDX-License-Identifier: GPL-2.0 */
>  /* Generated by xdrgen. Manual edits will be lost. */
>  /* XDR specification file: ../../Documentation/sunrpc/xdr/nlm4.x */
> -/* XDR specification modification time: Thu Dec 25 13:10:19 2025 */
> +/* XDR specification modification time: Mon Jun 29 20:39:36 2026 */
>  
>  #ifndef _LINUX_XDRGEN_NLM4_DEF_H
>  #define _LINUX_XDRGEN_NLM4_DEF_H


Reviewed-by: Jeff Layton <jlayton@kernel.org>

      reply	other threads:[~2026-06-30 15:59 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-30 15:56 [PATCH] lockd: Regenerate NLMv4 XDR code Chuck Lever
2026-06-30 15:59 ` Jeff Layton [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2703b7c43779c8fbe6a8440bc7554aa348648079.camel@kernel.org \
    --to=jlayton@kernel.org \
    --cc=cel@kernel.org \
    --cc=dai.ngo@oracle.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=neil@brown.name \
    --cc=okorniev@redhat.com \
    --cc=tom@talpey.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox