Re: [PATCH] lockd: Regenerate NLMv4 XDR code
Jeff Layton <[email protected]>
| Newsgroups | gmane.linux.nfs |
|---|---|
| Message-ID | <[email protected]> |
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 <[email protected]> > --- > 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 <[email protected]>